def _filter(self, *args, **kwargs): for key, value in kwargs.items(): try: # convert resource_uri to numeric id id = client.parse_id('%s' % value) kwargs[key] = id except Exception, e: pass
def get_pk(obj): """ This is a workaroud to seek non default ``id`` primary key value. Since queryset_client expects resources to have ``id`` fields as primary key by design, it's hard to support one-to-one like relationship. This method attempts to resolve such relation based on NON_DEFAULT_ID_FOREIGNKEYS settings value. """ if isinstance(obj, int): return obj if isinstance(obj, str): # assumed to be a resource_uri return client.parse_id(obj) for key in get_setting('NON_DEFAULT_ID_FOREIGNKEYS', {}): if hasattr(obj, key): try: return get_pk(getattr(obj, key)) except AttributeError, e: pass
def invalidate(self): resource = getattr(self.model._main_client, self.model._model_name) self.refresh(resource(client.parse_id(self.resource_uri)).get())
auth=base_client._auth) proxy_client.schema() model = proxy_client._model_gen(resource_name) # set manager alias if name is not resource_name: setattr(self.model, resource_name, getattr(self.model, name)) if schema['related_type'] == 'to_many': resource_uris = [resource_uri['resource_uri'] if isinstance(resource_uri, dict) else resource_uri for resource_uri in self._response[name]] return ManyToManyManager( model=model, instance=self.model, field_name=name, query={'id__in': [client.parse_id(resource_uri) for resource_uri in resource_uris]}) elif schema['related_type'] == 'to_one': return Response(model=model, url=self._response[name]) @property def _response(self): if self.__response: return self.__response serializer = slumber.serialize.Serializer(default=self.model._main_client._store['format']) if self._url is not None: logger.debug(logf({ 'message': 'Getting cache...', 'key': self._url,
# set manager alias if name is not resource_name: setattr(self.model, resource_name, getattr(self.model, name)) if schema['related_type'] == 'to_many': resource_uris = [ resource_uri['resource_uri'] if isinstance(resource_uri, dict) else resource_uri for resource_uri in self._response[name] ] return ManyToManyManager(model=model, instance=self.model, field_name=name, query={ 'id__in': [ client.parse_id(resource_uri) for resource_uri in resource_uris ] }) elif schema['related_type'] == 'to_one': return Response(model=model, url=self._response[name]) @property def _response(self): if self.__response: return self.__response serializer = slumber.serialize.Serializer( default=self.model._main_client._store['format'])