97 lines
3.1 KiB
Python
97 lines
3.1 KiB
Python
|
from admin_tools.menu import items, Menu
|
||
|
from django.core.urlresolvers import reverse
|
||
|
from django.utils.translation import ugettext_lazy as _
|
||
|
|
||
|
from orchestra.core import services
|
||
|
from orchestra.utils.apps import isinstalled
|
||
|
|
||
|
|
||
|
def api_link(context):
|
||
|
""" Dynamically generates API related URL """
|
||
|
if 'opts' in context:
|
||
|
opts = context['opts']
|
||
|
elif 'cl' in context:
|
||
|
opts = context['cl'].opts
|
||
|
else:
|
||
|
return reverse('api-root')
|
||
|
if 'object_id' in context:
|
||
|
object_id = context['object_id']
|
||
|
try:
|
||
|
return reverse('%s-detail' % opts.module_name, args=[object_id])
|
||
|
except:
|
||
|
return reverse('api-root')
|
||
|
try:
|
||
|
return reverse('%s-list' % opts.module_name)
|
||
|
except:
|
||
|
return reverse('api-root')
|
||
|
|
||
|
|
||
|
def get_services():
|
||
|
result = []
|
||
|
for model, options in services.get().iteritems():
|
||
|
if options.get('menu', True):
|
||
|
opts = model._meta
|
||
|
url = reverse('admin:%s_%s_changelist' % (opts.app_label, opts.model_name))
|
||
|
result.append(items.MenuItem(options.get('verbose_name_plural'), url))
|
||
|
return sorted(result, key=lambda i: i.title)
|
||
|
|
||
|
|
||
|
def get_accounts():
|
||
|
accounts = [
|
||
|
items.MenuItem(_("Accounts"), reverse('admin:accounts_account_changelist'))
|
||
|
]
|
||
|
if isinstalled('orchestra.apps.contacts'):
|
||
|
url = reverse('admin:contacts_contact_changelist')
|
||
|
accounts.append(items.MenuItem(_("Contacts"), url))
|
||
|
if isinstalled('orchestra.apps.users'):
|
||
|
url = reverse('admin:users_user_changelist')
|
||
|
users = [items.MenuItem(_("Users"), url)]
|
||
|
if isinstalled('rest_framework.authtoken'):
|
||
|
tokens = reverse('admin:authtoken_token_changelist')
|
||
|
users.append(items.MenuItem(_("Tokens"), tokens))
|
||
|
accounts.append(items.MenuItem(_("Users"), url, children=users))
|
||
|
return accounts
|
||
|
|
||
|
|
||
|
def get_administration():
|
||
|
administration = []
|
||
|
return administration
|
||
|
|
||
|
|
||
|
def get_administration_models():
|
||
|
administration_models = []
|
||
|
if isinstalled('orchestra.apps.orchestration'):
|
||
|
administration_models.append('orchestra.apps.orchestration.*')
|
||
|
if isinstalled('djcelery'):
|
||
|
administration_models.append('djcelery.*')
|
||
|
if isinstalled('orchestra.apps.issues'):
|
||
|
administration_models.append('orchestra.apps.issues.*')
|
||
|
return administration_models
|
||
|
|
||
|
|
||
|
class OrchestraMenu(Menu):
|
||
|
def init_with_context(self, context):
|
||
|
self.children += [
|
||
|
items.MenuItem(
|
||
|
_('Dashboard'),
|
||
|
reverse('admin:index')
|
||
|
),
|
||
|
items.Bookmarks(),
|
||
|
items.MenuItem(
|
||
|
_("Services"),
|
||
|
reverse('admin:index'),
|
||
|
children=get_services()
|
||
|
),
|
||
|
items.MenuItem(
|
||
|
_("Accounts"),
|
||
|
reverse('admin:accounts_account_changelist'),
|
||
|
children=get_accounts()
|
||
|
),
|
||
|
items.AppList(
|
||
|
_("Administration"),
|
||
|
models=get_administration_models(),
|
||
|
children=get_administration()
|
||
|
),
|
||
|
items.MenuItem("API", api_link(context))
|
||
|
]
|