From e7e6b2331455b20a62bb99270b54f156282cf0fd Mon Sep 17 00:00:00 2001
From: Lars Kruse <devel@sumpfralle.de>
Date: Tue, 15 Mar 2022 12:33:59 +0100
Subject: [PATCH] refactor: rename the python package from "src" to
 "aura_engine_api"

The import path changed from "." to "src" at the same time.
---
 .flake8                                       |  2 +-
 .gitlab-ci.yml                                |  2 +-
 README.md                                     |  4 ++--
 pyproject.toml                                |  4 ++--
 run.sh                                        | 14 ++++++------
 setup.py                                      |  2 +-
 meta.py => src/aura_engine_api/__init__.py    |  0
 src/{ => aura_engine_api}/app.py              | 19 ++++++++--------
 src/{ => aura_engine_api/base}/__init__.py    |  0
 src/{ => aura_engine_api}/base/config.py      |  6 +++--
 src/{ => aura_engine_api}/base/logger.py      |  0
 src/{ => aura_engine_api}/base/node.py        |  0
 src/{ => aura_engine_api}/models.py           |  0
 .../rest}/__init__.py                         |  0
 .../rest/controllers}/__init__.py             |  0
 .../controllers/authorization_controller.py   |  0
 .../rest/controllers/internal_controller.py   | 11 +++++-----
 .../rest/controllers/public_controller.py     |  6 ++---
 src/{ => aura_engine_api}/rest/encoder.py     |  2 +-
 src/aura_engine_api/rest/models/__init__.py   | 14 ++++++++++++
 .../rest/models/base_model_.py                |  2 +-
 .../rest/models/clock_info.py                 | 12 +++++-----
 .../rest/models/health_log.py                 |  4 ++--
 .../rest/models/inline_response400.py         |  4 ++--
 .../rest/models/play_log.py                   |  4 ++--
 .../rest/models/playlist.py                   |  6 ++---
 .../rest/models/playlist_entry.py             |  4 ++--
 .../rest/models/timeslot.py                   |  4 ++--
 .../rest/models/track.py                      |  4 ++--
 .../rest/swagger/swagger.yaml                 | 22 +++++++++----------
 .../rest/test/__init__.py                     |  2 +-
 .../rest/test/test_internal_controller.py     | 13 ++++++-----
 .../rest/test/test_public_controller.py       |  4 ++--
 src/{ => aura_engine_api}/rest/util.py        |  0
 src/{ => aura_engine_api}/service.py          |  6 ++---
 src/{ => aura_engine_api}/sync.py             |  4 ++--
 src/rest/controllers/__init__.py              |  0
 src/rest/models/__init__.py                   | 13 -----------
 38 files changed, 98 insertions(+), 96 deletions(-)
 rename meta.py => src/aura_engine_api/__init__.py (100%)
 rename src/{ => aura_engine_api}/app.py (88%)
 rename src/{ => aura_engine_api/base}/__init__.py (100%)
 rename src/{ => aura_engine_api}/base/config.py (97%)
 rename src/{ => aura_engine_api}/base/logger.py (100%)
 rename src/{ => aura_engine_api}/base/node.py (100%)
 rename src/{ => aura_engine_api}/models.py (100%)
 rename src/{base => aura_engine_api/rest}/__init__.py (100%)
 rename src/{rest => aura_engine_api/rest/controllers}/__init__.py (100%)
 rename src/{ => aura_engine_api}/rest/controllers/authorization_controller.py (100%)
 rename src/{ => aura_engine_api}/rest/controllers/internal_controller.py (94%)
 rename src/{ => aura_engine_api}/rest/controllers/public_controller.py (92%)
 rename src/{ => aura_engine_api}/rest/encoder.py (90%)
 create mode 100644 src/aura_engine_api/rest/models/__init__.py
 rename src/{ => aura_engine_api}/rest/models/base_model_.py (97%)
 rename src/{ => aura_engine_api}/rest/models/clock_info.py (93%)
 rename src/{ => aura_engine_api}/rest/models/health_log.py (97%)
 rename src/{ => aura_engine_api}/rest/models/inline_response400.py (93%)
 rename src/{ => aura_engine_api}/rest/models/play_log.py (99%)
 rename src/{ => aura_engine_api}/rest/models/playlist.py (92%)
 rename src/{ => aura_engine_api}/rest/models/playlist_entry.py (98%)
 rename src/{ => aura_engine_api}/rest/models/timeslot.py (98%)
 rename src/{ => aura_engine_api}/rest/models/track.py (98%)
 rename src/{ => aura_engine_api}/rest/swagger/swagger.yaml (96%)
 rename src/{ => aura_engine_api}/rest/test/__init__.py (90%)
 rename src/{ => aura_engine_api}/rest/test/test_internal_controller.py (93%)
 rename src/{ => aura_engine_api}/rest/test/test_public_controller.py (94%)
 rename src/{ => aura_engine_api}/rest/util.py (100%)
 rename src/{ => aura_engine_api}/service.py (99%)
 rename src/{ => aura_engine_api}/sync.py (98%)
 delete mode 100644 src/rest/controllers/__init__.py
 delete mode 100644 src/rest/models/__init__.py

