from importlib import import_module from django.conf import settings from django.urls import path, include from django.core.exceptions import ImproperlyConfigured class LectureManager: install_lectures = {} def __init__(self, *args, **kwargs): self.install_lectures = {} self.install_lectures_urls = [] self._setup() def _setup(self): # import Lecture from settings.INSTALLED_LECTURES # raise exception if `.lecture.Lectrue` is not found # keep silent if `.urls` is not found for l_type, l_app in settings.INSTALLED_LECTURES.items(): try: lecture_adapter = getattr( import_module('{}.lecture'.format(l_app)), 'lecture_adapter' ) self.install_lectures[l_type] = lecture_adapter except ImportError: raise ImproperlyConfigured( 'Did not found `lecture.Lecture` in {}'.format(l_app)) try: import_module('{}.urls'.format(l_app)) self.install_lectures_urls.append( path('{}/'.format(l_type), include('{}.urls'.format(l_app)))) except ImportError: pass @property def urls(self): urlpatterns = self.install_lectures_urls return urlpatterns, 'lecture', 'lecture' lecture_manager = LectureManager()