Example #1
0
 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 _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
Example #3
0
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 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
Example #5
0
 def invalidate(self):
     resource = getattr(self.model._main_client, self.model._model_name)
     self.refresh(resource(client.parse_id(self.resource_uri)).get())
Example #6
0
                                       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,
 def invalidate(self):
     resource = getattr(self.model._main_client, self.model._model_name)
     self.refresh(resource(client.parse_id(self.resource_uri)).get())
        # 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'])