diff --git a/.flake8 b/.flake8
index 6ecc1f5..4fb7475 100644
--- a/.flake8
+++ b/.flake8
@@ -1,4 +1,4 @@
 [flake8]
 max-line-length = 99
-exclude = config/, python/, src/rest/, .tox/
+exclude = config/, python/, src/aura_engine_api/rest/, .tox/
 ignore = E121,E123,E126,E203,E226,E24,E704,W503,N802
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 88e0f67..9cf4eb9 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -6,7 +6,7 @@ stages:
   - release
 
 variables:
-  API_ROOT_FILE: ./src/rest/swagger/swagger.yaml
+  API_ROOT_FILE: ./src/aura_engine_api/rest/swagger/swagger.yaml
   BUNDLED_JSON_FILE: ./public/api.json
 
 .release-rules: &release-rules
diff --git a/README.md b/README.md
index afe127f..af097db 100644
--- a/README.md
+++ b/README.md
@@ -393,13 +393,13 @@ http://localhost:8008/api/v1/openapi.json
 ### Extending the API
 
 The workflow for extending the API follows the **API First** approach. This means you have to edit the API at https://app.swaggerhub.com/apis/AURA-Engine/engine-api/,
-using the SwaggerHub web editor. Then download the `python-flask` server stubs, and replace & merge the existing generated sources in `./src/rest`.
+using the SwaggerHub web editor. Then download the `python-flask` server stubs, and replace & merge the existing generated sources in `./src/aura_engine_api/rest`.
 
 All model files can usually be overwritten. Only controller and test classes need to undergo a merge action.
 
 In the future it might be favorable to use a local Codegen to generate the API artifacts.
 
-> Caveat: There is an issue with the generated source related to Python 3.8. Therefore `./src/rest/util.py` contains a workaround. Think about that when
+> Caveat: There is an issue with the generated source related to Python 3.8. Therefore `./src/aura_engine_api/rest/util.py` contains a workaround. Think about that when
 overwriting the existing file.
 
 ### Creating a local image
