From e4c7849d65003f96bbe6a433f2352a3cf9740764 Mon Sep 17 00:00:00 2001 From: erickson Date: Wed, 4 Aug 2010 14:23:31 +0000 Subject: [PATCH] added patron status test and simple endurance script git-svn-id: svn://svn.open-ils.org/ILS-Contrib/constrictor/trunk@949 6d9bc8c9-1ec2-4278-b937-99fde70a366f --- constrictor.properties | 4 ++- contrib/sip2/sip2_client.py | 31 ++++++++++++++-- contrib/sip2/sip2_patron_status_endurance.py | 53 ++++++++++++++++++++++++++++ 3 files changed, 84 insertions(+), 4 deletions(-) create mode 100644 contrib/sip2/sip2_patron_status_endurance.py diff --git a/constrictor.properties b/constrictor.properties index 33a75d860..d2ffa3d82 100644 --- a/constrictor.properties +++ b/constrictor.properties @@ -82,5 +82,7 @@ sip2.institution=example sip2.server=sip.example.org sip2.port=6001 sip2.copyBarcodes= - +sip2.userBarcodes= +# passwords must correspond to user barcodes by position in the list +sip2.userPasswords= diff --git a/contrib/sip2/sip2_client.py b/contrib/sip2/sip2_client.py index c41d3bc7b..f71749bd6 100644 --- a/contrib/sip2/sip2_client.py +++ b/contrib/sip2/sip2_client.py @@ -135,15 +135,40 @@ class SIP2Client(object): constrictor.task.Task.__init__(self, self.__class__.__name__) def run(self, **kw): - # TODO: use a generated date log.log_info("ItemInfoTask: %s" % copy_barcode) msg = '1720060110 215612AO%s|AB%s|' % (institution, copy_barcode) client.send_msg(msg) data = client.recv_msg() - # TODO: check for valid response + if data is None: + return False log.log_info('SIP2 item info response: %s' % data) return data - + return ItemInfoTask().start() + def patron_status_request(self, institution, user_barcode, user_password): + + client = self + + class PatronStatusTask(constrictor.task.Task): + + def __init__(self, name=None): + constrictor.task.Task.__init__(self, self.__class__.__name__) + + def run(self, **kw): + log.log_info("PatronStatusTask: %s" % user_barcode) + msg = '2300120060101 084237AO%s|AA%s|AD%s|AC|' % (institution, user_barcode, user_password) + client.send_msg(msg) + data = client.recv_msg() + if data is None: + return False + log.log_info('SIP2 patron status response: %s' % data) + return data + + return PatronStatusTask().start() + + + + + diff --git a/contrib/sip2/sip2_patron_status_endurance.py b/contrib/sip2/sip2_patron_status_endurance.py new file mode 100644 index 000000000..1ecac40be --- /dev/null +++ b/contrib/sip2/sip2_patron_status_endurance.py @@ -0,0 +1,53 @@ +# ----------------------------------------------------------------------- +# Copyright (C) 2010 Equinox Software, Inc +# Bill Erickson +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 3 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# ----------------------------------------------------------------------- + +import constrictor.script +import constrictor.properties +import constrictor.log as log +import sip2_client + + +class SIP2PatronStatusEnduranceScript(constrictor.script.Script): + + def __init__(self): + constrictor.script.Script.__init__(self) + + def run(self): + props = constrictor.properties.Properties.get_properties() + + username = props.get_property('sip2.username') + password = props.get_property('sip2.password') + institution = props.get_property('sip2.institution') + server = props.get_property('sip2.server') + port = int(props.get_property('sip2.port')) + + user_barcodes = props.get_property('sip2.userBarcodes').split(',') + user_passwords = props.get_property('sip2.userPasswords').split(',') + + user_barcode = user_barcodes[constrictor.script.ScriptThread.get_thread_id()] + user_password = user_passwords[constrictor.script.ScriptThread.get_thread_id()] + + client = sip2_client.SIP2Client(server, port) + + if client.init_socket() and client.login(username, password, institution): + for i in range(100): + if not client.patron_status_request(institution, user_barcode, user_password): + break + + client.disconnect() + +constrictor.script.ScriptManager.go(SIP2PatronStatusEnduranceScript()) + + -- 2.11.0