def get_resource_links(self, item): kwargs = resolve_params(item, self.opts.self_url_kwargs or {}) for arg in kwargs.values(): if arg is None: return None return super().get_resource_links(item)
def get_top_level_links(self, data, many): """ Overriding base implementation to support serialization as a related resource. """ self_link = None if self.self_related_route: if many: kwargs = self.self_related_route_kwargs else: kwargs = resolve_params(data, self.self_related_route_kwargs) self_link = self.generate_url(self.self_related_route, **kwargs) if self_link: return {"self": self_link} return super().get_top_level_links(data, many)
def get_related_url(self, obj): if self.related_url: params = resolve_params(obj, self.related_url_kwargs, default=self.default) non_null_params = { key: value for key, value in params.items() if value is not None } if non_null_params: attr = getattr(obj, self.load_from) ret = { 'href': self.related_url.format(**non_null_params), } if self.many: count = attr.count() if isinstance( attr, BaseManager) else len(attr) ret['meta'] = {'count': count} return ret return None
def get_url(self, obj, route_name, **kwargs): if route_name and self.parent and self.parent.app and isinstance( self.parent.app, Starlette): kwargs = resolve_params(obj, kwargs, default=self.default) return self.parent.app.url_path_for(route_name, **kwargs) return None