Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/qualitio/api/__init__.py b/qualitio/api/__init__.py
- index 8ba4d36..42a464d 100644
- --- a/qualitio/api/__init__.py
- +++ b/qualitio/api/__init__.py
- @@ -22,7 +22,7 @@ Serializer.content_types = {'json': 'application/json'}
- class BaseMeta(object):
- default_format = 'application/json'
- serializer = Serializer(formats=Serializer.formats, content_types=Serializer.content_types)
- - authentication = BasicAuthentication()
- + # authentication = BasicAuthentication()
- authorization = DjangoAuthorization()
- @@ -146,3 +146,8 @@ api.register(WordResource())
- urls = api.urls
- +
- +
- +from pprint import pprint
- +for u in urls:
- + pprint(u.regex.pattern)
- diff --git a/qualitio/core/custommodel/api.py b/qualitio/core/custommodel/api.py
- index 9be7018..a2afd21 100644
- --- a/qualitio/core/custommodel/api.py
- +++ b/qualitio/core/custommodel/api.py
- @@ -5,9 +5,14 @@ automatically generated reverse ``customization`` field.
- For models that has customizations it will automatically
- register customization model and resource.
- """
- +import re
- +from django.conf.urls.defaults import *
- +
- from tastypie.resources import ModelResource as TastypieModelResource, ModelDeclarativeMetaclass
- from tastypie import fields
- +from tastypie.utils import trailing_slash
- from tastypie.api import Api as TastypieApi
- +from tastypie.bundle import Bundle
- def create_customization_model_resource(customization_model):
- @@ -38,11 +43,27 @@ class CustomizationModelDeclarativeMetaclass(ModelDeclarativeMetaclass):
- return super(CustomizationModelDeclarativeMetaclass, cls).__new__(cls, cls_name, bases, attrs)
- -class ModelResource(TastypieModelResource):
- +class ProjectUpdater(object):
- + def _update_reverse_url_kwargs(self, kwargs):
- + from qualitio.core.middleware import THREAD
- + kwargs = kwargs or {}
- + kwargs.update(project=getattr(getattr(THREAD, 'project', None), 'slug', None))
- + return kwargs
- +
- +
- +class ModelResource(TastypieModelResource, ProjectUpdater):
- __metaclass__ = CustomizationModelDeclarativeMetaclass
- + def _build_reverse_url(self, name, args=None, kwargs=None):
- + return super(ModelResource, self)._build_reverse_url(
- + name, args=args, kwargs=self._update_reverse_url_kwargs(kwargs))
- +
- + def obj_get(self, request=None, **kwargs):
- + kwargs['project'] = request.project
- + return super(ModelResource, self).obj_get(request=request, **kwargs)
- +
- -class Api(TastypieApi):
- +class Api(TastypieApi, ProjectUpdater):
- def register(self, resource, canonical=True):
- super_register = super(Api, self).register
- CustomizationModelResource = getattr(resource.__class__, 'CustomizationModelResource', None)
- @@ -61,3 +82,26 @@ class Api(TastypieApi):
- super_unregister(resource_class.CustomizationModelResource._meta.resource_name)
- super_unregister(resource_name)
- +
- + def _build_reverse_url(self, name, args=None, kwargs=None):
- + return super(ModelResource, self)._build_reverse_url(
- + name, args=args, kwargs=self._update_reverse_url_kwargs(kwargs))
- +
- + @property
- + def urls(self):
- + pattern_list = [
- + url(r"^project/(?P<project>[\w-]+)/(?P<api_name>%s)%s$" % (self.api_name, trailing_slash()), self.wrap_view('top_level'), name="api_%s_top_level" % self.api_name),
- + ]
- +
- + for name in sorted(self._registry.keys()):
- + self._registry[name].api_name = self.api_name
- + pattern_list.append((r"^project/(?P<project>[\w-]+)/(?P<api_name>%s)/" % self.api_name, include(self._registry[name].urls)))
- +
- + urlpatterns = self.override_urls() + patterns('',
- + *pattern_list
- + )
- + return urlpatterns
- +
- + def top_level(self, request, **kwargs):
- + kwargs.pop('project', None)
- + return super(Api, self).top_level(request, **kwargs)
Add Comment
Please, Sign In to add comment