now encoding flattened bib data is json. added extractor function to display non...
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Fri, 21 Dec 2007 14:31:38 +0000 (14:31 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Fri, 21 Dec 2007 14:31:38 +0000 (14:31 +0000)
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
Open-ILS/web/oilsweb/oilsweb/lib/acq/search.py
Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/pl_builder.html

index e881b71..2c9142c 100644 (file)
@@ -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'
 
         
 
index dd30e55..d234dd8 100644 (file)
@@ -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
+
index df835e9..1abee2a 100644 (file)
             % for rec in res['records']:
                 <tr class='oils-acq-pl_builder-records-title-row'>
                     <td rowspan='3'>
-                        <% 
-                            isbn = rec["extracts"].get("bibdata.isbns.isbn") 
-                            if isinstance(isbn, list): 
-                                isbn = isbn[0]
-                        %>
                         <img class='oils-acq-pl_builder-records-jacket'
-                            src='${c.oils.core.ac_prefix}/jacket/small/${isbn}'/>
+                            src='${c.oils.core.ac_prefix}/jacket/small/${c.oils.acq.extract_bib_field(rec,"isbns.isbn")}'/>
                     </td>
                     <td>
-                        <a href='rdetails?${c.oils.make_query_string()}&${c.oils.acq.record_id_.cgi_name}=${rec["cache_id"]}&${c.oils.acq.search_cache_key_.cgi_name}=${c.oils.acq.search_cache_key}'>${rec['extracts'].get("bibdata.title")}</a>
+                        <a href='rdetails?${c.oils.make_query_string()}&${c.oils.acq.record_id_.cgi_name}=${rec["cache_id"]}&${c.oils.acq.search_cache_key_.cgi_name}=${c.oils.acq.search_cache_key}'>${c.oils.acq.extract_bib_field(rec, 'title')}</a>
                     </td>
-                    <td>${isbn}</td>
+                    <td>${c.oils.acq.extract_bib_field(rec, 'isbns.isbn')}</td>
                     <td>${res['service']}</td>
                 </tr>
 
                 </tr>
                 <tr class='oils-acq-pl_builder-records-author-row'>
-                    <td colspan='3'>${rec['extracts'].get("bibdata.author")}</td>
+                    <td colspan='3'>${c.oils.acq.extract_bib_field(rec, 'author')}</td>
                 </tr>
                 <tr class='oils-acq-pl_builder-records-phys_desc-row'>
                     <td colspan='3'>
-                        ${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')}
                     </td>
                 </tr>
             % endfor