Refactor rest_api app and the method end points are registered. All apps API URL endpoints are now registered under the 'rest_api' namespace.

This commit is contained in:
Roberto Rosario
2015-08-06 02:50:14 -04:00
parent 1fa859a0c3
commit ea02172a82
8 changed files with 64 additions and 73 deletions

View File

@@ -4,6 +4,8 @@ from django.conf.urls import include, patterns, url
from django.conf import settings
from django.utils.module_loading import import_string
from rest_framework.reverse import reverse
class APIEndPoint(object):
_registry = {}
@@ -17,14 +19,16 @@ class APIEndPoint(object):
return cls._registry[name]
def __unicode__(self):
return unicode(self.name)
return unicode(self.app.name)
def __init__(self, name, app_name=None):
self.name = name
def __init__(self, app, version_string, name=None):
self.app = app
self.endpoints = []
self.name = name
self.version_string = version_string
try:
api_urls = import_string(
'{0}.urls.api_urls'.format(app_name or name)
'{0}.urls.api_urls'.format(app.name)
)
except Exception:
if settings.DEBUG:
@@ -35,13 +39,26 @@ class APIEndPoint(object):
else:
self.register_urls(api_urls)
self.__class__._registry[name] = self
self.__class__._registry[app.name] = self
@property
def url(self):
return reverse('rest_api:api-version-1-app', args=[self.app.name])
@property
def app_name(self):
return self.app.name
def register_urls(self, urlpatterns):
from .urls import version_0_urlpatterns
from .urls import version_1_urlpatterns
endpoint_urls = patterns(
'',
url(r'^%s/' % self.name, include(urlpatterns)),
url(r'^%s/' % self.app.name, include(urlpatterns)),
)
version_1_urlpatterns += endpoint_urls
version_0_urlpatterns += endpoint_urls
class APIVersion(object):
def __init__(self):
self.version_string = '1'
self.url = reverse('rest_api:api-version-1')