Esempio n. 1
0
    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
Esempio n. 2
0
    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()
Esempio n. 3
0
    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()
Esempio n. 4
0
    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
Esempio n. 5
0
"""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))