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))
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))
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))
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()
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
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))
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))
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
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))
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
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
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
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