Refactor ara-server into namespaced python modules

This is a structure that will allow us to install everything under
"ara" as separate packages but inside the same module.

For example, installing ara-server will provide ara.server and
ara.api.
Installing ara-clients will provide ara.clients, ara-plugins will
supply ara.plugins, etc.

Change-Id: I27ee431c4e5d946f558befc12937ba2f3c0d020b
This commit is contained in:
David Moreau Simard 2018-06-19 23:51:33 -04:00
parent 68cbbe24bc
commit 1abe276bae
No known key found for this signature in database
GPG Key ID: 33A07694CBB71ECC
25 changed files with 37 additions and 33 deletions

2
.gitignore vendored
View File

@ -91,6 +91,6 @@ ENV/
# Rope project settings # Rope project settings
.ropeproject .ropeproject
/db.sqlite3 .*/db.sqlite3
www/ www/
data/ data/

View File

1
ara/api/__init__.py Normal file
View File

@ -0,0 +1 @@
__import__('pkg_resources').declare_namespace(__name__)

View File

@ -1,4 +1,4 @@
from api import models from ara.api import models
from django.contrib import admin from django.contrib import admin
from django.contrib.auth.models import Group from django.contrib.auth.models import Group

View File

@ -2,4 +2,4 @@ from django.apps import AppConfig
class ApiConfig(AppConfig): class ApiConfig(AppConfig):
name = 'api' name = 'ara.api'

View File

@ -19,13 +19,13 @@ import json
import hashlib import hashlib
import logging import logging
import zlib import zlib
from api import models from ara.api import models
from django.utils import timezone from django.utils import timezone
from rest_framework import serializers from rest_framework import serializers
DATE_FORMAT = "(iso-8601: 2016-05-06T17:20:25.749489-04:00)" DATE_FORMAT = "(iso-8601: 2016-05-06T17:20:25.749489-04:00)"
DURATION_FORMAT = "([DD] [HH:[MM:]]ss[.uuuuuu])" DURATION_FORMAT = "([DD] [HH:[MM:]]ss[.uuuuuu])"
logger = logging.getLogger('api.serializers') logger = logging.getLogger('ara.api.serializers')
class CompressedTextField(serializers.CharField): class CompressedTextField(serializers.CharField):

View File

@ -1,6 +1,6 @@
import factory import factory
from api import models from ara.api import models
class FileContentFactory(factory.DjangoModelFactory): class FileContentFactory(factory.DjangoModelFactory):

View File

@ -1,7 +1,7 @@
from rest_framework.test import APITestCase from rest_framework.test import APITestCase
from api import models, serializers from ara.api import models, serializers
from api.tests import factories from ara.api.tests import factories
class FileTestCase(APITestCase): class FileTestCase(APITestCase):

View File

@ -1,7 +1,7 @@
from rest_framework.test import APITestCase from rest_framework.test import APITestCase
from api import serializers, models from ara.api import serializers, models
from api.tests import factories from ara.api.tests import factories
class FileContentTestCase(APITestCase): class FileContentTestCase(APITestCase):

View File

@ -2,8 +2,8 @@ import datetime
from django.utils import timezone from django.utils import timezone
from rest_framework.test import APITestCase from rest_framework.test import APITestCase
from api import models, serializers from ara.api import models, serializers
from api.tests import factories from ara.api.tests import factories
class PlaybookTestCase(APITestCase): class PlaybookTestCase(APITestCase):

View File

@ -1,8 +1,8 @@
import time import time
from rest_framework.test import APITestCase from rest_framework.test import APITestCase
from api import models from ara.api import models
from api.tests import factories from ara.api.tests import factories
class PlaybookFileTestCase(APITestCase): class PlaybookFileTestCase(APITestCase):

View File