diff --git a/pyproject.toml b/pyproject.toml
index f961fc1..2fec27d 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -2,7 +2,7 @@
 target-version = ["py38"]
 # TODO: Use extend-exclude as soon as Debian Bookworm is released.
 exclude = '''
-    ^/src/rest/
+    ^/src/aura_engine_api/rest/
     | ^/config/
     | ^/python/
     | ^/.tox/
@@ -16,7 +16,7 @@ skip = [
     "config",
     "node_modules",
     "python",
-    "src/rest/",
+    "src/aura_engine_api/rest/",
     ".git",
     ".tox",
 ]
diff --git a/run.sh b/run.sh
index 349a237..1d47754 100755
--- a/run.sh
+++ b/run.sh
@@ -34,7 +34,7 @@ echo "[ Docker=$docker ]"
 
 # Check for the correct Python version (3.8+)
 PYTHON_EXEC="python3"
-PYTHON_BASE_DIR="."
+PYTHON_BASE_DIR="src"
 echo "[ Using $("$PYTHON_EXEC" -V) ]"
 
 
@@ -49,29 +49,29 @@ if [[ $docker == "false" ]]; then
 		source python/bin/activate
 		echo "Running Engine API in Python Environment ($("$PYTHON_EXEC" -V))"
 		echo "Starting API Server"
-		"$PYTHON_EXEC" src/app.py
+		"$PYTHON_EXEC" -m aura_engine_api.app
 	fi
 
 	### Runs the API Server (Test) ###
 
 	if [[ $mode == "api-test-0" ]]; then
 		echo "Starting API Server 0"
-		"$PYTHON_EXEC" src/app.py config=tests/config/engine-0-api.ini
+		"$PYTHON_EXEC" -m aura_engine_api.app config=tests/config/engine-0-api.ini
 	fi
 	if [[ $mode == "api-test-1" ]]; then
 		echo "Starting API Server 1"
-		"$PYTHON_EXEC" src/app.py config=tests/config/engine-1-api.ini
+		"$PYTHON_EXEC" -m aura_engine_api.app config=tests/config/engine-1-api.ini
 	fi
 	if [[ $mode == "api-test-2" ]]; then
 		echo "Starting API Server 2"
-		"$PYTHON_EXEC" src/app.py config=tests/config/engine-2-api.ini
+		"$PYTHON_EXEC" -m aura_engine_api.app config=tests/config/engine-2-api.ini
 	fi
 
 	### Runs the API Server using Gunicorn without a system daemon (Production) ###
 
 	if [[ $mode == "prod" ]]; then
 		echo "Starting API Server"
-		gunicorn -c config/gunicorn.conf.py src.app:app
+		gunicorn -c config/gunicorn.conf.py aura_engine_api.app:app
 	fi
 
 	if [[ $mode == "test" ]]; then
@@ -82,7 +82,7 @@ if [[ $docker == "false" ]]; then
 	### CAUTION: This deletes everything in your database ###
 
 	if [[ $mode == "recreate-database" ]]; then
-		"$PYTHON_EXEC" src/app.py --recreate-database
+		"$PYTHON_EXEC" -m aura_engine_api.app --recreate-database
 	fi
 
 fi
diff --git a/setup.py b/setup.py
index bd80f62..94c61f3 100644
--- a/setup.py
+++ b/setup.py
@@ -40,7 +40,7 @@ setup(
     keywords=["OpenAPI", "AURA Engine API"],
     install_requires=REQUIRES,
     packages=find_packages(),
-    package_data={"": ["src/rest/swagger/swagger.yaml"]},
+    package_data={"": ["src/aura_engine_api/rest/swagger/swagger.yaml"]},
     include_package_data=True,
     entry_points={"console_scripts": ["src.app=src.app.__main__:main"]},
     long_description="""\
diff --git a/meta.py b/src/aura_engine_api/__init__.py
similarity index 100%
rename from meta.py
rename to src/aura_engine_api/__init__.py
diff --git a/src/app.py b/src/aura_engine_api/app.py
similarity index 88%
rename from src/app.py
rename to src/aura_engine_api/app.py
index 954fb7e..507da8e 100644
--- a/src/app.py
+++ b/src/aura_engine_api/app.py
@@ -21,15 +21,14 @@ import atexit
 import sys
 
 import connexion
-
-import meta
-from base.config import AuraConfig
-from base.logger import AuraLogger
-from base.node import NodeType
-from models import db, ma
-from rest import encoder
-from service import ApiService
-from sync import SyncJob
+import aura_engine_api
+from aura_engine_api.base.config import AuraConfig
+from aura_engine_api.base.logger import AuraLogger
+from aura_engine_api.base.node import NodeType
+from aura_engine_api.models import db, ma
+from aura_engine_api.rest import encoder
+from aura_engine_api.service import ApiService
+from aura_engine_api.sync import SyncJob
 
 # Read command line parameters
 
@@ -120,7 +119,7 @@ with app.app_context():
         federation = "disabled"
     splash = (
         "\n\n        â–‘Eâ–‘Nâ–‘Gâ–‘Iâ–‘Nâ–‘Eâ–‘â–‘â–‘Aâ–‘Pâ–‘Iâ–‘ - v%s running as %s node - Federation %s.\n\n"
-        % (meta.__version__, type, federation)
+        % (aura_engine_api.__version__, type, federation)
     )
     logger.info(splash)
 
diff --git a/src/__init__.py b/src/aura_engine_api/base/__init__.py
similarity index 100%
rename from src/__init__.py
rename to src/aura_engine_api/base/__init__.py
diff --git a/src/base/config.py b/src/aura_engine_api/base/config.py
similarity index 97%
rename from src/base/config.py
rename to src/aura_engine_api/base/config.py
index cdf1c0f..e42e90f 100644
--- a/src/base/config.py
+++ b/src/aura_engine_api/base/config.py
@@ -44,8 +44,10 @@ class AuraConfig:
         Args:
             ini_path(String):      The path to the configuration file `engine-api.ini`
         """
-        default_ini_path = (
-            "%s/config/engine-api.ini" % Path(__file__).parent.parent.parent.absolute()
+        default_ini_path = os.path.join(
+            Path(__file__).parent.parent.parent.parent.absolute(),
+            "config",
+            "engine-api.ini",
         )
 
         if ini_path:
diff --git a/src/base/logger.py b/src/aura_engine_api/base/logger.py
similarity index 100%
rename from src/base/logger.py
rename to src/aura_engine_api/base/logger.py
diff --git a/src/base/node.py b/src/aura_engine_api/base/node.py
similarity index 100%
rename from src/base/node.py
rename to src/aura_engine_api/base/node.py
diff --git a/src/models.py b/src/aura_engine_api/models.py
similarity index 100%
rename from src/models.py
rename to src/aura_engine_api/models.py
diff --git a/src/base/__init__.py b/src/aura_engine_api/rest/__init__.py
similarity index 100%
rename from src/base/__init__.py
rename to src/aura_engine_api/rest/__init__.py
diff --git a/src/rest/__init__.py b/src/aura_engine_api/rest/controllers/__init__.py
similarity index 100%
rename from src/rest/__init__.py
rename to src/aura_engine_api/rest/controllers/__init__.py
diff --git a/src/rest/controllers/authorization_controller.py b/src/aura_engine_api/rest/controllers/authorization_controller.py
similarity index 100%
rename from src/rest/controllers/authorization_controller.py
rename to src/aura_engine_api/rest/controllers/authorization_controller.py
diff --git a/src/rest/controllers/internal_controller.py b/src/aura_engine_api/rest/controllers/internal_controller.py
similarity index 94%
rename from src/rest/controllers/internal_controller.py
rename to src/aura_engine_api/rest/controllers/internal_controller.py
index 93817db..412f147 100644
--- a/src/rest/controllers/internal_controller.py
+++ b/src/aura_engine_api/rest/controllers/internal_controller.py
@@ -1,14 +1,13 @@
 import connexion
 import six
-
 from dateutil.parser import parse
 from flask import current_app
 
-from src.rest.models.clock_info import ClockInfo  # noqa: E501
-from src.rest.models.health_log import HealthLog  # noqa: E501
-from src.rest.models.inline_response400 import InlineResponse400  # noqa: E501
-from src.rest.models.play_log import PlayLog  # noqa: E501
-from src.rest import util
+from aura_engine_api.rest import util
+from aura_engine_api.rest.models.clock_info import ClockInfo
+from aura_engine_api.rest.models.health_log import HealthLog
+from aura_engine_api.rest.models.inline_response400 import InlineResponse400
+from aura_engine_api.rest.models.play_log import PlayLog
 
 
 def add_playlog(body):  # noqa: E501
diff --git a/src/rest/controllers/public_controller.py b/src/aura_engine_api/rest/controllers/public_controller.py
similarity index 92%
rename from src/rest/controllers/public_controller.py
rename to src/aura_engine_api/rest/controllers/public_controller.py
index ffeea84..d09e1d1 100644
--- a/src/rest/controllers/public_controller.py
+++ b/src/aura_engine_api/rest/controllers/public_controller.py
@@ -1,9 +1,9 @@
 import connexion
 import six
-
 from flask import current_app
-from src.rest.models.track import Track  # noqa: E501
-from src.rest import util
+
+from aura_engine_api.rest import util
+from aura_engine_api.rest.models.track import Track  # noqa: E501
 
 
 def current_track():  # noqa: E501
diff --git a/src/rest/encoder.py b/src/aura_engine_api/rest/encoder.py
similarity index 90%
rename from src/rest/encoder.py
rename to src/aura_engine_api/rest/encoder.py
index 5341e85..c9769f8 100644
--- a/src/rest/encoder.py
+++ b/src/aura_engine_api/rest/encoder.py
@@ -1,7 +1,7 @@
 from connexion.apps.flask_app import FlaskJSONEncoder
 import six
 
-from src.rest.models.base_model_ import Model
+from aura_engine_api.rest.models.base_model_ import Model
 
 
 class JSONEncoder(FlaskJSONEncoder):
diff --git a/src/aura_engine_api/rest/models/__init__.py b/src/aura_engine_api/rest/models/__init__.py
new file mode 100644
index 0000000..b43f4d8
--- /dev/null
+++ b/src/aura_engine_api/rest/models/__init__.py
@@ -0,0 +1,14 @@
+# coding: utf-8
+
+# flake8: noqa
+from __future__ import absolute_import
+
+# import models into model package
+from aura_engine_api.rest.models.clock_info import ClockInfo
+from aura_engine_api.rest.models.health_log import HealthLog
+from aura_engine_api.rest.models.inline_response400 import InlineResponse400
+from aura_engine_api.rest.models.play_log import PlayLog
+from aura_engine_api.rest.models.playlist import Playlist
+from aura_engine_api.rest.models.playlist_entry import PlaylistEntry
+from aura_engine_api.rest.models.timeslot import Timeslot
+from aura_engine_api.rest.models.track import Track
diff --git a/src/rest/models/base_model_.py b/src/aura_engine_api/rest/models/base_model_.py
similarity index 97%
rename from src/rest/models/base_model_.py
rename to src/aura_engine_api/rest/models/base_model_.py
index 028910f..04e095f 100644
--- a/src/rest/models/base_model_.py
+++ b/src/aura_engine_api/rest/models/base_model_.py
@@ -2,7 +2,7 @@ import pprint
 
 import six
 
-from src.rest import util
+from aura_engine_api.rest import util
 
 
 class Model(object):
diff --git a/src/rest/models/clock_info.py b/src/aura_engine_api/rest/models/clock_info.py
similarity index 93%
rename from src/rest/models/clock_info.py
rename to src/aura_engine_api/rest/models/clock_info.py
index 8796e75..db19acf 100644
--- a/src/rest/models/clock_info.py
+++ b/src/aura_engine_api/rest/models/clock_info.py
@@ -3,13 +3,13 @@
 from __future__ import absolute_import
 from datetime import date, datetime  # noqa: F401
 
-from typing import List, Dict  # noqa: F401
+from typing import Dict, List  # noqa: F401
 
-from src.rest.models.base_model_ import Model
-from src.rest.models.play_log import PlayLog  # noqa: F401,E501
-from src.rest.models.playlist import Playlist  # noqa: F401,E501
-from src.rest.models.timeslot import Timeslot  # noqa: F401,E501
-from src.rest import util
+from aura_engine_api.rest import util
+from aura_engine_api.rest.models.base_model_ import Model
+from aura_engine_api.rest.models.play_log import PlayLog  # noqa: F401,E501
+from aura_engine_api.rest.models.playlist import Playlist  # noqa: F401,E501
+from aura_engine_api.rest.models.timeslot import Timeslot  # noqa: F401,E501
 
 
 class ClockInfo(Model):
diff --git a/src/rest/models/health_log.py b/src/aura_engine_api/rest/models/health_log.py
similarity index 97%
rename from src/rest/models/health_log.py
rename to src/aura_engine_api/rest/models/health_log.py
index 59a2102..6ec7d0b 100644
--- a/src/rest/models/health_log.py
+++ b/src/aura_engine_api/rest/models/health_log.py
@@ -5,8 +5,8 @@ from datetime import date, datetime  # noqa: F401
 
 from typing import List, Dict  # noqa: F401
 
-from src.rest.models.base_model_ import Model
-from src.rest import util
+from aura_engine_api.rest import util
+from aura_engine_api.rest.models.base_model_ import Model
 
 
 class HealthLog(Model):
diff --git a/src/rest/models/inline_response400.py b/src/aura_engine_api/rest/models/inline_response400.py
similarity index 93%
rename from src/rest/models/inline_response400.py
rename to src/aura_engine_api/rest/models/inline_response400.py
index 8428ccd..85f140e 100644
--- a/src/rest/models/inline_response400.py
+++ b/src/aura_engine_api/rest/models/inline_response400.py
@@ -5,8 +5,8 @@ from datetime import date, datetime  # noqa: F401
 
 from typing import List, Dict  # noqa: F401
 
-from src.rest.models.base_model_ import Model
-from src.rest import util
+from aura_engine_api.rest import util
+from aura_engine_api.rest.models.base_model_ import Model
 
 
 class InlineResponse400(Model):
diff --git a/src/rest/models/play_log.py b/src/aura_engine_api/rest/models/play_log.py
similarity index 99%
rename from src/rest/models/play_log.py
rename to src/aura_engine_api/rest/models/play_log.py
index 06bccb3..c344d5e 100644
--- a/src/rest/models/play_log.py
+++ b/src/aura_engine_api/rest/models/play_log.py
@@ -5,8 +5,8 @@ from datetime import date, datetime  # noqa: F401
 
 from typing import List, Dict  # noqa: F401
 
-from src.rest.models.base_model_ import Model
-from src.rest import util
+from aura_engine_api.rest import util
+from aura_engine_api.rest.models.base_model_ import Model
 
 
 class PlayLog(Model):
diff --git a/src/rest/models/playlist.py b/src/aura_engine_api/rest/models/playlist.py
similarity index 92%
rename from src/rest/models/playlist.py
rename to src/aura_engine_api/rest/models/playlist.py
index 8e29721..d66d558 100644
--- a/src/rest/models/playlist.py
+++ b/src/aura_engine_api/rest/models/playlist.py
@@ -5,9 +5,9 @@ from datetime import date, datetime  # noqa: F401
 
 from typing import List, Dict  # noqa: F401
 
-from src.rest.models.base_model_ import Model
-from src.rest.models.playlist_entry import PlaylistEntry  # noqa: F401,E501
-from src.rest import util
+from aura_engine_api.rest import util
+from aura_engine_api.rest.models.base_model_ import Model
+from aura_engine_api.rest.models.playlist_entry import PlaylistEntry  # noqa: F401,E501
 
 
 class Playlist(Model):
diff --git a/src/rest/models/playlist_entry.py b/src/aura_engine_api/rest/models/playlist_entry.py
similarity index 98%
rename from src/rest/models/playlist_entry.py
rename to src/aura_engine_api/rest/models/playlist_entry.py
index aaf6566..a82b7f7 100644
--- a/src/rest/models/playlist_entry.py
+++ b/src/aura_engine_api/rest/models/playlist_entry.py
@@ -5,8 +5,8 @@ from datetime import date, datetime  # noqa: F401
 
 from typing import List, Dict  # noqa: F401
 
-from src.rest.models.base_model_ import Model
-from src.rest import util
+from aura_engine_api.rest import util
+from aura_engine_api.rest.models.base_model_ import Model
 
 
 class PlaylistEntry(Model):
diff --git a/src/rest/models/timeslot.py b/src/aura_engine_api/rest/models/timeslot.py
similarity index 98%
rename from src/rest/models/timeslot.py
rename to src/aura_engine_api/rest/models/timeslot.py
index 4aea4e3..d94bea3 100644
--- a/src/rest/models/timeslot.py
+++ b/src/aura_engine_api/rest/models/timeslot.py
@@ -5,8 +5,8 @@ from datetime import date, datetime  # noqa: F401
 
 from typing import List, Dict  # noqa: F401
 
-from src.rest.models.base_model_ import Model
-from src.rest import util
+from aura_engine_api.rest import util
+from aura_engine_api.rest.models.base_model_ import Model
 
 
 class Timeslot(Model):
diff --git a/src/rest/models/track.py b/src/aura_engine_api/rest/models/track.py
similarity index 98%
rename from src/rest/models/track.py
rename to src/aura_engine_api/rest/models/track.py
index 5422089..7fa5249 100644
--- a/src/rest/models/track.py
+++ b/src/aura_engine_api/rest/models/track.py
@@ -5,8 +5,8 @@ from datetime import date, datetime  # noqa: F401
 
 from typing import List, Dict  # noqa: F401
 
-from src.rest.models.base_model_ import Model
-from src.rest import util
+from aura_engine_api.rest import util
+from aura_engine_api.rest.models.base_model_ import Model
 
 
 class Track(Model):
diff --git a/src/rest/swagger/swagger.yaml b/src/aura_engine_api/rest/swagger/swagger.yaml
similarity index 96%
rename from src/rest/swagger/swagger.yaml
rename to src/aura_engine_api/rest/swagger/swagger.yaml
index a847f0c..023c954 100644
--- a/src/rest/swagger/swagger.yaml
+++ b/src/aura_engine_api/rest/swagger/swagger.yaml
@@ -96,7 +96,7 @@ paths:
                 x-content-type: application/json
         "400":
           description: bad input parameter
-      x-openapi-router-controller: src.rest.controllers.public_controller
+      x-openapi-router-controller: aura_engine_api.rest.controllers.public_controller
   /trackservice/current:
     get:
       tags:
@@ -114,7 +114,7 @@ paths:
                 $ref: '#/components/schemas/Track'
         "400":
           description: bad input parameter
-      x-openapi-router-controller: src.rest.controllers.public_controller
+      x-openapi-router-controller: aura_engine_api.rest.controllers.public_controller
   /clock:
     get:
       tags:
@@ -132,7 +132,7 @@ paths:
                 $ref: '#/components/schemas/ClockInfo'
         "400":
           description: bad input parameter
-      x-openapi-router-controller: src.rest.controllers.internal_controller
+      x-openapi-router-controller: aura_engine_api.rest.controllers.internal_controller
     put:
       tags:
       - internal
@@ -152,7 +152,7 @@ paths:
           description: status updated
         "400":
           description: bad input parameter
-      x-openapi-router-controller: src.rest.controllers.internal_controller
+      x-openapi-router-controller: aura_engine_api.rest.controllers.internal_controller
   /playlog:
     get:
       tags:
@@ -223,7 +223,7 @@ paths:
                 x-content-type: application/json
         "400":
           description: bad input parameter
-      x-openapi-router-controller: src.rest.controllers.internal_controller
+      x-openapi-router-controller: aura_engine_api.rest.controllers.internal_controller
     post:
       tags:
       - internal
@@ -246,7 +246,7 @@ paths:
             application/json:
               schema:
                 $ref: '#/components/schemas/inline_response_400'
-      x-openapi-router-controller: src.rest.controllers.internal_controller
+      x-openapi-router-controller: aura_engine_api.rest.controllers.internal_controller
   /playlog/report/{year_month}:
     get:
       tags:
@@ -276,7 +276,7 @@ paths:
                 x-content-type: application/json
         "400":
           description: bad input parameter
-      x-openapi-router-controller: src.rest.controllers.internal_controller
+      x-openapi-router-controller: aura_engine_api.rest.controllers.internal_controller
   /source/active:
     get:
       tags:
@@ -295,7 +295,7 @@ paths:
                 x-content-type: application/json
         "400":
           description: bad input parameter
-      x-openapi-router-controller: src.rest.controllers.internal_controller
+      x-openapi-router-controller: aura_engine_api.rest.controllers.internal_controller
   /source/active/{number}:
     put:
       tags:
@@ -320,7 +320,7 @@ paths:
           description: status updated
         "400":
           description: bad input parameter
-      x-openapi-router-controller: src.rest.controllers.internal_controller
+      x-openapi-router-controller: aura_engine_api.rest.controllers.internal_controller
   /source/health/{number}:
     get:
       tags:
@@ -349,7 +349,7 @@ paths:
                 $ref: '#/components/schemas/HealthLog'
         "400":
           description: bad input parameter
-      x-openapi-router-controller: src.rest.controllers.internal_controller
+      x-openapi-router-controller: aura_engine_api.rest.controllers.internal_controller
     post:
       tags:
       - internal
@@ -378,7 +378,7 @@ paths:
           description: health info logged
         "400":
           description: bad input parameter
-      x-openapi-router-controller: src.rest.controllers.internal_controller
+      x-openapi-router-controller: aura_engine_api.rest.controllers.internal_controller
 components:
   schemas:
     Track:
diff --git a/src/rest/test/__init__.py b/src/aura_engine_api/rest/test/__init__.py
similarity index 90%
rename from src/rest/test/__init__.py
rename to src/aura_engine_api/rest/test/__init__.py
index 5419f12..66b15d5 100644
--- a/src/rest/test/__init__.py
+++ b/src/aura_engine_api/rest/test/__init__.py
@@ -3,7 +3,7 @@ import logging
 import connexion
 from flask_testing import TestCase
 
-from src.rest.encoder import JSONEncoder
+from aura_engine_api.rest.encoder import JSONEncoder
 
 
 class BaseTestCase(TestCase):
diff --git a/src/rest/test/test_internal_controller.py b/src/aura_engine_api/rest/test/test_internal_controller.py
similarity index 93%
rename from src/rest/test/test_internal_controller.py
rename to src/aura_engine_api/rest/test/test_internal_controller.py
index 87c9e7a..0c5558c 100644
--- a/src/rest/test/test_internal_controller.py
+++ b/src/aura_engine_api/rest/test/test_internal_controller.py
@@ -17,17 +17,18 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
-
 from __future__ import absolute_import
 
 from flask import json
 from six import BytesIO
 
-from src.rest.models.clock_info import ClockInfo  # noqa: E501
-from src.rest.models.health_log import HealthLog  # noqa: E501
-from src.rest.models.inline_response400 import InlineResponse400  # noqa: E501
-from src.rest.models.play_log import PlayLog  # noqa: E501
-from src.rest.test import BaseTestCase
+from aura_engine_api.rest.models.clock_info import ClockInfo  # noqa: E501
+from aura_engine_api.rest.models.health_log import HealthLog  # noqa: E501
+from aura_engine_api.rest.models.inline_response400 import (  # noqa: E501
+    InlineResponse400,
+)
+from aura_engine_api.rest.models.play_log import PlayLog  # noqa: E501
+from aura_engine_api.rest.test import BaseTestCase
 
 
 class TestInternalController(BaseTestCase):
diff --git a/src/rest/test/test_public_controller.py b/src/aura_engine_api/rest/test/test_public_controller.py
similarity index 94%
rename from src/rest/test/test_public_controller.py
rename to src/aura_engine_api/rest/test/test_public_controller.py
index 1022a0a..de9603b 100644
--- a/src/rest/test/test_public_controller.py
+++ b/src/aura_engine_api/rest/test/test_public_controller.py
@@ -22,8 +22,8 @@ from __future__ import absolute_import
 from flask import json
 from six import BytesIO
 
-from src.rest.models.track import Track  # noqa: E501
-from src.rest.test import BaseTestCase
+from aura_engine_api.rest.models.track import Track  # noqa: E501
+from aura_engine_api.rest.test import BaseTestCase
 
 
 class TestPublicController(BaseTestCase):
diff --git a/src/rest/util.py b/src/aura_engine_api/rest/util.py
similarity index 100%
rename from src/rest/util.py
rename to src/aura_engine_api/rest/util.py
diff --git a/src/service.py b/src/aura_engine_api/service.py
similarity index 99%
rename from src/service.py
rename to src/aura_engine_api/service.py
index 04df1d3..efdaf23 100644
--- a/src/service.py
+++ b/src/aura_engine_api/service.py
@@ -23,8 +23,8 @@ import requests
 import sqlalchemy
 from dateutil.parser import parse
 
-from base.node import NodeType
-from models import (
+from aura_engine_api.base.node import NodeType
+from aura_engine_api.models import (
     ActivityLog,
     ClockInfo,
     ClockInfoSchema,
@@ -34,7 +34,7 @@ from models import (
     PlayLogSchema,
     TrackSchema,
 )
-from rest import util
+from aura_engine_api.rest import util
 
 
 class ApiService:
diff --git a/src/sync.py b/src/aura_engine_api/sync.py
similarity index 98%
rename from src/sync.py
rename to src/aura_engine_api/sync.py
index 7dd7f4a..bde729b 100644
--- a/src/sync.py
+++ b/src/aura_engine_api/sync.py
@@ -25,8 +25,8 @@ from sqlalchemy import create_engine
 from sqlalchemy.exc import IntegrityError, InvalidRequestError
 from sqlalchemy.orm import scoped_session, sessionmaker
 
-from models import ActivityLog, PlayLog
-from rest.models.play_log import PlayLog as PlayLogAPI
+from aura_engine_api.models import ActivityLog, PlayLog
+from aura_engine_api.rest.models.play_log import PlayLog as PlayLogAPI
 
 
 class SyncJob(threading.Thread):
diff --git a/src/rest/controllers/__init__.py b/src/rest/controllers/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/src/rest/models/__init__.py b/src/rest/models/__init__.py
deleted file mode 100644
index 7330bd7..0000000
--- a/src/rest/models/__init__.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# coding: utf-8
-
-# flake8: noqa
-from __future__ import absolute_import
-# import models into model package
-from src.rest.models.clock_info import ClockInfo
-from src.rest.models.health_log import HealthLog
-from src.rest.models.inline_response400 import InlineResponse400
-from src.rest.models.play_log import PlayLog
-from src.rest.models.playlist import Playlist
-from src.rest.models.playlist_entry import PlaylistEntry
-from src.rest.models.timeslot import Timeslot
-from src.rest.models.track import Track
-- 
GitLab