def patron_status_request(self, patron_id, **kwargs): ''' Sends a Patron Status Request message. optional kwargs - institution -- required if default_institution is unset - patron_pwd ''' logging.debug("patron_status_request() for %s" % patron_id) msg = Message( spec = mspec.patron_status, fixed_fields = [ FixedField(ffspec.language, '000'), FixedField(ffspec.date, Message.sipdate()) ] ) msg.add_field(fspec.institution_id, kwargs.get('institution', self.default_institution)) msg.add_field(fspec.patron_id, patron_id) msg.maybe_add_field(fspec.terminal_pwd, self.terminal_pwd) msg.maybe_add_field(fspec.patron_pwd, kwargs.get('patron_pwd')) self.send_msg(msg) return self.recv_msg()
def item_info_request(self, item_id, **kwargs): ''' Sends an Item Information Request message kwargs - institution -- required if default_institution is unset ''' logging.debug("item_info_request() for %s" % item_id) msg = Message( spec = mspec.item_info, fixed_fields = [ FixedField(ffspec.date, Message.sipdate()) ] ) msg.add_field(fspec.institution_id, kwargs.get('institution', self.default_institution)) msg.add_field(fspec.item_id, item_id) msg.maybe_add_field(fspec.terminal_pwd, self.terminal_pwd) self.send_msg(msg) return self.recv_msg()
def login(self, username, password, location): ''' Login to SIP2 server. Returns True on success, False on login failure, Raises socket exception on communcation failures. ''' logging.debug("logging in with username %s @ location %s" % (username, location)) msg = Message(spec=mspec.login, fixed_fields=[ FixedField(ffspec.uid_algo, '0'), FixedField(ffspec.pwd_algo, '0') ], fields=[ Field(fspec.login_uid, username), Field(fspec.login_pwd, password), Field(fspec.location_code, location) ]) self.send_msg(msg) resp = self.recv_msg() # the OK field is 1/0 value in the fixed fields if resp.fixed_fields[0].value == '1': logging.debug("login succeeded for %s" % username) return True logging.info("login failed for %s : %s" % (username, resp)) return False
def recv_msg(self): ''' Receives a Message from the server ''' msg_txt = '' while True: buf = self.sock.recv(SOCKET_BUFSIZE) if buf is None or len(buf) == 0: # server kicked us off try: # disconnect if we can self.disconnect() except: pass raise IOError("Disconnected from SIP2 server") msg_txt = msg_txt + buf.decode(TEXT_ENCODING) if msg_txt[-Client.LINE_TERMINATOR_LEN:] == LINE_TERMINATOR: break self.client_log.finish_msg() logging.debug("RECEIVED: " + msg_txt) return Message(msg_txt=msg_txt)
def sc_status(self, **kwargs): ''' Send a "SC Status" request to the server. kwargs - status_code - max_print_width - protocol_version ''' logging.debug("sending sc status") msg = Message( spec = mspec.sc_status, fixed_fields = [ FixedField( ffspec.status_code, kwargs.get('status_code', '0')), FixedField( ffspec.max_print_width, kwargs.get('max_print_width', '100')), FixedField( ffspec.protocol_version, kwargs.get('protocol_version', '2.00')) ] ) self.send_msg(msg) return self.recv_msg()
def fee_paid_request(self, patron_id, fee_amount, **kwargs): ''' Send a Fee Paid message. fee_id refers the ILS identifier for the fee / transaction. kwargs - institution -- required if default_institution is unset - transaction_id -- Unique client-side identifier for the payment - fee_id -- Unique ILS identifier for the fee/transaction toward which the payment is applied. - fee_type -- defaults to 01 (other/unknown) - payment_type -- defaults to 00 (cash) - check_number - register_login - patron_pwd - currency_type -- defaults to USD ''' logging.debug("fee_paid_request() for patron %s and amount %s" % (patron_id, fee_amount)) msg = Message(spec=mspec.fee_paid, fixed_fields=[ FixedField(ffspec.date, Message.sipdate()), FixedField(ffspec.fee_type, kwargs.get('fee_type', '01')), FixedField(ffspec.payment_type, kwargs.get('payment_type', '00')), FixedField(ffspec.currency_type, kwargs.get('currency_type', 'USD')), ]) msg.add_field(fspec.institution_id, kwargs.get('institution', self.default_institution)) msg.add_field(fspec.patron_id, patron_id) msg.add_field(fspec.fee_amount, fee_amount) msg.maybe_add_field(fspec.terminal_pwd, self.terminal_pwd) msg.maybe_add_field(fspec.fee_identifier, kwargs.get('fee_id')) msg.maybe_add_field(fspec.transaction_id, kwargs.get('transaction_id')) msg.maybe_add_field(fspec.patron_pwd, kwargs.get('patron_pwd')) msg.maybe_add_field(fspec.check_number, kwargs.get('check_number')) msg.maybe_add_field(fspec.register_login, kwargs.get('register_login')) self.send_msg(msg) return self.recv_msg()
def checkin_request(self, item_id, current_location, **kwargs): ''' Send a Checkin message. kwargs - institution -- required if default_institution is unset - no_block - return_date - item_properties - cancel ''' logging.debug("checkin_request() for item %s" % (item_id)) msg = Message( spec=mspec.checkin, fixed_fields=[ FixedField(ffspec.no_block, kwargs.get('no_block', 'N')), FixedField(ffspec.date, Message.sipdate()), FixedField(ffspec.return_date, kwargs.get('return_date', Message.sipdate())) ], ) msg.add_field(fspec.institution_id, kwargs.get('institution', self.default_institution)) msg.add_field(fspec.current_location, current_location), msg.add_field(fspec.item_id, item_id), msg.maybe_add_field(fspec.terminal_pwd, self.terminal_pwd) msg.maybe_add_field(fspec.item_properties, kwargs.get('item_properties')) msg.maybe_add_field(fspec.cancel, kwargs.get('cancel')) self.send_msg(msg) return self.recv_msg()
def checkout_request(self, item_id, patron_id, **kwargs): ''' Send a Checkout message. kwargs - institution -- required if default_institution is unset - sc_renewal_policy - no_block - nb_due_date - item_properties - fee acknowledged - cancel ''' logging.debug("checkout_request() for patron=%s and item=%s" % (patron_id, item_id)) msg = Message( spec=mspec.checkout, fixed_fields=[ FixedField(ffspec.sc_renewal_policy, kwargs.get('sc_renewal_policy', 'N')), FixedField(ffspec.no_block, kwargs.get('no_block', 'N')), FixedField(ffspec.date, Message.sipdate()), FixedField(ffspec.nb_due_date, kwargs.get('nb_due_date', Message.sipdate())) ], ) msg.add_field(fspec.institution_id, kwargs.get('institution', self.default_institution)) msg.add_field(fspec.patron_id, patron_id), msg.add_field(fspec.item_id, item_id), msg.maybe_add_field(fspec.terminal_pwd, self.terminal_pwd) msg.maybe_add_field(fspec.item_properties, kwargs.get('item_properties')) msg.maybe_add_field(fspec.patron_pwd, kwargs.get('patron_pwd')) msg.maybe_add_field(fspec.fee_acknowledged, kwargs.get('fee_acknowledged')) msg.maybe_add_field(fspec.cancel, kwargs.get('cancel')) self.send_msg(msg) return self.recv_msg()
def patron_info_request(self, patron_id, **kwargs): ''' Send a Patron Information Request message. optional kwargs - institution -- required if default_institution is unset - summary -- determines what detailed information to request, if any - patron_pwd - start_item - end_item ''' logging.debug("patron_information_request() for %s" % patron_id) # summary may contain up to 1 "Y" value. summary = kwargs.get('summary', ' ') if summary.count('Y') > 1: raise ProtocolError( 'Too many summary values requested in patron info request') msg = Message( spec=mspec.patron_info, fixed_fields=[ FixedField(ffspec.language, '000'), FixedField(ffspec.date, Message.sipdate()), FixedField(ffspec.summary, summary) ], ) msg.add_field(fspec.institution_id, kwargs.get('institution', self.default_institution)) msg.add_field(fspec.patron_id, patron_id), msg.maybe_add_field(fspec.terminal_pwd, self.terminal_pwd) msg.maybe_add_field(fspec.patron_pwd, kwargs.get('patron_pwd')) msg.maybe_add_field(fspec.start_item, kwargs.get('start_item')) msg.maybe_add_field(fspec.end_item, kwargs.get('end_item')) self.send_msg(msg) return self.recv_msg()
def patron_status_request(self, patron_id, **kwargs): ''' Sends a Patron Status Request message. optional kwargs - institution -- required if default_institution is unset - patron_pwd ''' logging.debug("patron_status_request() for %s" % patron_id) msg = Message(spec=mspec.patron_status, fixed_fields=[ FixedField(ffspec.language, '000'), FixedField(ffspec.date, Message.sipdate()) ]) msg.add_field(fspec.institution_id, kwargs.get('institution', self.default_institution)) msg.add_field(fspec.patron_id, patron_id) msg.maybe_add_field(fspec.terminal_pwd, self.terminal_pwd) msg.maybe_add_field(fspec.patron_pwd, kwargs.get('patron_pwd')) self.send_msg(msg) return self.recv_msg()
def checkin_request(self, item_id, current_location, **kwargs): ''' Send a Checkin message. kwargs - institution -- required if default_institution is unset - no_block - return_date - item_properties - cancel ''' logging.debug( "checkin_request() for item %s" % (item_id)) msg = Message( spec = mspec.checkin, fixed_fields = [ FixedField( ffspec.no_block, kwargs.get('no_block', 'N')), FixedField(ffspec.date, Message.sipdate()), FixedField( ffspec.return_date, kwargs.get('return_date', Message.sipdate())) ], ) msg.add_field( fspec.institution_id, kwargs.get('institution', self.default_institution)) msg.add_field(fspec.current_location, current_location), msg.add_field(fspec.item_id, item_id), msg.maybe_add_field(fspec.terminal_pwd, self.terminal_pwd) msg.maybe_add_field( fspec.item_properties, kwargs.get('item_properties')) msg.maybe_add_field(fspec.cancel, kwargs.get('cancel')) self.send_msg(msg) return self.recv_msg()
def checkout_request(self, item_id, patron_id, **kwargs): ''' Send a Checkout message. kwargs - institution -- required if default_institution is unset - sc_renewal_policy - no_block - nb_due_date - item_properties - fee acknowledged - cancel ''' logging.debug( "checkout_request() for patron=%s and item=%s" % ( patron_id, item_id)) msg = Message( spec = mspec.checkout, fixed_fields = [ FixedField( ffspec.sc_renewal_policy, kwargs.get('sc_renewal_policy', 'N')), FixedField( ffspec.no_block, kwargs.get('no_block', 'N')), FixedField(ffspec.date, Message.sipdate()), FixedField( ffspec.nb_due_date, kwargs.get('nb_due_date', Message.sipdate())) ], ) msg.add_field( fspec.institution_id, kwargs.get('institution', self.default_institution)) msg.add_field(fspec.patron_id, patron_id), msg.add_field(fspec.item_id, item_id), msg.maybe_add_field(fspec.terminal_pwd, self.terminal_pwd) msg.maybe_add_field( fspec.item_properties, kwargs.get('item_properties')) msg.maybe_add_field(fspec.patron_pwd, kwargs.get('patron_pwd')) msg.maybe_add_field( fspec.fee_acknowledged, kwargs.get('fee_acknowledged')) msg.maybe_add_field(fspec.cancel, kwargs.get('cancel')) self.send_msg(msg) return self.recv_msg()
def patron_info_request(self, patron_id, **kwargs): ''' Send a Patron Information Request message. optional kwargs - institution -- required if default_institution is unset - summary -- determines what detailed information to request, if any - patron_pwd - start_item - end_item ''' logging.debug("patron_information_request() for %s" % patron_id) # summary may contain up to 1 "Y" value. summary = kwargs.get('summary', ' ') if summary.count('Y') > 1: raise ProtocolError( 'Too many summary values requested in patron info request') msg = Message( spec = mspec.patron_info, fixed_fields = [ FixedField(ffspec.language, '000'), FixedField(ffspec.date, Message.sipdate()), FixedField(ffspec.summary, summary) ], ) msg.add_field(fspec.institution_id, kwargs.get('institution', self.default_institution)) msg.add_field(fspec.patron_id, patron_id), msg.maybe_add_field(fspec.terminal_pwd, self.terminal_pwd) msg.maybe_add_field(fspec.patron_pwd, kwargs.get('patron_pwd')) msg.maybe_add_field(fspec.start_item, kwargs.get('start_item')) msg.maybe_add_field(fspec.end_item, kwargs.get('end_item')) self.send_msg(msg) return self.recv_msg()