From 36683546e66d86f65e0ede443433448d1f33e5e7 Mon Sep 17 00:00:00 2001 From: adriant Date: Tue, 28 Jul 2015 18:00:08 +1200 Subject: [PATCH] refactor of api structure To make versioning of the api clearer, I've broken up the api into subfolders and kept the models at the top api layer. Should make things easier to understand and update. Change-Id: I357582d6fcc2eaf59ebe721cc4fef3a3e98da492 --- MANIFEST.in | 2 +- conf/conf.yaml | 1 + setup.py | 3 ++- stacktask/{api_v1 => api}/__init__.py | 0 stacktask/{api_v1 => api}/admin.py | 2 +- .../migrations/0001_initial.py | 8 ++++---- .../{api_v1 => api}/migrations/__init__.py | 0 stacktask/{api_v1 => api}/models.py | 0 stacktask/api/tests.py | 15 ++++++++++++++ stacktask/api/urls.py | 20 +++++++++++++++++++ stacktask/api/v1/__init__.py | 0 stacktask/api/v1/models.py | 15 ++++++++++++++ .../v1}/templates/completed.txt | 0 .../{api_v1 => api/v1}/templates/initial.txt | 0 .../{api_v1 => api/v1}/templates/token.txt | 0 stacktask/{api_v1 => api/v1}/tests.py | 2 +- stacktask/{api_v1 => api/v1}/urls.py | 2 +- stacktask/{api_v1 => api/v1}/views.py | 2 +- stacktask/base/migrations/0001_initial.py | 4 ++-- stacktask/base/models.py | 2 +- stacktask/base/tests.py | 6 +++--- stacktask/settings.py | 2 +- stacktask/tenant_setup/tests.py | 6 +++--- stacktask/urls.py | 2 +- 24 files changed, 73 insertions(+), 21 deletions(-) rename stacktask/{api_v1 => api}/__init__.py (100%) rename stacktask/{api_v1 => api}/admin.py (92%) rename stacktask/{api_v1 => api}/migrations/0001_initial.py (85%) rename stacktask/{api_v1 => api}/migrations/__init__.py (100%) rename stacktask/{api_v1 => api}/models.py (100%) create mode 100644 stacktask/api/tests.py create mode 100644 stacktask/api/urls.py create mode 100644 stacktask/api/v1/__init__.py create mode 100644 stacktask/api/v1/models.py rename stacktask/{api_v1 => api/v1}/templates/completed.txt (100%) rename stacktask/{api_v1 => api/v1}/templates/initial.txt (100%) rename stacktask/{api_v1 => api/v1}/templates/token.txt (100%) rename stacktask/{api_v1 => api/v1}/tests.py (99%) rename stacktask/{api_v1 => api/v1}/urls.py (97%) rename stacktask/{api_v1 => api/v1}/views.py (99%) diff --git a/MANIFEST.in b/MANIFEST.in index 51d607e..82db4f2 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,3 +1,3 @@ include README.md -include stacktask/*/templates/* +graft stacktask/api/v*/templates diff --git a/conf/conf.yaml b/conf/conf.yaml index 22ed3a6..23b415b 100644 --- a/conf/conf.yaml +++ b/conf/conf.yaml @@ -2,6 +2,7 @@ SECRET_KEY: '+er!!4olta#17a=n%uotcazg2ncpl==yjog%1*o-(cr%zys-)!' ADDITIONAL_APPS: + - stacktask.api.v1 - stacktask.tenant_setup DATABASES: diff --git a/setup.py b/setup.py index 85c6b62..9a829ea 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ from setuptools import setup, find_packages setup( name='stacktask', - version='0.1.0a4', + version='0.1.0a5', description='A user registration service for openstack.', long_description=( 'A registration service to sit alongside keystone and ' + @@ -23,6 +23,7 @@ setup( keywords='openstack registration keystone users tasks workflow', packages=find_packages(), + package_data={'stacktask': ['api/v*/templates/*.txt']}, install_requires=[ 'Django>=1.7.3', diff --git a/stacktask/api_v1/__init__.py b/stacktask/api/__init__.py similarity index 100% rename from stacktask/api_v1/__init__.py rename to stacktask/api/__init__.py diff --git a/stacktask/api_v1/admin.py b/stacktask/api/admin.py similarity index 92% rename from stacktask/api_v1/admin.py rename to stacktask/api/admin.py index 3e50e64..253a1be 100644 --- a/stacktask/api_v1/admin.py +++ b/stacktask/api/admin.py @@ -13,7 +13,7 @@ # under the License. from django.contrib import admin -from stacktask.api_v1.models import Token, Registration +from stacktask.api.models import Token, Registration admin.site.register(Token) admin.site.register(Registration) diff --git a/stacktask/api_v1/migrations/0001_initial.py b/stacktask/api/migrations/0001_initial.py similarity index 85% rename from stacktask/api_v1/migrations/0001_initial.py rename to stacktask/api/migrations/0001_initial.py index 35658a0..be4b3f0 100644 --- a/stacktask/api_v1/migrations/0001_initial.py +++ b/stacktask/api/migrations/0001_initial.py @@ -4,7 +4,7 @@ from __future__ import unicode_literals from django.db import models, migrations import jsonfield.fields import django.utils.timezone -import stacktask.api_v1.models +import stacktask.api.models class Migration(migrations.Migration): @@ -25,7 +25,7 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Registration', fields=[ - ('uuid', models.CharField(default=stacktask.api_v1.models.hex_uuid, max_length=200, serialize=False, primary_key=True)), + ('uuid', models.CharField(default=stacktask.api.models.hex_uuid, max_length=200, serialize=False, primary_key=True)), ('reg_ip', models.GenericIPAddressField()), ('keystone_user', jsonfield.fields.JSONField(default={})), ('action_view', models.CharField(max_length=200)), @@ -43,12 +43,12 @@ class Migration(migrations.Migration): ('token', models.CharField(max_length=200, serialize=False, primary_key=True)), ('created', models.DateTimeField(default=django.utils.timezone.now)), ('expires', models.DateTimeField()), - ('registration', models.ForeignKey(to='api_v1.Registration')), + ('registration', models.ForeignKey(to='api.Registration')), ], ), migrations.AddField( model_name='notification', name='registration', - field=models.ForeignKey(to='api_v1.Registration'), + field=models.ForeignKey(to='api.Registration'), ), ] diff --git a/stacktask/api_v1/migrations/__init__.py b/stacktask/api/migrations/__init__.py similarity index 100% rename from stacktask/api_v1/migrations/__init__.py rename to stacktask/api/migrations/__init__.py diff --git a/stacktask/api_v1/models.py b/stacktask/api/models.py similarity index 100% rename from stacktask/api_v1/models.py rename to stacktask/api/models.py diff --git a/stacktask/api/tests.py b/stacktask/api/tests.py new file mode 100644 index 0000000..5c954a0 --- /dev/null +++ b/stacktask/api/tests.py @@ -0,0 +1,15 @@ +# Copyright (C) 2015 Catalyst IT Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from stacktask.api.v1 import tests diff --git a/stacktask/api/urls.py b/stacktask/api/urls.py new file mode 100644 index 0000000..6d5ea2b --- /dev/null +++ b/stacktask/api/urls.py @@ -0,0 +1,20 @@ +# Copyright (C) 2015 Catalyst IT Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from django.conf.urls import patterns, url, include + +urlpatterns = patterns( + '', + url(r'^v1/', include('stacktask.api.v1.urls')), +) diff --git a/stacktask/api/v1/__init__.py b/stacktask/api/v1/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/stacktask/api/v1/models.py b/stacktask/api/v1/models.py new file mode 100644 index 0000000..aa1603c --- /dev/null +++ b/stacktask/api/v1/models.py @@ -0,0 +1,15 @@ +# Copyright (C) 2015 Catalyst IT Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from django.db import models diff --git a/stacktask/api_v1/templates/completed.txt b/stacktask/api/v1/templates/completed.txt similarity index 100% rename from stacktask/api_v1/templates/completed.txt rename to stacktask/api/v1/templates/completed.txt diff --git a/stacktask/api_v1/templates/initial.txt b/stacktask/api/v1/templates/initial.txt similarity index 100% rename from stacktask/api_v1/templates/initial.txt rename to stacktask/api/v1/templates/initial.txt diff --git a/stacktask/api_v1/templates/token.txt b/stacktask/api/v1/templates/token.txt similarity index 100% rename from stacktask/api_v1/templates/token.txt rename to stacktask/api/v1/templates/token.txt diff --git a/stacktask/api_v1/tests.py b/stacktask/api/v1/tests.py similarity index 99% rename from stacktask/api_v1/tests.py rename to stacktask/api/v1/tests.py index 449eb19..3040c27 100644 --- a/stacktask/api_v1/tests.py +++ b/stacktask/api/v1/tests.py @@ -14,7 +14,7 @@ from rest_framework import status from rest_framework.test import APITestCase -from stacktask.api_v1.models import Registration, Token +from stacktask.api.models import Registration, Token import mock from django.utils import timezone from datetime import timedelta diff --git a/stacktask/api_v1/urls.py b/stacktask/api/v1/urls.py similarity index 97% rename from stacktask/api_v1/urls.py rename to stacktask/api/v1/urls.py index 8d48f48..0189a8b 100644 --- a/stacktask/api_v1/urls.py +++ b/stacktask/api/v1/urls.py @@ -13,7 +13,7 @@ # under the License. from django.conf.urls import patterns, url -from stacktask.api_v1 import views +from stacktask.api.v1 import views urlpatterns = patterns( '', diff --git a/stacktask/api_v1/views.py b/stacktask/api/v1/views.py similarity index 99% rename from stacktask/api_v1/views.py rename to stacktask/api/v1/views.py index bf63097..ed1bb64 100644 --- a/stacktask/api_v1/views.py +++ b/stacktask/api/v1/views.py @@ -15,7 +15,7 @@ from decorator import decorator from rest_framework.views import APIView from rest_framework.response import Response -from .models import Registration, Token, Notification +from stacktask.api.models import Registration, Token, Notification from django.utils import timezone from datetime import timedelta from uuid import uuid4 diff --git a/stacktask/base/migrations/0001_initial.py b/stacktask/base/migrations/0001_initial.py index 0b9715e..399161e 100644 --- a/stacktask/base/migrations/0001_initial.py +++ b/stacktask/base/migrations/0001_initial.py @@ -9,7 +9,7 @@ import jsonfield.fields class Migration(migrations.Migration): dependencies = [ - ('api_v1', '0001_initial'), + ('api', '0001_initial'), ] operations = [ @@ -25,7 +25,7 @@ class Migration(migrations.Migration): ('need_token', models.BooleanField()), ('order', models.IntegerField()), ('created', models.DateTimeField(default=django.utils.timezone.now)), - ('registration', models.ForeignKey(to='api_v1.Registration')), + ('registration', models.ForeignKey(to='api.Registration')), ], ), ] diff --git a/stacktask/base/models.py b/stacktask/base/models.py index ab99afe..2de0672 100644 --- a/stacktask/base/models.py +++ b/stacktask/base/models.py @@ -33,7 +33,7 @@ class Action(models.Model): state = models.CharField(max_length=200, default="default") valid = models.BooleanField(default=False) need_token = models.BooleanField() - registration = models.ForeignKey('api_v1.Registration') + registration = models.ForeignKey('api.Registration') order = models.IntegerField() diff --git a/stacktask/base/tests.py b/stacktask/base/tests.py index 11e9775..8ff13ae 100644 --- a/stacktask/base/tests.py +++ b/stacktask/base/tests.py @@ -13,9 +13,9 @@ # under the License. from django.test import TestCase -from stacktask.api_v1.models import Registration -from stacktask.api_v1.tests import FakeManager, setup_temp_cache -from stacktask.api_v1 import tests +from stacktask.api.models import Registration +from stacktask.api.v1.tests import FakeManager, setup_temp_cache +from stacktask.api.v1 import tests from stacktask.base.models import NewUser, NewProject, ResetUser import mock diff --git a/stacktask/settings.py b/stacktask/settings.py index 31a5d9b..7dcd839 100644 --- a/stacktask/settings.py +++ b/stacktask/settings.py @@ -51,7 +51,7 @@ INSTALLED_APPS = ( 'django.contrib.staticfiles', 'rest_framework', 'stacktask.base', - 'stacktask.api_v1', + 'stacktask.api', ) MIDDLEWARE_CLASSES = ( diff --git a/stacktask/tenant_setup/tests.py b/stacktask/tenant_setup/tests.py index 83f477a..8490da3 100644 --- a/stacktask/tenant_setup/tests.py +++ b/stacktask/tenant_setup/tests.py @@ -13,9 +13,9 @@ # under the License. from django.test import TestCase -from stacktask.api_v1.models import Registration -from stacktask.api_v1.tests import FakeManager, setup_temp_cache -from stacktask.api_v1 import tests +from stacktask.api.models import Registration +from stacktask.api.v1.tests import FakeManager, setup_temp_cache +from stacktask.api.v1 import tests from stacktask.tenant_setup.models import DefaultProjectResources, AddAdminToProject import mock diff --git a/stacktask/urls.py b/stacktask/urls.py index 64f2661..edee564 100644 --- a/stacktask/urls.py +++ b/stacktask/urls.py @@ -18,5 +18,5 @@ from django.contrib import admin urlpatterns = patterns( '', url(r'^admin/', include(admin.site.urls)), - url(r'^v1/', include('stacktask.api_v1.urls')), + url(r'^', include('stacktask.api.urls')), )