app/soc/views/models/base.py
changeset 494 5e9c656a1b68
parent 493 6976c4d8d0ac
child 495 87afae6e4c51
--- 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