def included_for(self, obj_or_iterable, parent=None, related=None, **kwargs): if not is_iterable(obj_or_iterable): obj_or_iterable = [obj_or_iterable] pks = [self.fetch_id(obj) for obj in obj_or_iterable] include = self.get_include(related=related) includes = dict() for path in include: relationships = self.reverse_relationship_path(path, parent) resource = self.api.resource_for(relationships[0].target) collection = resource.fetch_collection() included_filter = self.included_filter(relationships, pks) included = resource.filter_collection(collection, **included_filter) objects = includes.setdefault(resource, set()) includes[resource] = objects.union(set(included)) result = list() for resource, items in includes.items(): resource.request = self.request or parent.request result.extend([(resource, item) for item in items]) return result
def serialize_primary_data(self, object_or_iterable, linked=None, **kwargs): if linked: return self.serialize_linked(object_or_iterable, linked) if is_iterable(object_or_iterable): return self.serialize_collection(object_or_iterable, **kwargs) elif object_or_iterable: return self.serialize_object(object_or_iterable, **kwargs)
def links_for_document(self, object_or_iterable, linked=None, related=None, **kwargs): if linked: return self.links_for_linked(object_or_iterable, linked, **kwargs) if related: return self.links_for_related(object_or_iterable, related, **kwargs) if is_iterable(object_or_iterable): return self.links_for_collection(object_or_iterable, **kwargs) else: return self.links_for_object(object_or_iterable, **kwargs)
def location_for(self, object_or_iterable): if not is_iterable(object_or_iterable): object_or_iterable = [object_or_iterable] pks = list() primary_key = self.primary_key() for obj in object_or_iterable: pk = primary_key.get_from(obj) pk = self.serializer.normalize_id(pk) pks.append(pk) if len(pks) > 1: pk = ','.join(pk) else: pk = pks[0] return self.reverse_url(pk=pk)
def test_object(self): self.assertFalse(is_iterable(object()))
def test_list(self): self.assertTrue(is_iterable([]))
def test_none(self): self.assertFalse(is_iterable(None))