diff --git a/nexus/modules.py b/nexus/modules.py index 7ef4987..78a8f24 100644 --- a/nexus/modules.py +++ b/nexus/modules.py @@ -27,11 +27,10 @@ class NexusModule(object): # list of active sites within process _globals = {} - def __init__(self, site, category=None, name=None, app_name=None): + def __init__(self, site, category=None, name=None): self.category = category self.site = site self.name = name - self.app_name = app_name # Set up default logging for this module if not self.logger_name: @@ -118,13 +117,11 @@ def get_urls(self): return patterns('') def urls(self): - if self.app_name and self.name: - return self.get_urls(), self.app_name, self.name + if self.name: + return self.get_urls(), self.name, self.name return self.get_urls() - urls = property(urls) - def get_trail(self, request): return [ (self.get_title(), self.get_home_url(request)), @@ -132,8 +129,8 @@ def get_trail(self, request): def get_home_url(self, request): if self.home_url: - if self.app_name: - home_url_name = '%s:%s' % (self.app_name, self.home_url) + if self.name: + home_url_name = '%s:%s' % (self.name, self.home_url) else: home_url_name = self.home_url diff --git a/nexus/nexus_modules.py b/nexus/nexus_modules.py deleted file mode 100644 index fb633ea..0000000 --- a/nexus/nexus_modules.py +++ /dev/null @@ -1,167 +0,0 @@ -import nexus - -from django.conf import settings -from django.contrib import admin -from django.core.urlresolvers import reverse -from django.http import HttpResponseRedirect - -def make_nexus_model_admin(model_admin): - class NexusModelAdmin(model_admin.__class__): - delete_selected_confirmation_template = 'nexus/admin/delete_selected_confirmation.html' - - def render_change_form(self, request, context, add=False, change=False, form_url='', obj=None): - opts = self.model._meta - app_label = opts.app_label - - self.add_form_template = self.change_form_template = ( - 'nexus/admin/%s/%s/change_form.html' % (app_label, opts.object_name.lower()), - 'nexus/admin/%s/change_form.html' % app_label, - 'nexus/admin/change_form.html', - ) - - extra_context = self.admin_site.get_context(request) - del extra_context['title'] - - context.update(extra_context) - return super(NexusModelAdmin, self).render_change_form(request, context, add, change, form_url, obj) - - def changelist_view(self, request, extra_context=None): - opts = self.model._meta - app_label = opts.app_label - - self.change_list_template = ( - 'nexus/admin/%s/%s/change_list.html' % (app_label, opts.object_name.lower()), - 'nexus/admin/%s/change_list.html' % app_label, - 'nexus/admin/change_list.html' - ) - - if not extra_context: - extra_context = self.admin_site.get_context(request) - else: - extra_context.update(self.admin_site.get_context(request)) - - del extra_context['title'] - return super(NexusModelAdmin, self).changelist_view(request, extra_context) - - def delete_view(self, request, object_id, extra_context=None): - opts = self.model._meta - app_label = opts.app_label - - self.delete_confirmation_template = ( - 'nexus/admin/%s/%s/delete_confirmation.html' % (app_label, opts.object_name.lower()), - 'nexus/admin/%s/delete_confirmation.html' % app_label, - 'nexus/admin/delete_confirmation.html' - ) - - if not extra_context: - extra_context = self.admin_site.get_context(request) - else: - extra_context.update(self.admin_site.get_context(request)) - - del extra_context['title'] - return super(NexusModelAdmin, self).delete_view(request, object_id, extra_context) - - def history_view(self, request, object_id, extra_context=None): - opts = self.model._meta - app_label = opts.app_label - - self.object_history_template = ( - 'nexus/admin/%s/%s/object_history.html' % (app_label, opts.object_name.lower()), - 'nexus/admin/%s/object_history.html' % app_label, - 'nexus/admin/object_history.html' - ) - - if not extra_context: - extra_context = self.admin_site.get_context(request) - else: - extra_context.update(self.admin_site.get_context(request)) - - del extra_context['title'] - return super(NexusModelAdmin, self).history_view(request, object_id, extra_context) - return NexusModelAdmin - -def make_nexus_admin_site(admin_site): - class NexusAdminSite(admin_site.__class__): - index_template = 'nexus/admin/index.html' - app_index_template = None - password_change_template = 'nexus/admin/password_change_form.html' - password_change_done_template = 'nexus/admin/password_change_done.html' - - def has_permission(self, request): - return self.module.site.has_permission(request) - - def get_context(self, request): - context = self.module.get_context(request) - context.update(self.module.site.get_context(request)) - return context - - def index(self, request, extra_context=None): - return super(NexusAdminSite, self).index(request, self.get_context(request)) - - def app_index(self, request, app_label, extra_context=None): - self.app_index_template = ( - 'nexus/admin/%s/app_index.html' % app_label, - 'nexus/admin/app_index.html' - ) - return super(NexusAdminSite, self).app_index(request, app_label, self.get_context(request)) - - def password_change(self, request): - from django.contrib.auth.forms import PasswordChangeForm - if self.root_path is not None: - post_change_redirect = '%spassword_change/done/' % self.root_path - else: - post_change_redirect = reverse('admin:password_change_done', current_app=self.name) - - if request.method == "POST": - form = PasswordChangeForm(user=request.user, data=request.POST) - if form.is_valid(): - form.save() - return HttpResponseRedirect(post_change_redirect) - else: - form = PasswordChangeForm(user=request.user) - - return self.module.render_to_response(self.password_change_template, { - 'form': form, - }, request) - - def password_change_done(self, request): - return self.module.render_to_response(self.password_change_done_template, {}, request) - return NexusAdminSite - - -def make_admin_module(admin_site, name=None, app_name='admin'): - # XXX: might be a better API so we dont need to do this? - new_site = make_nexus_admin_site(admin_site)(name, app_name) - for model, admin in admin_site._registry.iteritems(): - new_site.register(model, make_nexus_model_admin(admin)) - - class AdminModule(nexus.NexusModule): - home_url = 'index' - admin_site = new_site - - def __init__(self, *args, **kwargs): - super(AdminModule, self).__init__(*args, **kwargs) - self.app_name = new_site.app_name - self.name = new_site.name - new_site.module = self - # new_site.name = self.site.name - - def get_urls(self): - return self.admin_site.get_urls() - - def urls(self): - return self.admin_site.urls[0], self.app_name, self.name - - urls = property(urls) - - def get_title(self): - return 'Model Admin' - - def render_on_dashboard(self, request): - return self.render_to_string('nexus/admin/dashboard/index.html', { - 'base_url': './' + self.app_name + '/' - }, request) - return AdminModule - -if 'django.contrib.admin' in settings.INSTALLED_APPS: - nexus.site.register(make_admin_module(admin.site, admin.site.name, admin.site.app_name), admin.site.app_name) \ No newline at end of file diff --git a/nexus/sites.py b/nexus/sites.py index ba3fe97..9898f24 100644 --- a/nexus/sites.py +++ b/nexus/sites.py @@ -56,14 +56,13 @@ def process_view(self, request, callback, callback_args, callback_kwargs): class NexusSite(object): - def __init__(self, name=None, app_name='nexus'): + def __init__(self, name=None): self._registry = {} self._categories = SortedDict() if name is None: self.name = 'nexus' else: self.name = name - self.app_name = app_name def register_category(self, category, label, index=None): if index: @@ -76,7 +75,7 @@ def register(self, module, namespace=None, category=None): if not namespace: namespace = module.get_namespace() if namespace: - module.app_name = module.name = namespace + module.name = namespace self._registry[namespace] = (module, category) return module @@ -86,25 +85,24 @@ def unregister(self, namespace): def get_urls(self): try: - from django.conf.urls import patterns, url, include + from django.conf.urls import url, include except ImportError: # Django<=1.4 - from django.conf.urls.defaults import patterns, url, include + from django.conf.urls.defaults import url, include - base_urls = patterns('', + base_urls = [ url(r'^media/(?P[^/]+)/(?P.+)$', self.media, name='media'), - url(r'^$', self.as_view(self.dashboard), name='index'), url(r'^login/$', self.login, name='login'), - url(r'^logout/$', self.as_view(self.logout), name='logout'), - ), self.app_name, self.name + url(r'^logout/$', self.as_view(self.logout), name='logout') + ] - urlpatterns = patterns('', - url(r'^', include(base_urls)), - ) + urlpatterns = [ + url(r'^', include(base_urls, namespace=self.name, app_name=self.name)) + ] for namespace, module in self.get_modules(): - urlpatterns += patterns('', - url(r'^%s/' % namespace, include(module.urls)), - ) + urlpatterns += [ + url(r'^%s/' % namespace, include(module.urls)) + ] return urlpatterns diff --git a/setup.py b/setup.py index 9865161..c8fcdc2 100644 --- a/setup.py +++ b/setup.py @@ -17,7 +17,7 @@ def run(self, *args, **kwargs): setup( name='nexus', - version='0.3.1', + version='0.3.1.sm0', author='Disqus', author_email='opensource@disqus.com', url='https://github.com/disqus/nexus',