From: Scott Baker Date: Mon, 10 Nov 2014 23:58:58 +0000 (-0800) Subject: auto-gen the REST api url list X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=53d972cba97c8e61771484e7e136787f35ed2d7f;p=plstackapi.git auto-gen the REST api url list --- diff --git a/planetstack/apigen/api.template.py b/planetstack/apigen/api.template.py index e3f1b64..89a2b18 100644 --- a/planetstack/apigen/api.template.py +++ b/planetstack/apigen/api.template.py @@ -7,6 +7,7 @@ from rest_framework import status from core.models import * from django.forms import widgets from rest_framework import filters +from django.conf.urls import patterns, url """ Schema of the generator object: @@ -22,7 +23,14 @@ from rest_framework import filters TODO: Deal with subnets """ -# Based on api_root.py +def get_REST_patterns(): + return patterns('', + url(r'^plstackapi/$', api_root), + {% for object in generator.all %} + url(r'plstackapi/{{ object.rest_name }}/$', {{ object.camel }}List.as_view(), name='{{ object.singular }}-list'), + url(r'plstackapi/{{ object.rest_name }}/(?P[a-zA-Z0-9\-]+)/$', {{ object.camel }}Detail.as_view(), name ='{{ object.singular }}-detail'), + {% endfor %} + ) @api_view(['GET']) def api_root(request, format=None): diff --git a/planetstack/apigen/modelgen b/planetstack/apigen/modelgen old mode 100755 new mode 100644 index b403c0b..8d25615 --- a/planetstack/apigen/modelgen +++ b/planetstack/apigen/modelgen @@ -55,6 +55,24 @@ class GenObj(object): else: return name+'s' + def singular(self): + return str(self) + + def rest_name(self): + # These are things that either for historic reasons or due to incorrect naming, + # got called something different than the autogen thinks they should be + # called. + REST_FIXUP = {'networkdeploymentses': 'networkdeployments', + 'imagedeploymentses': 'imagedeployments', + 'slicedeploymentses': 'slice_deployments', + 'userdeploymentses': 'user_deployments', + 'sitedeploymentses': 'sitedeployments', + 'siteroles': 'site_roles', + 'sliceprivileges': 'slice_privileges', + 'sliceroles': 'slice_roles', + } + return REST_FIXUP.get(self.plural(), self.plural()) + def camel(self): name = str(self.model.__name__) return name diff --git a/planetstack/planetstack/urls.py b/planetstack/planetstack/urls.py index ec02c71..b95e8cd 100644 --- a/planetstack/planetstack/urls.py +++ b/planetstack/planetstack/urls.py @@ -37,107 +37,6 @@ urlpatterns = patterns('', # url(r'^admin/xoslib/(?P\w+)/$', XOSLibDataView.as_view(), name="xoslib"), - url(r'^plstackapi/$', api_root), - - url(r'^plstackapi/dashboardviews/$', DashboardViewList.as_view(), name='dashboardview-list'), - url(r'^plstackapi/dashboardview/(?P[a-zA-Z0-9\-]+)/$', DashboardViewDetail.as_view(), name='dashboardview-detail'), - - url(r'^plstackapi/payments/$', PaymentList.as_view(), name='payment-list'), - url(r'^plstackapi/payments/(?P[a-zA-Z0-9\-]+)/$', PaymentDetail.as_view(), name='payment-detail'), - - url(r'^plstackapi/charges/$', ChargeList.as_view(), name='charge-list'), - url(r'^plstackapi/charges/(?P[a-zA-Z0-9\-]+)/$', ChargeDetail.as_view(), name='charge-detail'), - - url(r'^plstackapi/accounts/$', AccountList.as_view(), name='account-list'), - url(r'^plstackapi/accounts/(?P[a-zA-Z0-9\-]+)/$', AccountDetail.as_view(), name='account-detail'), - - url(r'^plstackapi/flavors/$', FlavorList.as_view(), name='flavor-list'), - url(r'^plstackapi/flavors/(?P[a-zA-Z0-9\-]+)/$', FlavorDetail.as_view(), name='flavor-detail'), - - url(r'^plstackapi/deployments/$', DeploymentList.as_view(), name='deployment-list'), - url(r'^plstackapi/deployments/(?P[a-zA-Z0-9\-]+)/$', DeploymentDetail.as_view(), name='deployment-detail'), - - url(r'^plstackapi/images/$', ImageList.as_view(), name='image-list'), - url(r'^plstackapi/images/(?P[a-zA-Z0-9_\-]+)/$', ImageDetail.as_view(), name='image-detail'), - - url(r'^plstackapi/networkparametertypes/$', NodeList.as_view(), name='node-list'), - url(r'^plstackapi/networkparametertypes/(?P[a-zA-Z0-9_\-]+)/$', NodeDetail.as_view(), name='node-detail'), - - url(r'^plstackapi/nodes/$', NodeList.as_view(), name='node-list'), - url(r'^plstackapi/nodes/(?P[a-zA-Z0-9_\-]+)/$', NodeDetail.as_view(), name='node-detail'), - - url(r'^plstackapi/projects/$', ProjectList.as_view(), name='project-list'), - url(r'^plstackapi/projects/(?P[a-zA-Z0-9_\-]+)/$', ProjectDetail.as_view(), name='project-detail'), - - url(r'^plstackapi/reservations/$', ReservationList.as_view(), name='reservation-list'), - url(r'^plstackapi/reservations/(?P[a-zA-Z0-9_\-]+)/$', ReservationDetail.as_view(), name='reservation-detail'), - - url(r'^plstackapi/roles/$', RoleList.as_view(), name='role-list'), - url(r'^plstackapi/roles/(?P[a-zA-Z0-9]+)/$', RoleDetail.as_view(), name='role-detail'), - - url(r'^plstackapi/serviceclasses/$', ServiceClassList.as_view(), name='serviceclass-list'), - url(r'^plstackapi/serviceclasses/(?P[a-zA-Z0-9]+)/$', ServiceClassDetail.as_view(), name='serviceclass-detail'), - - url(r'^plstackapi/serviceresources/$', ServiceResourceList.as_view(), name='serviceresource-list'), - url(r'^plstackapi/serviceresources/(?P[a-zA-Z0-9]+)/$', ServiceResourceDetail.as_view(), name='serviceresource-detail'), - - url(r'^plstackapi/site_privileges/$', SitePrivilegeList.as_view(), name='siteprivilege-list'), - url(r'^plstackapi/site_privileges/(?P[a-zA-Z0-9_]+)/$', SitePrivilegeDetail.as_view(), name='siteprivilege-detail'), - - url(r'^plstackapi/site_roles/$', SiteRoleList.as_view(), name='siterole-list'), - url(r'^plstackapi/site_roles/(?P[a-zA-Z0-9_\-]+)/$', SiteRoleDetail.as_view(), name='siterole-detail'), - - url(r'^plstackapi/sites/$', SiteList.as_view(), name='site-list'), - url(r'^plstackapi/sites/(?P[a-zA-Z0-9_\-]+)/$', SiteDetail.as_view(), name='site-detail'), - - url(r'^plstackapi/accounts/$', AccountList.as_view(), name='account-list'), - url(r'^plstackapi/accounts/(?P[a-zA-Z0-9_\-]+)/$', AccountDetail.as_view(), name='account-detail'), - - url(r'^plstackapi/networktemplates/$', NetworkTemplateList.as_view(), name='networktemplate-list'), - url(r'^plstackapi/networktemplates/(?P[a-zA-Z0-9_\-]+)/$', NetworkTemplateDetail.as_view(), name='networktemplate-detail'), - - url(r'^plstackapi/networkslices/$', NetworkSliceList.as_view(), name='networkslice-list'), - url(r'^plstackapi/networkslices/(?P[a-zA-Z0-9_\-]+)/$', NetworkSliceDetail.as_view(), name='networkslice-detail'), - - url(r'^plstackapi/networkslivers/$', NetworkSliverList.as_view(), name='networksliver-list'), - url(r'^plstackapi/networkslivers/(?P[a-zA-Z0-9_\-]+)/$', NetworkSliverDetail.as_view(), name='networksliver-detail'), - - url(r'^plstackapi/networkdeployments/$', NetworkDeploymentsList.as_view(), name='networkdeployment-list'), - url(r'^plstackapi/networkdeployments/(?P[a-zA-Z0-9_\-]+)/$', NetworkDeploymentsDetail.as_view(), name='networkdeployment-detail'), - - url(r'^plstackapi/networks/$', NetworkList.as_view(), name='network-list'), - url(r'^plstackapi/networks/(?P[a-zA-Z0-9_\-]+)/$', NetworkDetail.as_view(), name='network-detail'), - - url(r'^plstackapi/services/$', ServiceList.as_view(), name='service-list'), - url(r'^plstackapi/services/(?P[a-zA-Z0-9_\-]+)/$', ServiceDetail.as_view(), name='service-detail'), - - url(r'^plstackapi/slices/$', SliceList.as_view(), name='slice-list'), - url(r'^plstackapi/slices/(?P[a-zA-Z0-9_\-]+)/$', SliceDetail.as_view(), name='slice-detail'), - - url(r'^plstackapi/slice_roles/$', SliceRoleList.as_view(), name='slicerole-list'), - url(r'^plstackapi/slice_roles/(?P[a-zA-Z0-9_\-]+)/$', SliceRoleDetail.as_view(), name='slicerole-detail'), - - url(r'^plstackapi/slice_memberships/$', SlicePrivilegeList.as_view(), name='sliceprivilege-list'), - url(r'^plstackapi/slice_memberships/(?P[0-9]+)/$', SlicePrivilegeDetail.as_view(), name='sliceprivilege-detail'), - - url(r'^plstackapi/slice_deployments/$', SliceDeploymentsList.as_view(), name='slicedeployments-list'), - url(r'^plstackapi/slice_deployments/(?P[0-9]+)/$', SliceDeploymentsDetail.as_view(), name='slicedeployments-detail'), - - url(r'^plstackapi/slice_privileges/$', SlicePrivilegeList.as_view(), name='sliceprivilege-list'), - url(r'^plstackapi/slice_privileges/(?P[0-9]+)/$', SlicePrivilegeDetail.as_view(), name='sliceprivilege-detail'), - - url(r'^plstackapi/slivers/$', SliverList.as_view(), name='sliver-list'), - url(r'^plstackapi/slivers/(?P[a-zA-Z0-9_\-]+)/$', SliverDetail.as_view(), name='sliver-detail'), - - url(r'^plstackapi/tags/$', TagList.as_view(), name='tag-list'), - url(r'^plstackapi/tags/(?P[a-zA-Z0-9_\-]+)/$', TagDetail.as_view(), name='tag-detail'), - - url(r'^plstackapi/users/$', UserList.as_view(), name='user-list'), - url(r'^plstackapi/users/(?P[a-zA-Z0-9_\-]+)/$', UserDetail.as_view(), name='user-detail'), - - url(r'^plstackapi/user_deployments/$', UserDeploymentsList.as_view(), name='userdeployments-list'), - url(r'^plstackapi/user_deployments/(?P[a-zA-Z0-9_\-]+)/$', UserDeploymentsDetail.as_view(), name='userdeployments-detail'), - url(r'^xmlrpc/legacyapi/$', 'core.views.legacyapi.LegacyXMLRPC', name='xmlrpc'), # url(r'^analytics/(?P\w+)/$', AnalyticsAjaxView.as_view(), name="analytics"), @@ -148,5 +47,6 @@ urlpatterns = patterns('', url(r'^plstackapi/', include('rest_framework.urls', namespace='rest_framework')), # XOSLib rest methods - url(r'^xoslib/', include('core.xoslib.methods', namespace='xoslib')), -) + url(r'^xoslib/', include('core.xoslib.methods', namespace='xoslib')), + ) + get_REST_patterns() +