david / django-roa (http://welldev.org/)

Turn your models into remote resources that you can access through Django's ORM. ROA stands for Resource Oriented Architecture.

Clone this repository (size: 560.7 KB): HTTPS / SSH
$ hg clone http://code.welldev.org/django-roa

Changed (Δ497 bytes):

raw changeset »

django_roa/db/query.py (16 lines added, 5 lines removed)

Up to file-list django_roa/db/query.py:

@@ -74,9 +74,17 @@ class Query(object):
74
74
        
75
75
        # Filtering
76
76
        for k, v in self.filters.iteritems():
77
            parameters['%s%s' % (ROA_ARGS_NAMES_MAPPING.get('FILTER_', 'filter_'), k)] = v
77
            key = '%s%s' % (ROA_ARGS_NAMES_MAPPING.get('FILTER_', 'filter_'), k)
78
            if key in ROA_ARGS_NAMES_MAPPING:
79
                parameters[ROA_ARGS_NAMES_MAPPING[key]] = v
80
            else:
81
                parameters[key] = v
78
82
        for k, v in self.excludes.iteritems():
79
            parameters['%s%s' % (ROA_ARGS_NAMES_MAPPING.get('EXCLUDE_', 'exclude_'), k)] = v
83
            key = '%s%s' % (ROA_ARGS_NAMES_MAPPING.get('EXCLUDE_', 'exclude_'), k)
84
            if key in ROA_ARGS_NAMES_MAPPING:
85
                parameters[ROA_ARGS_NAMES_MAPPING[key]] = v
86
            else:
87
                parameters[key] = v
80
88
        
81
89
        # Ordering
82
90
        if self.order_by:
@@ -204,9 +212,9 @@ class RemoteQuerySet(query.QuerySet):
204
212
        
205
213
        return int(response)
206
214
207
    def _get_from_id(self, id):
215
    def _get_from_id_or_pk(self, id=None, pk=None):
208
216
        """
209
        Returns an object given an id, request directly with the
217
        Returns an object given an id or pk, request directly with the
210
218
        get_resource_url_detail method without filtering on ids
211
219
        (as Django's ORM do).
212
220
        """
@@ -217,6 +225,7 @@ class RemoteQuerySet(query.QuerySet):
217
225
        # for all model without relying on get_resource_url_list
218
226
        instance = clone.model()
219
227
        instance.id = id
228
        instance.pk = pk
220
229
        resource = Resource(instance.get_resource_url_detail(), headers=ROA_HEADERS)
221
230
        
222
231
        try:
@@ -251,7 +260,9 @@ class RemoteQuerySet(query.QuerySet):
251
260
        # special case, get(id=X) directly request the resource URL and do not
252
261
        # filter on ids like Django's ORM do.
253
262
        if kwargs.keys() == ['id']:
254
            return self._get_from_id(kwargs['id'])
263
            return self._get_from_id_or_pk(id=kwargs['id'])
264
        elif kwargs.keys() == ['pk']: # useful for admin which relies on pks
265
            return self._get_from_id_or_pk(pk=kwargs['pk'])
255
266
        else:
256
267
            return super(RemoteQuerySet, self).get(*args, **kwargs)
257
268