def get_by_data(cls, datastring, ipaddr=None): adapter = Adapter.detect(datastring) if not adapter: raise Exception("Couldn't determine adapter from datastring: %s" % datastring) message = adapter.decode(datastring) if not message.imei: raise Exception("Couldn't get imei from datastring: %s" % datastring) """ Try retrieving device from db If none already, create a new one and return it """ try: device = GPSDevice.objects.get(imei=message.imei) except mongoengine.DoesNotExist: device = GPSDevice(imei=message.imei, ipaddr=ipaddr) device.save() except mongoengine.MultipleObjectsReturned: raise mongoengine.MultipleObjectsReturned( 'Found more than one device with imei %s' % message.imei) if ipaddr and ipaddr != device.ipaddr: device.ipaddr = ipaddr device.save() return device
def sent(self, datastring): if not self.adapter: self.adapter = Adapter.detect(datastring) if not self.adapter: raise Exception("Coudln't determine adapter from datastring: %s" % datastring) # Possibly multiple messages in datastring, separated by delimiter for messagestring in filter(lambda x:x, datastring.split(self.adapter.delimiter)): # Set IMEI, if needed message = self.adapter.decode(messagestring) if not message: break if not self.imei: self.imei = message.imei message.state = config.MESSAGE_STATE_RECEIVED message.save() # Determine any stock responses for this type of adapter (e.g. LOAD, ON) response = self.adapter.response_to(message) if response: self.responses.append(response) # If it's a location message, record this if config.MESSAGE_TYPE_LOCATION_FULL == message.message_type: self.latitude = message.latitude self.longitude = message.longitude self.save() maps_url = config.GOOGLE_MAPS_URI_FORMAT.format(latitude=message.latitude, longitude=message.longitude) logger.info('received location from %s: %s' % (self.imei, maps_url)) # Get & send responses from queue self.retrieve_messages()
def sent(self, datastring): if not self.adapter: self.adapter = Adapter.detect(datastring) if not self.adapter: raise Exception("Coudln't determine adapter from datastring: %s" % datastring) # Possibly multiple messages in datastring, separated by delimiter for messagestring in filter(lambda x: x, datastring.split(self.adapter.delimiter)): # Set IMEI, if needed message = self.adapter.decode(messagestring) if not message: break if not self.imei: self.imei = message.imei message.state = config.MESSAGE_STATE_RECEIVED message.save() # Determine any stock responses for this type of adapter (e.g. LOAD, ON) response = self.adapter.response_to(message) if response: self.responses.append(response) # If it's a location message, record this if config.MESSAGE_TYPE_LOCATION_FULL == message.message_type: self.latitude = message.latitude self.longitude = message.longitude self.save() maps_url = config.GOOGLE_MAPS_URI_FORMAT.format( latitude=message.latitude, longitude=message.longitude) logger.info('received location from %s: %s' % (self.imei, maps_url)) # Get & send responses from queue self.retrieve_messages()
def get_by_data(cls, datastring, ipaddr=None): adapter = Adapter.detect(datastring) if not adapter: raise Exception("Couldn't determine adapter from datastring: %s" % datastring) message = adapter.decode(datastring) if not message.imei: raise Exception("Couldn't get imei from datastring: %s" % datastring) """ Try retrieving device from db If none already, create a new one and return it """ try: device = GPSDevice.objects.get(imei=message.imei) except mongoengine.DoesNotExist: device = GPSDevice(imei=message.imei, ipaddr=ipaddr) device.save() except mongoengine.MultipleObjectsReturned: raise mongoengine.MultipleObjectsReturned('Found more than one device with imei %s' % message.imei) if ipaddr and ipaddr != device.ipaddr: device.ipaddr = ipaddr device.save() return device
"""Python File Implementing an Adapter Design Pattern""" from dog.dog import Dog from cow.cow import Cow from adapter.adapter import Adapter objects = [] cow = Cow("The Cow King", 4, 3) dog = Dog("Pluto", 4, 1) objects.append(Adapter(dog, speak=dog.bark)) objects.append(Adapter(cow, speak=cow.moo)) for obj in objects: print("{} says {} and has {} legs and {} spots\n".format( obj.name, obj.speak(), obj.legs, obj.spots))