diff --git a/admin2/mixins.py b/admin2/mixins.py index b3d34f9..fa85139 100644 --- a/admin2/mixins.py +++ b/admin2/mixins.py @@ -59,6 +59,7 @@ class Admin2ViewMixin(object): return apps def set_admin2_base(self): + # TODO - probably delete """ Sets a number of commonly used attributes """ if hasattr(self, "app_label"): # prevents us from calling this multiple times @@ -74,6 +75,7 @@ class Admin2ViewMixin(object): self.models = import_module(self.model_name) def set_admin2(self): + # TODO - probably delete """ Returns the Admin2 object for an app_label/document_name style view """ if hasattr(self, "admin2"): @@ -91,6 +93,7 @@ class Admin2ViewMixin(object): if not hasattr(self, "admin2"): raise NoAdmin2Specified("No admin2 for {0}.{1}".format(self.app_label, self.document_name)) + def set_permissions_in_context(self, context={}): """ Provides permissions for admin2 for use in the context""" diff --git a/admin2/urls.py b/admin2/urls.py index 8bf011e..e7fc519 100644 --- a/admin2/urls.py +++ b/admin2/urls.py @@ -14,6 +14,8 @@ urlpatterns = patterns('', view=views.IndexView.as_view(), name="index" ), + +""" url( regex=r'^(?P[_\-\w]+)/(?P[_\-\w]+)/$', view=views.ModelListView.as_view(), @@ -39,4 +41,5 @@ urlpatterns = patterns('', view=views.ModelDeleteView.as_view(), name="model_delete" ) +""" ) \ No newline at end of file diff --git a/admin2/utils.py b/admin2/utils.py new file mode 100644 index 0000000..ebb982c --- /dev/null +++ b/admin2/utils.py @@ -0,0 +1,36 @@ +from django.conf import settings +from django.utils.importlib import import_module + + +class AppStore(object): + + def __init__(self, module): + self.models = [] + for key in module.__dict__.keys(): + model_candidate = getattr(module, key) + if hasattr(model_candidate, 'admin2'): + self.add_model(model_candidate) + + def add_model(self, model): + model.name = model.__name__ + self.models.append(model) + + +def get_admin2s(self): + """ Returns a list of all admin2 implementations for the site """ + apps = [] + for app_name in settings.INSTALLED_APPS: + admin2 = "{0}.admin2".format(app_name) + try: + module = import_module(admin2) + except ImportError as e: + if str(e) == "No module named admin2": + continue + raise e + + app_store = AppStore(module) + apps.append(dict( + app_name=app_name, + obj=app_store + )) + return apps diff --git a/admin2/views.py b/admin2/views.py new file mode 100644 index 0000000..fbcdfaa --- /dev/null +++ b/admin2/views.py @@ -0,0 +1,18 @@ +from os import join + +from django.conf import settings +from django.views.generic import ListView + +from braces.views import LoginRequiredMixin, StaffuserRequiredMixin +from .utils import get_admin2s + +ADMIN2_THEME_DIRECTORY = settings.get("ADMIN2_THEME_DIRECTORY", "admin2/bootstrap") + + +class IndexView(LoginRequiredMixin, StaffuserRequiredMixin, ListView): + + def get_template_name(self): + return join(ADMIN2_THEME_DIRECTORY, "index.html") + + def get_queryset(self): + return get_admin2s()