From 99a4cacdbec26355d850eff3845a9d6a94dc0739 Mon Sep 17 00:00:00 2001 From: julian Date: Fri, 18 Mar 2022 18:12:10 +0100 Subject: [PATCH 1/2] refactor: remove launcher pseudo-app Removes launcher pseudo app and solely relies on omap.py to start the platform --- manage.py | 22 --------- omap.py | 2 +- omap/launcher/__init__.py | 0 omap/launcher/urls.py | 37 --------------- .../settings.py => modules/base_settings.py} | 2 - omap/modules/module_urls.py | 46 +++++++++++++++++++ omap/modules/modules.py | 3 ++ 7 files changed, 50 insertions(+), 62 deletions(-) delete mode 100755 manage.py delete mode 100644 omap/launcher/__init__.py delete mode 100644 omap/launcher/urls.py rename omap/{launcher/settings.py => modules/base_settings.py} (98%) create mode 100644 omap/modules/module_urls.py diff --git a/manage.py b/manage.py deleted file mode 100755 index 2cb2d49..0000000 --- a/manage.py +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env python -"""Django's command-line utility for administrative tasks.""" -import os -import sys - - -def main(): - """Run administrative tasks.""" - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "omap.launcher.settings") - try: - from django.core.management import execute_from_command_line - except ImportError as exc: - raise ImportError( - "Couldn't import Django. Are you sure it's installed and " - "available on your PYTHONPATH environment variable? Did you " - "forget to activate a virtual environment?" - ) from exc - execute_from_command_line(sys.argv) - - -if __name__ == "__main__": - main() diff --git a/omap.py b/omap.py index 89ca781..76269d0 100755 --- a/omap.py +++ b/omap.py @@ -8,7 +8,7 @@ def main(): """Run administrative tasks.""" - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "omap.launcher.settings") + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "omap.modules.base_settings") # Here we set the OMAP_MODULES env varible, if not set os.environ.setdefault("OMAP_MODULES", "") diff --git a/omap/launcher/__init__.py b/omap/launcher/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/omap/launcher/urls.py b/omap/launcher/urls.py deleted file mode 100644 index cb66a53..0000000 --- a/omap/launcher/urls.py +++ /dev/null @@ -1,37 +0,0 @@ -import importlib -import logging - -from django.apps import apps -from django.conf import settings -from django.conf.urls import url, include -from django.conf.urls.static import static -from django.contrib import admin -from django.urls import path - -urlpatterns = [url(r"admin/", admin.site.urls)] + ( - static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) - if settings.MEDIA_ROOT - else [] -) - -""" -Here, apps are registered automatically with their urls if they have a property "url_prefix" set in their AppConfig -AND if they have a valid urls.py file which sets a variable urlpatterns -""" -for config in apps.get_app_configs(): - if hasattr(config, "url_prefix"): - logging.debug(f"Found url_prefix in {config.name}, checking for .urls module") - urls_path = config.module.__name__ + ".urls" - try: - mod = importlib.import_module(urls_path) - except ModuleNotFoundError: - logging.debug(f"No url module found under {urls_path}", exc_info=True) - continue - - logging.debug( - f"urls.py present under {urls_path}, setting for prefix {config.url_prefix}" - ) - # Do the include - urlpatterns.append(path(config.url_prefix + "/", include(urls_path))) - -logging.debug(f"Patterns: {urlpatterns}") diff --git a/omap/launcher/settings.py b/omap/modules/base_settings.py similarity index 98% rename from omap/launcher/settings.py rename to omap/modules/base_settings.py index a86160a..c58f4eb 100644 --- a/omap/launcher/settings.py +++ b/omap/modules/base_settings.py @@ -111,5 +111,3 @@ INTERNAL_IPS = [ "127.0.0.1", ] - -ROOT_URLCONF = "omap.launcher.urls" diff --git a/omap/modules/module_urls.py b/omap/modules/module_urls.py new file mode 100644 index 0000000..fb17fd0 --- /dev/null +++ b/omap/modules/module_urls.py @@ -0,0 +1,46 @@ +import importlib +import logging + +from django.apps import apps +from django.conf import settings +from django.conf.urls import url, include +from django.conf.urls.static import static +from django.contrib import admin +from django.urls import path + + +def dynamic_url(): + _urlpatterns = [url(r"admin/", admin.site.urls)] + ( + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + if settings.MEDIA_ROOT + else [] + ) + + """ + Here, apps are registered automatically with their urls if they have a property "url_prefix" set in their AppConfig + AND if they have a valid urls.py file which sets a variable urlpatterns + """ + for config in apps.get_app_configs(): + if hasattr(config, "url_prefix"): + logging.debug( + f"Found url_prefix in {config.name}, checking for .urls module" + ) + urls_path = config.module.__name__ + ".urls" + try: + importlib.import_module(urls_path) + except ModuleNotFoundError: + logging.debug(f"No url module found under {urls_path}", exc_info=True) + continue + + logging.debug( + f"urls.py present under {urls_path}, setting for prefix {config.url_prefix}" + ) + # Do the include + _urlpatterns.append(path(config.url_prefix + "/", include(urls_path))) + + logging.debug(f"Patterns: {_urlpatterns}") + + return _urlpatterns + + +urlpatterns = dynamic_url() diff --git a/omap/modules/modules.py b/omap/modules/modules.py index 2c5c17f..6c5702a 100644 --- a/omap/modules/modules.py +++ b/omap/modules/modules.py @@ -253,6 +253,9 @@ def configure_modules(): merged.update({"INSTALLED_APPS": merged_apps}) merged.update({"CONSTANCE_CONFIG": merged_constance}) + # TEST for dynamic urls + merged.update({"ROOT_URLCONF": "omap.modules.module_urls"}) + settings.configure(**merged) # Now modify the INSTALLED_APPS for all apps that contain a urls.py file From fff62f21f130e3e2308f517434fd587d435834c8 Mon Sep 17 00:00:00 2001 From: julian Date: Mon, 21 Mar 2022 15:33:51 +0100 Subject: [PATCH 2/2] Added conftest to make tests run again --- conftest.py | 13 +++++++++++++ pytest.ini | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 conftest.py diff --git a/conftest.py b/conftest.py new file mode 100644 index 0000000..00390bc --- /dev/null +++ b/conftest.py @@ -0,0 +1,13 @@ +import os + + +def pytest_configure(): + """ + We have to use this custom loading for the django "context" + as we have no settings.py + """ + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "omap.modules.base_settings") + os.environ.setdefault("OMAP_MODULES", "omap_core") + from omap.modules import modules + + modules.configure_modules() diff --git a/pytest.ini b/pytest.ini index 6b738e7..88e92a3 100644 --- a/pytest.ini +++ b/pytest.ini @@ -1,5 +1,5 @@ [pytest] -DJANGO_SETTINGS_MODULE = omap.launcher.settings +;DJANGO_SETTINGS_MODULE = omap.launcher.settings testpaths = omap