From 5f28d6a9c95e4cf38e644cea478fa859211ded9c Mon Sep 17 00:00:00 2001 From: erickson Date: Fri, 21 Dec 2007 14:31:38 +0000 Subject: [PATCH] now encoding flattened bib data is json. added extractor function to display non-json in search results git-svn-id: svn://svn.open-ils.org/ILS/branches/acq-experiment@8266 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- Open-ILS/web/oilsweb/oilsweb/controllers/acq.py | 9 +++------ Open-ILS/web/oilsweb/oilsweb/lib/acq/search.py | 22 ++++++++++++++++------ .../templates/oils/default/acq/pl_builder.html | 17 ++++++----------- 3 files changed, 25 insertions(+), 23 deletions(-) diff --git a/Open-ILS/web/oilsweb/oilsweb/controllers/acq.py b/Open-ILS/web/oilsweb/oilsweb/controllers/acq.py index e881b71043..2c9142cb2c 100644 --- a/Open-ILS/web/oilsweb/oilsweb/controllers/acq.py +++ b/Open-ILS/web/oilsweb/oilsweb/controllers/acq.py @@ -5,7 +5,7 @@ import pylons import oilsweb.lib.context import oilsweb.lib.util import oilsweb.lib.acq.search -import osrf.cache +import osrf.cache, osrf.json from oilsweb.lib.context import Context, SubContext, ContextItem log = logging.getLogger(__name__) @@ -49,6 +49,7 @@ class AcqController(BaseController): if c.oils.acq.search_source: c.oils_acq_records, c.oils.acq.search_cache_key = self._build_z39_search(c.oils) + c.oils.acq.extract_bib_field = oilsweb.lib.acq.search.extract_bib_field return render('oils/%s/acq/pl_builder.html' % c.oils.core.skin) @@ -78,18 +79,14 @@ class AcqController(BaseController): c.oils = oilsweb.lib.context.Context.init(request) rec_id = c.oils.acq.record_id cache_key = c.oils.acq.search_cache_key - logging.info("record = " + str(rec_id)) - logging.info("cache_key = " + str(cache_key)) results = osrf.cache.CacheClient().get(cache_key) for res in results: for rec in res['records']: - logging.info('cache_id ' + str(rec['cache_id'])) if str(rec['cache_id']) == str(rec_id): - logging.info(unicode(rec)) c.oils.acq.record = rec return render('oils/%s/acq/rdetails.html' % c.oils.core.skin) - return '' + return 'exception -> no record' diff --git a/Open-ILS/web/oilsweb/oilsweb/lib/acq/search.py b/Open-ILS/web/oilsweb/oilsweb/lib/acq/search.py index dd30e55d08..d234dd8208 100644 --- a/Open-ILS/web/oilsweb/oilsweb/lib/acq/search.py +++ b/Open-ILS/web/oilsweb/oilsweb/lib/acq/search.py @@ -3,8 +3,9 @@ import oilsweb.lib.context import osrf.ses import osrf.xml_obj import oils.const -import osrf.log, osrf.cache +import osrf.log, osrf.cache, osrf.json +EG_Z39_SOURCES = 'open-ils.search.z3950.retrieve_services' EG_Z39_SEARCH = 'open-ils.search.z3950.search_class' _z_sources = None @@ -13,20 +14,18 @@ def fetch_z39_sources(ctx): if _z_sources: return _z_sources _z_sources = osrf.ses.AtomicRequest( - 'open-ils.search', - 'open-ils.search.z3950.retrieve_services', ctx.core.authtoken) + 'open-ils.search', EG_Z39_SOURCES, ctx.core.authtoken) return _z_sources def flatten_record(marcxml): import pylons xslFile = os.path.join(os.getcwd(), pylons.config['oils_xsl_prefix'], pylons.config['oils_xsl_acq_bib']) xformed = oilsweb.lib.util.apply_xsl(marcxml, xslFile) - return osrf.xml_obj.XMLFlattener(xformed).parse() + return osrf.xml_obj.XMLFlattener(xformed, True).parse() def multi_search(ctx, search): ses = osrf.ses.ClientSession(oils.const.OILS_APP_SEARCH) req = ses.request(EG_Z39_SEARCH, ctx.core.authtoken, search) - osrf.log.log_debug("sending " + unicode(search)) cache_id = 0 results = [] @@ -42,7 +41,6 @@ def multi_search(ctx, search): results.append(res) - osrf.log.log_debug("got " + unicode(results)) return results, cache_search(search, results) def cache_search(search, results): @@ -52,3 +50,15 @@ def cache_search(search, results): osrf.cache.CacheClient().put(key, results) return key +def extract_bib_field(rec, field, all=False): + f = rec['extracts'].get("bibdata." + field) + if not f: return "" + obj = osrf.json.to_object(f) + if isinstance(obj, list): + if all: + return obj + else: + return obj[0] + else: + return obj + diff --git a/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/pl_builder.html b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/pl_builder.html index df835e9050..1abee2a158 100644 --- a/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/pl_builder.html +++ b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/pl_builder.html @@ -12,29 +12,24 @@ % for rec in res['records']: - <% - isbn = rec["extracts"].get("bibdata.isbns.isbn") - if isinstance(isbn, list): - isbn = isbn[0] - %> + src='${c.oils.core.ac_prefix}/jacket/small/${c.oils.acq.extract_bib_field(rec,"isbns.isbn")}'/> - ${rec['extracts'].get("bibdata.title")} + ${c.oils.acq.extract_bib_field(rec, 'title')} - ${isbn} + ${c.oils.acq.extract_bib_field(rec, 'isbns.isbn')} ${res['service']} - ${rec['extracts'].get("bibdata.author")} + ${c.oils.acq.extract_bib_field(rec, 'author')} - ${rec['extracts'].get('bibdata.pubdate')} | - ${rec['extracts'].get('bibdata.physicalSize')} + ${c.oils.acq.extract_bib_field(rec, 'pubdate')} | + ${c.oils.acq.extract_bib_field(rec, 'physicalSize')} % endfor -- 2.11.0