コード例 #1
0
    def get_product(self, barcode, queue):
        """ Get the product data associated with the barcode """
        packet = Packet(PacketTypes.GetProduct, {"barcode": barcode})
        message = Message(packet).get_xml()

        self.send_queue.put(
            MessagingQueueItem(PacketTypes.GetProduct, message, queue))
コード例 #2
0
    def get_random_product(self, queue):
        """ Pull the data for a random product - useful for testing """
        packet = Packet(PacketTypes.RandomProduct, {})
        message = Message(packet).get_xml()

        self.send_queue.put(
            MessagingQueueItem(PacketTypes.GetRandomProduct, message, queue))
コード例 #3
0
    def get_user_data(self, rfid, queue):
        """ Get the user data associated with the rfid """
        packet = Packet(PacketTypes.GetUser, {"rfid": rfid})
        message = Message(packet).get_xml()

        self.send_queue.put(
            MessagingQueueItem(PacketTypes.GetUser, message, queue))
コード例 #4
0
ファイル: dbserver.py プロジェクト: jamesfowkes/Snackspace
    def process_packets(self, packets):
        """ Process a list of packets """

        reply = Message()  ## The reply starts as an empty message

        for packet in packets:

            self.logger.info("Handling '%s' packet..." % packet.type)

            if packet.type == PacketTypes.Ping:
                reply.add_packet(Packet(PacketTypes.PingReply))
            elif packet.type == PacketTypes.GetProduct:
                reply.add_packet(self.get_product_from_data(packet.data))
            elif packet.type == PacketTypes.GetUser:
                reply.add_packet(self.get_user_from_data(packet.data))
            elif packet.type == PacketTypes.Transaction:
                reply.add_packet(self.apply_transaction_from_data(packet.data))
            elif packet.type == PacketTypes.AddProduct:
                reply.add_packet(self.add_product_from_data(packet.data))
            elif packet.type == PacketTypes.AddCredit:
                reply.add_packet(self.add_credit_from_data(packet.data))
            elif packet.type == PacketTypes.GetRandomProduct:
                reply.add_packet(self.get_random_product_packet())
            elif packet.type == PacketTypes.PingReply:
                pass  # No action required for ping reply
            else:
                self.logger.warning("Unknown packet '%s'" % packet.type)

        return reply.get_xml()
コード例 #5
0
ファイル: dbserver.py プロジェクト: jamesfowkes/Snackspace
    def user_from_rfid(self, rfid):
        """ Build a user packet from the database """
        datatype = PacketTypes.UserData
        data = {
            'memberid': '0',
            'username': '',
            'balance': '0',
            'limit': '0',
            'rfid': rfid
        }

        result = self.get_user(rfid)

        if result is not None:
            data['rfid'] = result['rfid']
            data['memberid'] = result['memberid']
            data['username'] = result['username']
            data['balance'] = result['balance']
            data['limit'] = result['limit']
        else:
            datatype = PacketTypes.UnknownUser

        packet = Packet(datatype, data)

        return packet
コード例 #6
0
    def add_credit(self, member_id, amountinpence, queue):
        """ Add credit to a user account """
        packet = Packet(PacketTypes.AddCredit, {
            "memberid": member_id,
            "amountinpence": amountinpence
        })
        message = Message(packet).get_xml()

        self.send_queue.put(
            MessagingQueueItem(PacketTypes.AddCredit, message, queue))
コード例 #7
0
    def add_product(self, barcode, description, price_in_pence, queue):
        """ Add a new product to the database """
        packet = Packet(
            PacketTypes.AddProduct, {
                "barcode": barcode,
                "description": description,
                "price_in_pence": price_in_pence
            })
        message = Message(packet).get_xml()

        self.send_queue.put(
            MessagingQueueItem(PacketTypes.AddProduct, message, queue))
コード例 #8
0
ファイル: dbserver.py プロジェクト: jamesfowkes/Snackspace
    def get_random_product_packet(self):
        """ Get a random product and make packet """
        result = self.get_random_product()

        datatype = PacketTypes.RandomProduct
        data = {'barcode': '0', 'description': '', 'priceinpence': '0'}
        data['barcode'] = result['barcode']
        data['description'] = result['shortdesc']
        data['priceinpence'] = result['price']

        packet = Packet(datatype, data)

        return packet
コード例 #9
0
    def send_transactions(self, productdata, member_id, queue):
        """ Send transaction requests to the server """
        self.logger.info("Sending transactions")

        message = Message()

        for (barcode, count) in productdata:
            packet = Packet(PacketTypes.Transaction, {
                "barcode": barcode,
                "memberid": member_id,
                "count": count
            })
            message.add_packet(packet)

        self.send_queue.put(
            MessagingQueueItem(PacketTypes.Transaction, message.get_xml(),
                               queue))
コード例 #10
0
ファイル: dbserver.py プロジェクト: jamesfowkes/Snackspace
    def product_from_barcode(self, barcode):
        """ Build a product packet from the database """
        result = self.get_product(barcode)

        if result is not None:
            datatype = PacketTypes.ProductData
            data = {'barcode': '0', 'description': '', 'priceinpence': '0'}
            data['barcode'] = result['barcode']
            data['description'] = result['shortdesc']
            data['priceinpence'] = result['price']
        else:
            datatype = PacketTypes.UnknownProduct
            data = {'barcode': '0'}
            data['barcode'] = barcode

        packet = Packet(datatype, data)

        return packet
コード例 #11
0
ファイル: dbserver.py プロジェクト: jamesfowkes/Snackspace
    def apply_transaction_from_data(self, data):
        """ Add transaction to the database """
        memberid = data['memberid']
        barcode = data['barcode']
        count = int(data['count'])

        result, total = self.transaction(memberid, barcode, count)

        packet = Packet(
            PacketTypes.Result, {
                "action": PacketTypes.Transaction,
                "barcode": barcode,
                "total": total,
                "result": "Success" if result else "Fail",
                "memberid": memberid
            })

        return packet
コード例 #12
0
ファイル: dbserver.py プロジェクト: jamesfowkes/Snackspace
    def add_product_from_data(self, data):
        """ Add a product to the database """
        _barcode = data['barcode']
        _desc = data['description']
        _priceinpence = data['price_in_pence']

        self.logger.info("Adding new product %s" % _barcode)

        result = self.add_product(_barcode, _desc, _priceinpence)

        packet = Packet(
            PacketTypes.Result, {
                "action": PacketTypes.AddProduct,
                "barcode": _barcode,
                "description": _desc,
                "result": "Success" if result else "Fail"
            })

        return packet
コード例 #13
0
ファイル: dbserver.py プロジェクト: jamesfowkes/Snackspace
    def add_credit_from_data(self, data):
        """ Add credit to a user """
        memberid = data['memberid']
        amountinpence = int(data['amountinpence'])

        self.logger.info("Adding %s credit to member %s" %
                         (amountinpence, memberid))

        result = self.add_credit(memberid, amountinpence)

        packet = Packet(
            PacketTypes.Result, {
                "action": PacketTypes.AddCredit,
                "credit": amountinpence,
                "result": "Success" if result else "Fail",
                "memberid": memberid
            })

        return packet