diff -r 6976c4d8d0ac -r 5e9c656a1b68 app/soc/views/models/base.py --- a/app/soc/views/models/base.py Sun Nov 16 23:02:31 2008 +0000 +++ b/app/soc/views/models/base.py Sun Nov 16 23:03:37 2008 +0000 @@ -24,6 +24,7 @@ from django import http +from django.conf.urls import defaults from django.utils.translation import ugettext_lazy import soc.logic @@ -34,6 +35,7 @@ from soc.logic import dicts from soc.logic import models +from soc.logic import path_link_name from soc.views import simple from soc.views import helper from soc.views.helper import access @@ -95,6 +97,22 @@ ] new_params['sidebar_additional'] = [] + new_params['key_fields_prefix'] = [] + + new_params['django_patterns'] = None + new_params['django_patterns_defaults'] = [ + (r'^%(name_lower)s/show/%(key_fields)s$', + 'soc.views.models.%s.public', 'Show %(name)s'), + (r'^%(name_lower)s/create$', + 'soc.views.models.%s.create', 'Create %(name)s'), + (r'^%(name_lower)s/delete/%(key_fields)s$', + 'soc.views.models.%s.delete', 'Delete %(name)s'), + (r'^%(name_lower)s/edit/%(key_fields)s$', + 'soc.views.models.%s.edit', 'Edit %(name)s'), + (r'^%(name_lower)s/list$', + 'soc.views.models.%s.list', 'List %(name_plural)s'), + ] + self._rights = dicts.merge(rights, new_rights) self._params = dicts.merge(params, new_params) @@ -482,6 +500,20 @@ return key_name, fields + def getKeyFieldsPattern(self, params): + """ + """ + + names = self._logic.getKeyFieldNames() + patterns = params['key_fields_prefix'] + + for name in names: + pattern = r'(?P<%s>%s)' % (name, path_link_name.LINKNAME_PATTERN_CORE) + patterns.append(pattern) + + result = '/'.join(patterns) + return result + def _getSidebarItems(self, params): """Retrieves a list of sidebar entries for this view from self._params @@ -532,3 +564,46 @@ res['items'] = items return res + + def getDjangoURLPatterns(self, params=None): + """Retrieves a list of sidebar entries for this view from self._params + + If self._params['django_patterns'] is None default entries will be constructed + """ + + params = dicts.merge(params, self._params) + + # Return the found result + if params['django_patterns']: + return params['django_patterns'] + + # Construct defaults manualy + default_patterns = params['django_patterns_defaults'] + key_fields_pattern = self.getKeyFieldsPattern(params) + + patterns = [] + + for url, module, name in default_patterns: + name_short_lower = params['name_short'].lower() + name_plural_lower = params['name_plural'].lower() + + name = name % { + 'name': name_short_lower, + 'name_plural': name_plural_lower, + } + + module = module % name_short_lower + + url = url % { + 'name_lower': name_short_lower, + 'lnp': path_link_name.LINKNAME_ARG_PATTERN, + 'ulnp': path_link_name.LINKNAME_PATTERN_CORE, + 'key_fields': key_fields_pattern, + } + + kwargs = {'page_name': name} + + item = (url, module, kwargs, name) + patterns.append(item) + + return patterns