@ -17,7 +17,7 @@
from django.conf.urls import url from django.conf.urls import url
from rest_framework.urlpatterns import format_suffix_patterns from rest_framework.urlpatterns import format_suffix_patterns
from api import views from ara.api import views
urlpatterns = [ urlpatterns = [
url(r'^$', views.api_root), url(r'^$', views.api_root),

View File

@ -18,7 +18,7 @@ from rest_framework.decorators import api_view, detail_route
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.reverse import reverse from rest_framework.reverse import reverse
from api import models, serializers from ara.api import models, serializers
from rest_framework import generics, status from rest_framework import generics, status

1
ara/server/__init__.py Normal file
View File

@ -0,0 +1 @@
__import__('pkg_resources').declare_namespace(__name__)

View File

@ -4,7 +4,7 @@ import random
import sys import sys
from envparse import env from envparse import env
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
def get_secret_key(secret_key): def get_secret_key(secret_key):
@ -29,7 +29,7 @@ INSTALLED_APPS = [
'django.contrib.messages', 'django.contrib.messages',
'django.contrib.staticfiles', 'django.contrib.staticfiles',
'rest_framework', 'rest_framework',
'api' 'ara.api'
] ]
MIDDLEWARE = [ MIDDLEWARE = [
@ -44,7 +44,7 @@ MIDDLEWARE = [
CORS_ORIGIN_ALLOW_ALL = True CORS_ORIGIN_ALLOW_ALL = True
ROOT_URLCONF = 'ara.urls' ROOT_URLCONF = 'ara.server.urls'
TEMPLATES = [ TEMPLATES = [
{ {
@ -62,7 +62,7 @@ TEMPLATES = [
}, },
] ]
WSGI_APPLICATION = 'ara.wsgi.application' WSGI_APPLICATION = 'ara.server.wsgi.application'
DATABASES = { DATABASES = {
'default': { 'default': {

View File

@ -7,7 +7,7 @@ admin.site.site_header = 'Administration'
admin.site.index_title = 'Administration Ara' admin.site.index_title = 'Administration Ara'
routes = [ routes = [
url(r'^api/v1/', include('api.urls')), url(r'^api/v1/', include('ara.api.urls')),
url(r'^admin/', admin.site.urls), url(r'^admin/', admin.site.urls),
] ]
urlpatterns = routes + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) urlpatterns = routes + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

View File

@ -2,6 +2,6 @@ import os
from django.core.wsgi import get_wsgi_application from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ara.settings") os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ara.server.settings")
application = get_wsgi_application() application = get_wsgi_application()

View File

@ -3,7 +3,7 @@ import os
import sys import sys
if __name__ == "__main__": if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ara.settings") os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ara.server.settings")
from django.core.management import execute_from_command_line from django.core.management import execute_from_command_line

View File

@ -1,11 +1,11 @@
[metadata] [metadata]
name = ara-backend name = ara-server
summary = ARA Records Ansible backend summary = ARA Records Ansible API and Server components
description-file = description-file =
README.rst README.rst
author = OpenStack Community author = OpenStack Community
author-email = openstack-dev@lists.openstack.org author-email = openstack-dev@lists.openstack.org
home-page = https://github.com/openstack/ara-backend home-page = https://github.com/openstack/ara-server
classifier = classifier =
Environment :: OpenStack Environment :: OpenStack
Intended Audience :: Information Technology Intended Audience :: Information Technology
@ -26,8 +26,11 @@ setup-hooks =
pbr.hooks.setup_hook pbr.hooks.setup_hook
[files] [files]
namespace_packages =
ara.api
ara.server
packages = packages =
ara-backend ara
[build_sphinx] [build_sphinx]
source-dir = doc/source source-dir = doc/source
@ -41,7 +44,6 @@ upload-dir = docs/html
ignore_errors = True ignore_errors = True
include = include =
ara/* ara/*
api/*
omit = omit =
/usr* /usr*
setup.py setup.py

10
tox.ini
View File

@ -19,11 +19,11 @@ commands = sphinx-build -W -b html doc/source doc/build/html
[testenv:pep8] [testenv:pep8]
commands = commands =
flake8 ara api flake8 ara
bandit -r ara api bandit -r ara
[testenv:py35] [testenv:py35]
commands = python manage.py test commands = python manage.py test ara
[testenv:runserver] [testenv:runserver]
commands = commands =
@ -44,8 +44,8 @@ setenv =
[testenv:cover] [testenv:cover]
commands = commands =
coverage erase coverage erase
coverage run {toxinidir}/manage.py test ara coverage run {toxinidir}/manage.py test ara/server
coverage run -a {toxinidir}/manage.py test api coverage run -a {toxinidir}/manage.py test ara/api
coverage html coverage html
[flake8] [flake8]