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.
| commit 126: | 59a9cfaf26de |
| parent 125: | 2ff8ad5b3765 |
| branch: | default |
Better args' names mapping and get a unique object from his pk
11 months ago
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 |
|
|
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 |
|
|
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 |
|
215 |
def _get_from_id_or_pk(self, id=None, pk=None): |
|
208 |
216 |
""" |
209 |
Returns an object given an id |
|
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 |
|
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 |
