dynamic load of apps/urls/databases
This commit is contained in:
parent
314e7c8d60
commit
b22a8ec607
@ -1,4 +1,4 @@
|
||||
from api_player.models import GuiSettings, MessengePresets
|
||||
from apps.api_player.models import GuiSettings, MessengePresets
|
||||
from django.contrib import admin
|
||||
|
||||
|
11
ffplayout/apps/api_player/db.py
Normal file
11
ffplayout/apps/api_player/db.py
Normal file
@ -0,0 +1,11 @@
|
||||
import os
|
||||
|
||||
BASE_DIR = os.path.dirname(os.path.abspath(os.path.join(__file__)))
|
||||
|
||||
class Connector:
|
||||
config = {
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.sqlite3',
|
||||
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
from api_player.models import GuiSettings, MessengePresets
|
||||
from apps.api_player.models import GuiSettings, MessengePresets
|
||||
from django.contrib.auth.models import User
|
||||
from rest_framework import serializers
|
||||
|
@ -8,7 +8,7 @@ import psutil
|
||||
|
||||
import yaml
|
||||
import zmq
|
||||
from api_player.models import GuiSettings
|
||||
from apps.api_player.models import GuiSettings
|
||||
from django.conf import settings
|
||||
from natsort import natsorted
|
||||
from pymediainfo import MediaInfo
|
@ -2,8 +2,8 @@ import os
|
||||
import shutil
|
||||
from urllib.parse import unquote
|
||||
|
||||
from api_player.models import GuiSettings, MessengePresets
|
||||
from api_player.serializers import (GuiSettingsSerializer, MessengerSerializer,
|
||||
from apps.api_player.models import GuiSettings, MessengePresets
|
||||
from apps.api_player.serializers import (GuiSettingsSerializer, MessengerSerializer,
|
||||
UserSerializer)
|
||||
from django.contrib.auth.models import User
|
||||
from django_filters import rest_framework as filters
|
@ -12,6 +12,7 @@ https://docs.djangoproject.com/en/3.0/ref/settings/
|
||||
|
||||
import os
|
||||
from datetime import timedelta
|
||||
from pydoc import locate
|
||||
|
||||
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
||||
BASE_DIR = os.path.dirname(
|
||||
@ -28,8 +29,7 @@ INSTALLED_APPS = [
|
||||
'django.contrib.staticfiles',
|
||||
'django_filters',
|
||||
'rest_framework',
|
||||
'corsheaders',
|
||||
'api_player'
|
||||
'corsheaders'
|
||||
]
|
||||
|
||||
MIDDLEWARE = [
|
||||
@ -67,12 +67,7 @@ WSGI_APPLICATION = 'ffplayout.wsgi.application'
|
||||
# Database
|
||||
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases
|
||||
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.sqlite3',
|
||||
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
|
||||
}
|
||||
}
|
||||
DATABASES = {}
|
||||
|
||||
|
||||
# Password validation
|
||||
@ -114,6 +109,24 @@ USE_L10N = True
|
||||
USE_TZ = True
|
||||
|
||||
|
||||
# dynamic app loader
|
||||
APPS_DIR = os.path.join(BASE_DIR, 'apps/')
|
||||
|
||||
for dir in os.listdir(APPS_DIR):
|
||||
if os.path.isdir(os.path.join(APPS_DIR, dir)):
|
||||
app_name = 'apps.{}'.format(dir)
|
||||
|
||||
if app_name not in INSTALLED_APPS:
|
||||
# add app to installed apps
|
||||
INSTALLED_APPS += (app_name, )
|
||||
|
||||
if os.path.isfile(os.path.join(APPS_DIR, dir, 'db.py')):
|
||||
db_conn = locate('{}.db.Connector.config'.format(app_name))
|
||||
|
||||
if list(db_conn.keys())[0] not in DATABASES:
|
||||
# add app db to DATABASES
|
||||
DATABASES.update(db_conn)
|
||||
|
||||
# Static files (CSS, JavaScript, Images)
|
||||
# https://docs.djangoproject.com/en/3.0/howto/static-files/
|
||||
|
||||
|
@ -13,14 +13,15 @@ Including another URLconf
|
||||
1. Import the include() function: from django.urls import include, path
|
||||
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
||||
"""
|
||||
import os
|
||||
from django.contrib import admin
|
||||
from django.conf import settings
|
||||
from django.urls import include, path
|
||||
from rest_framework_simplejwt.views import (TokenObtainPairView,
|
||||
TokenRefreshView)
|
||||
|
||||
urlpatterns = [
|
||||
path('admin/', admin.site.urls),
|
||||
path('api/', include('api_player.urls', namespace='api_player')),
|
||||
path('api-auth/', include(
|
||||
'rest_framework.urls', namespace='rest_framework')),
|
||||
path('auth/token/', TokenObtainPairView.as_view(),
|
||||
@ -28,3 +29,16 @@ urlpatterns = [
|
||||
path('auth/token/refresh/', TokenRefreshView.as_view(),
|
||||
name='token_refresh')
|
||||
]
|
||||
|
||||
|
||||
# dynamic url loader
|
||||
for dir in os.listdir(settings.APPS_DIR):
|
||||
if os.path.isdir(os.path.join(settings.APPS_DIR, dir)):
|
||||
app_name = 'apps.{}'.format(dir)
|
||||
|
||||
_path = path('api/', include(
|
||||
'{}.urls'.format(app_name),
|
||||
namespace='{}'.format(app_name.split('.')[1])))
|
||||
|
||||
if _path not in urlpatterns:
|
||||
urlpatterns += (_path, )
|
||||
|
Loading…
x
Reference in New Issue
Block a user