def unserialize(self, data): def get_fileurl(data): if data.get("pump_io", {}).get("proxyURL"): return data["pump_io"]["proxyURL"] else: return data["url"] if "fullImage" in data: full_image = data["fullImage"] self.original = ImageContainer(url=get_fileurl(full_image), height=full_image.get("height"), width=full_image.get("width")) if "image" in data: save_point = "original" if not hasattr(self, "original") else "thumbnail" thumbnail = data["image"] setattr( self, save_point, ImageContainer(url=get_fileurl(thumbnail), height=thumbnail.get("height"), width=thumbnail.get("width"))) Mapper(pypump=self._pump).parse_map(self, data=data) self._add_links(data) return self
def _build_cache(self): """ Build a list of objects from feed's cached items or API page""" self.cache = [] if self.done: return for i in (self.get_cached() if self._cached else self.get_page(self.url)): if not self._cached: #some objects don't have objectType set (inbox activities) if not i.get("objectType"): i["objectType"] = self.feed.object_types[0] obj = Mapper(pypump=self.feed._pump).get_object(i) else: obj = i self.cache.append(obj) #ran out of items if len(self.cache) <= 0: self._done = True # check what to do next time if self._since is not None: if self.feed.links.get('prev'): self.url = self.feed.links['prev'] del self.feed.links['prev'] #avoid using it again else: if self.feed.links.get('next'): self.url = self.feed.links['next'] del self.feed.links['next'] #avoid using it again else: self.url = None
def unserialize(self, data): if "stream" in data: stream = data["stream"] self.stream = StreamContainer(url=self._get_fileurl(stream)) Mapper(pypump=self._pump).parse_map(self, data=data) self._add_links(data) return self
def unserialize(self, data): """ Goes from JSON -> Person object """ Mapper(pypump=self._pump).parse_map(self, data=data) self.add_links(data) return self
def test_get_object_unknown(self): """ Test creation of unknown activity model """ test_data = { "objectType": "food", # pypump.models.PumpObject "id": "https://example.com/api/food/pancake-v0.1a", "url": "https://example.com/food/pancake-v0.1a", "content": "flour, sugar, eggs, milk, beans", "displayName": "Pancakes (test version)", "author": { "objectType": "person", "id": "acct:[email protected]" } } test_obj = Mapper(pypump=self.pump).get_object(test_data) # Test unserialization is correct self.assertEqual(test_obj.object_type, test_data["objectType"]) self.assertEqual(test_obj.id, test_data["id"]) self.assertEqual(test_obj.url, test_data["url"]) self.assertEqual(test_obj.content, test_data["content"]) self.assertEqual(test_obj.display_name, test_data["displayName"]) # test_obj should be PumpObject self.assertTrue(isinstance(test_obj, PumpObject)) # test_obj.author should be PyPump.Person self.assertTrue(isinstance(test_obj.author, type(self.pump.Person())))
def unserialize(self, data): if ("lon" in data and "lat" in data): self.longitude = float(data["lon"]) self.latitude = float(data["lat"]) elif "position" in data: position = data["position"][:-1] if position[1:].find("+") != -1: latitude = position.lstrip("+").split("+", 1)[0] self.latitude = float(latitude) self.longitude = float(position[1:].split("+", 1)[1]) else: latitude = position.lstrip("+").split("-", 1)[0] self.latitude = float(latitude) self.longitude = float(position[1:].split("-", 1)[1]) else: self.longitude = None self.latitude = None Mapper(pypump=self._pump).parse_map(self, data=data) return self
def test_get_activity_model(self): """ Test creation of known activity model """ test_data = { "objectType": "application", # pypump.models.activity.Application "id": "coolapp1.2", "displayName": "Cool app" } test_obj = Mapper(pypump=self.pump).get_object(test_data) self.assertTrue(isinstance(test_obj, Application))
def test_get_pump_model(self): """ Test creation of PyPump model """ test_data = { "objectType": "person", # pypump.models.person.Person "id": "acct:[email protected]" } test_obj = Mapper(pypump=self.pump).get_object(test_data) # Test person model was made self.assertTrue(isinstance(test_obj, type(self.pump.Person())))
def unserialize(self, data): """ From JSON -> Activity object """ # copy activity attributes into object if "author" not in data["object"]: data["object"]["author"] = data["actor"] for key in ["to", "cc", "bto", "bcc"]: if key not in data["object"] and key in data: data["object"][key] = data[key] Mapper(pypump=self._pump).parse_map(self, data=data) self.add_links(data) return self
def unserialize(self, data): if "image" in data: thumbnail = data["image"] self.thumbnail = ImageContainer(url=self._get_fileurl(thumbnail), height=thumbnail.get("height"), width=thumbnail.get("width")) if "fullImage" in data: full_image = data["fullImage"] self.original = ImageContainer(url=self._get_fileurl(full_image), height=full_image.get("height"), width=full_image.get("width")) else: self.original = self.thumbnail Mapper(pypump=self._pump).parse_map(self, data=data) self._add_links(data) return self
def unserialize(self, data): if "fullImage" in data: full_image = data["fullImage"] self.original = ImageContainer(url=full_image["url"], height=full_image.get("height"), width=full_image.get("width")) if "image" in data: save_point = "original" if not hasattr(self, "original") else "thumbnail" thumbnail = data["image"] setattr( self, save_point, ImageContainer(url=thumbnail["url"], height=thumbnail.get("height"), width=thumbnail.get("width"))) Mapper(pypump=self._pump).parse_map(self, data=data) self.add_links(data) return self
def _build_cache(self): """ Build a list of objects from feed's cached items or API page""" self.cache = [] if self.done: return for i in (self.get_cached() if self._cached else self.get_page(self.url)): if not self._cached: # some objects don't have objectType set (inbox activities) if not i.get("objectType"): i["objectType"] = self.feed.object_types[0] obj = Mapper(pypump=self.feed._pump).get_object(i) else: obj = i self.cache.append(obj) # ran out of items if len(self.cache) <= 0: self._done = True # check what to do next time if getattr(self.feed, 'issue65', False): # work around API bug for favorites feed, see https://github.com/xray7224/PyPump/issues/65 if self._offset is None: self._offset = 0 self._offset += 20 elif self._since is not None: if self.feed.links.get('prev'): self.url = self.feed.links['prev'] del self.feed.links['prev'] # avoid using it again else: if self.feed.links.get('next'): self.url = self.feed.links['next'] del self.feed.links['next'] # avoid using it again else: self.url = None
def unserialize(self, data): Mapper(pypump=self._pump).parse_map(self, data=data) self._add_links(data) self.url = data.get('pump_io', {}).get('proxyURL') or self.url return self
def unserialize(self, data): Mapper(pypump=self._pump).parse_map(self, data=data) self.add_links(data) return self
def __init__(self, *args, **kwargs): super(Application, self).__init__(*args, **kwargs) Mapper(*args, **kwargs).parse_map(self, *args, **kwargs)
def unserialize(self, data): """ from JSON -> Comment """ Mapper(pypump=self._pump).parse_map(self, data=data) self.add_links(data) return self