From 4c0588f50f5e6ed9875c486df2973674318b50ab Mon Sep 17 00:00:00 2001 From: erickson Date: Fri, 18 Jan 2008 19:57:04 +0000 Subject: [PATCH] added create-picklist-from-search logic git-svn-id: svn://svn.open-ils.org/ILS/branches/acq-experiment@8420 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- .../oilsweb/oilsweb/controllers/acq/picklist.py | 53 +++----------------- Open-ILS/web/oilsweb/oilsweb/lib/acq/picklist.py | 32 +++++++++++- Open-ILS/web/oilsweb/oilsweb/lib/acq/search.py | 58 ++++++++++++++++------ .../acq/picklist/picklist_entry_summary.html | 4 +- .../oils/default/acq/picklist/search.html | 7 ++- .../oilsweb/templates/oils/default/navigate.html | 2 +- 6 files changed, 86 insertions(+), 70 deletions(-) diff --git a/Open-ILS/web/oilsweb/oilsweb/controllers/acq/picklist.py b/Open-ILS/web/oilsweb/oilsweb/controllers/acq/picklist.py index d93e514f2a..7bf731074a 100644 --- a/Open-ILS/web/oilsweb/oilsweb/controllers/acq/picklist.py +++ b/Open-ILS/web/oilsweb/oilsweb/controllers/acq/picklist.py @@ -36,11 +36,6 @@ class PicklistController(BaseController): def search(self): - return 'search interface' - - - ''' - def search(self): r = RequestMgr() r.ctx.acq.z39_sources = oilsweb.lib.acq.search.fetch_z39_sources(r.ctx) @@ -52,42 +47,18 @@ class PicklistController(BaseController): keys = sc.keys() keys.sort() r.ctx.acq.search_classes_sorted = keys - log.debug("keys = %s" % unicode(r.ctx.acq.z39_sources)) return r.render('acq/picklist/search.html') - def pl_builder(self): + def do_search(self): r = RequestMgr() - # add logic to see where we are fetching bib data from - # XXX fix - if r.ctx.acq.search_source: - c.oils_acq_records, r.ctx.acq.search_cache_key = self._build_z39_search(r.ctx) - - return r.render('acq/picklist/pl_builder.html') - - - def _build_z39_search(self, ctx): + picklist_id = oilsweb.lib.acq.search.multi_search( + r, oilsweb.lib.acq.search.compile_multi_search(r)) + return redirect_to('%s/picklist/view/%d' % (r.ctx.acq.prefix, int(picklist_id))) - search = { - 'service' : [], - 'username' : [], - 'password' : [], - 'search' : {} - } - - # collect the sources and credentials - for src in ctx.acq.search_source: - search['service'].append(src) - search['username'].append("") # XXX config values? in-db? - search['password'].append("") # XXX config values? in-db? - - # collect the search classes - for cls in ctx.acq.search_class: - if request.params[cls]: - search['search'][cls] = request.params[cls] - - return oilsweb.lib.acq.search.multi_search(ctx, search) + return 'search complete' + ''' def rdetails(self): r = RequestMgr() rec_id = r.ctx.acq.record_id @@ -102,12 +73,6 @@ class PicklistController(BaseController): return 'exception -> no record' - def view_picklist(self): - r = RequestMgr() - ses = osrf.ses.ClientSession(oils.const.OILS_APP_ACQ) - picklist = osrf - - def create_picklist(self): r = RequestMgr() if not isinstance(r.ctx.acq.picklist_item, list): @@ -122,10 +87,4 @@ class PicklistController(BaseController): c.oils_acq_records = records # XXX return r.render('acq/picklist/view.html') - - def _find_cached_record(self, results, cache_id): - for res in results: - for rec in res['records']: - if str(rec['cache_id']) == str(cache_id): - return rec ''' diff --git a/Open-ILS/web/oilsweb/oilsweb/lib/acq/picklist.py b/Open-ILS/web/oilsweb/oilsweb/lib/acq/picklist.py index 11135c63d3..0c7ee00744 100644 --- a/Open-ILS/web/oilsweb/oilsweb/lib/acq/picklist.py +++ b/Open-ILS/web/oilsweb/oilsweb/lib/acq/picklist.py @@ -1,4 +1,4 @@ -import osrf.cache, osrf.json, osrf.ses +import osrf.cache, osrf.json, osrf.ses, osrf.net_obj import oils.const, oils.utils.utils, oils.event class PicklistMgr(object): @@ -67,6 +67,36 @@ class PicklistMgr(object): return entry + def create_or_replace(self, pl_name): + + # find and delete any existing picklist with the requested name + data = self.ses.request( + 'open-ils.acq.picklist.name.retrieve', + self.request_mgr.ctx.core.authtoken, pl_name).recv() + if data: + picklist = data.content() + status = self.ses.request( + 'open-ils.acq.picklist.delete', + self.request_mgr.ctx.core.authtoken, picklist.id()).recv().content() + oils.event.Event.parse_and_raise(status) + + # create the new one + picklist = osrf.net_obj.NetworkObject.acqpl() + picklist.name(pl_name) + picklist.owner(self.request_mgr.ctx.core.user.id()) + picklist = self.ses.request( + 'open-ils.acq.picklist.create', + self.request_mgr.ctx.core.authtoken, picklist).recv().content() + oils.event.Event.parse_and_raise(picklist) + return picklist + + def create_entry(self, entry): + status = self.ses.request( + 'open-ils.acq.picklist_entry.create', + self.request_mgr.ctx.core.authtoken, entry).recv().content() + oils.event.Event.parse_and_raise(status) + return status + @staticmethod def find_entry_attr(entry, attr_name, attr_type='picklist_marc_attr_definition'): for entry_attr in entry.attributes(): diff --git a/Open-ILS/web/oilsweb/oilsweb/lib/acq/search.py b/Open-ILS/web/oilsweb/oilsweb/lib/acq/search.py index 2364964795..f0ade0c925 100644 --- a/Open-ILS/web/oilsweb/oilsweb/lib/acq/search.py +++ b/Open-ILS/web/oilsweb/oilsweb/lib/acq/search.py @@ -1,10 +1,7 @@ -import os, md5 -import oilsweb.lib.context -import osrf.ses -import osrf.xml_obj -import oils.const -import osrf.log, osrf.cache, osrf.json +import os, md5, time import pylons.config +import osrf.ses, osrf.net_obj +import oils.const, oilsweb.lib.acq.picklist EG_Z39_SOURCES = 'open-ils.search.z3950.retrieve_services' EG_Z39_SEARCH = 'open-ils.search.z3950.search_class' @@ -15,24 +12,53 @@ def fetch_z39_sources(ctx): if _z_sources: return _z_sources _z_sources = osrf.ses.ClientSession.atomic_request( - 'open-ils.search', EG_Z39_SOURCES, ctx.core.authtoken) + oils.const.OILS_APP_SEARCH, EG_Z39_SOURCES, ctx.core.authtoken) return _z_sources -def multi_search(ctx, search): +def multi_search(request_mgr, search): ses = osrf.ses.ClientSession(oils.const.OILS_APP_SEARCH) - req = ses.request(EG_Z39_SEARCH, ctx.core.authtoken, search) + req = ses.request(EG_Z39_SEARCH, request_mgr.ctx.core.authtoken, search) + + pl_manager = oilsweb.lib.acq.picklist.PicklistMgr(request_mgr) + picklist_id = pl_manager.create_or_replace("__search_tmp__") while not req.complete: - resp = req.recv(60) + resp = req.recv() if not resp: break + res = resp.content() - for rec in res['records']: - rec['extracts'] = flatten_record(rec['marcxml']) - rec['cache_id'] = cache_id - cache_id += 1 + for record in res['records']: + entry = osrf.net_obj.NetworkObject.acqple() + entry.picklist(picklist_id) + entry.source_label(res['service']) + entry.marc(record['marcxml']) + entry.eg_bib_id(record.get('bibid')) + pl_manager.create_entry(entry) + + return picklist_id + +def compile_multi_search(request_mgr): + + search = { + 'service' : [], + 'username' : [], + 'password' : [], + 'search' : {}, + 'limit' : request_mgr.ctx.acq.limit, + 'offset' : request_mgr.ctx.acq.offset + } + + # collect the sources and credentials + for src in request_mgr.ctx.acq.search_source: + search['service'].append(src) + search['username'].append("") # XXX config values? in-db? + search['password'].append("") # XXX config values? in-db? - results.append(res) + # collect the search classes + for cls in request_mgr.ctx.acq.search_class: + if request_mgr.request.params[cls]: + search['search'][cls] = request_mgr.request.params[cls] - return results, cache_search(search, results) + return search diff --git a/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/picklist/picklist_entry_summary.html b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/picklist/picklist_entry_summary.html index 5e2b87bd35..d9d0fef09d 100644 --- a/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/picklist/picklist_entry_summary.html +++ b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/picklist/picklist_entry_summary.html @@ -2,8 +2,10 @@ ${_('Picklist Entry')}
<% + provider = c.oils.acq.picklist_entry.provider() or '' + if provider: provider.name() meta = _("Source %(data)s") % {"data":c.oils.acq.picklist_entry.source_label()} - meta2 = _("Provider %(data)s") % {"data":c.oils.acq.picklist_entry.provider().name()} + meta2 = _("Provider %(data)s") % {"data":provider} meta3 = _("Create date %(data)s") % {"data":c.oils.acq.picklist_entry.create_time()} meta4 = _("Last update time %(data)s") % {"data":c.oils.acq.picklist_entry.edit_time()} %> diff --git a/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/picklist/search.html b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/picklist/search.html index 9417b8e232..b367209716 100644 --- a/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/picklist/search.html +++ b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/picklist/search.html @@ -1,9 +1,9 @@ # -*- coding: utf-8 -*- -<%inherit file='base.html'/> +<%inherit file='../base.html'/> <%def name="page_title()">${_('Evergreen Acquisitions Search')} <%def name="block_content()"> -
+
${_('Search Sources')}
@@ -15,8 +15,7 @@
    % for src,cfg in c.oils.acq.z39_sources.iteritems():
  • - + ${src} ${cfg["host"]}:${cfg["db"]} % if cfg['auth'] == 't': * diff --git a/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/navigate.html b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/navigate.html index 9849442424..8c5d7551c3 100644 --- a/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/navigate.html +++ b/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/navigate.html @@ -2,7 +2,7 @@ - + -- 2.11.0
    ${_('Dashboard')}
    ${_('Acquisitions')}
    ${_('Acquisitions')}
    ${_('Serials')}
    ${_('Admin')}