From a4a17e3cf473e5da2fbbc979f020267d78cad679 Mon Sep 17 00:00:00 2001 From: hisham waleed karam Date: Tue, 15 Jan 2019 15:41:10 +0200 Subject: [PATCH] improve app urls in templates --- cartoview/app_manager/models.py | 60 +++++++++++++++++++ .../templates/app_manager/apps.html | 7 ++- cartoview/app_manager/views.py | 20 ------- 3 files changed, 65 insertions(+), 22 deletions(-) diff --git a/cartoview/app_manager/models.py b/cartoview/app_manager/models.py index 9f26685e..ebf63355 100644 --- a/cartoview/app_manager/models.py +++ b/cartoview/app_manager/models.py @@ -108,6 +108,66 @@ def settings_url(self): logger.error(e.message) return None + @property + def urls(self): + admin_urls = logged_in_urls = anonymous_urls = None + try: + app_module = __import__(self.name) + if hasattr(app_module, 'urls_dict'): + urls_dict = getattr(app_module, 'urls_dict') + if 'admin' in list(urls_dict.keys()): + admin_urls = urls_dict['admin'] + else: + admin_urls = None + if 'logged_in' in list(urls_dict.keys()): + logged_in_urls = urls_dict['logged_in'] + else: + logged_in_urls = None + if 'anonymous' in list(urls_dict.keys()): + anonymous_urls = urls_dict['anonymous'] + else: + anonymous_urls = None + except ImportError as e: + logger.error(e.message) + return (admin_urls, logged_in_urls, anonymous_urls) + + @property + def open_url(self): + from django.core.urlresolvers import reverse + open_url = reverse('app_manager_base_url') + self.name + try: + app_module = __import__(self.name) + if hasattr(app_module, 'OPEN_URL_NAME'): + open_url = reverse(getattr(app_module, 'OPEN_URL_NAME')) + except ImportError as e: + logger.error(e.message) + return open_url + + @property + def create_new_url(self): + from django.core.urlresolvers import reverse + create_new_url = reverse('{}.new'.format(self.name)) + try: + app_module = __import__(self.name) + if hasattr(app_module, 'CREATE_NEW_URL_NAME'): + create_new_url = reverse( + getattr(app_module, 'CREATE_NEW_URL_NAME')) + except ImportError as e: + logger.error(e.message) + return create_new_url + + @property + def admin_urls(self): + return self.urls[0] + + @property + def logged_in_urls(self): + return self.urls[1] + + @property + def anonymous_urls(self): + return self.urls[2] + @property def new_url(self): try: diff --git a/cartoview/app_manager/templates/app_manager/apps.html b/cartoview/app_manager/templates/app_manager/apps.html index b92514d5..8ddc2d37 100644 --- a/cartoview/app_manager/templates/app_manager/apps.html +++ b/cartoview/app_manager/templates/app_manager/apps.html @@ -72,7 +72,7 @@

{{ app.title }}

{% if app.single_instance %}
- Open
@@ -82,10 +82,13 @@

{{ app.title }}

target="_parent" class="btn btn-sm btn-primary">Explore {{ app.appinstance_set.all|objects_count:request.user }}
+ {% comment %} + REMOVE THE FOLLOWING CONDITION AFTER FIXING __init__.py OF ALL MULTIPLE INSTANCE APPS + {% endcomment %} {% if not user.is_authenticated or not request.user.is_staff %}
+ href="{% url 'account_login' %}?next={{app.create_new_url}}"> Create New
diff --git a/cartoview/app_manager/views.py b/cartoview/app_manager/views.py index 8abf7410..0cd9f046 100644 --- a/cartoview/app_manager/views.py +++ b/cartoview/app_manager/views.py @@ -3,7 +3,6 @@ unicode_literals) import abc -import importlib import json import os @@ -97,25 +96,6 @@ def manage_apps(request): def index(request): Apps = installed_apps() - for app in Apps: - module = importlib.import_module(app.name) - if hasattr(module, 'urls_dict'): - urls_dict = getattr(module, 'urls_dict') - if 'admin' in list(urls_dict.keys()): - app.admin_urls = urls_dict['admin'] - else: - app.admin_urls = None - if 'logged_in' in list(urls_dict.keys()): - app.logged_in_urls = urls_dict['logged_in'] - else: - app.logged_in_urls = None - if 'anonymous' in list(urls_dict.keys()): - app.anonymous_urls = urls_dict['anonymous'] - else: - app.anonymous_urls = None - else: - app.admin_urls = app.logged_in_urls = app.anonymous_urls = None - context = {'Apps': Apps} return render(request, 'app_manager/apps.html', context)