コード例 #1
0
ファイル: client.py プロジェクト: jeff/pysip2
    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()
コード例 #2
0
ファイル: client.py プロジェクト: kingctan/pysip2
    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()
コード例 #3
0
ファイル: client.py プロジェクト: jeff/pysip2
    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()
コード例 #4
0
    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
コード例 #5
0
    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)
コード例 #6
0
ファイル: client.py プロジェクト: kingctan/pysip2
    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()
コード例 #7
0
    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()
コード例 #8
0
    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()
コード例 #9
0
    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()
コード例 #10
0
    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()
コード例 #11
0
    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()
コード例 #12
0
ファイル: client.py プロジェクト: jeff/pysip2
    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()
コード例 #13
0
ファイル: client.py プロジェクト: jeff/pysip2
    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()
コード例 #14
0
ファイル: client.py プロジェクト: jeff/pysip2
    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()