app/soc/views/models/base.py
changeset 494 5e9c656a1b68
parent 493 6976c4d8d0ac
child 495 87afae6e4c51
equal deleted inserted replaced
493:6976c4d8d0ac 494:5e9c656a1b68
    22   '"Pawel Solyga" <pawel.solyga@gmail.com>',
    22   '"Pawel Solyga" <pawel.solyga@gmail.com>',
    23   ]
    23   ]
    24 
    24 
    25 
    25 
    26 from django import http
    26 from django import http
       
    27 from django.conf.urls import defaults
    27 from django.utils.translation import ugettext_lazy
    28 from django.utils.translation import ugettext_lazy
    28 
    29 
    29 import soc.logic
    30 import soc.logic
    30 import soc.logic.out_of_band
    31 import soc.logic.out_of_band
    31 import soc.views.helper.lists
    32 import soc.views.helper.lists
    32 import soc.views.helper.responses
    33 import soc.views.helper.responses
    33 import soc.views.out_of_band
    34 import soc.views.out_of_band
    34 
    35 
    35 from soc.logic import dicts
    36 from soc.logic import dicts
    36 from soc.logic import models
    37 from soc.logic import models
       
    38 from soc.logic import path_link_name
    37 from soc.views import simple
    39 from soc.views import simple
    38 from soc.views import helper
    40 from soc.views import helper
    39 from soc.views.helper import access
    41 from soc.views.helper import access
    40 
    42 
    41 
    43 
    93      ('/%s/create', 'New %(name)s'),
    95      ('/%s/create', 'New %(name)s'),
    94      ('/%s/list', 'List %(plural)s'),
    96      ('/%s/list', 'List %(plural)s'),
    95     ]
    97     ]
    96     new_params['sidebar_additional'] = []
    98     new_params['sidebar_additional'] = []
    97 
    99 
       
   100     new_params['key_fields_prefix'] = []
       
   101 
       
   102     new_params['django_patterns'] = None
       
   103     new_params['django_patterns_defaults'] = [
       
   104         (r'^%(name_lower)s/show/%(key_fields)s$', 
       
   105             'soc.views.models.%s.public', 'Show %(name)s'),
       
   106         (r'^%(name_lower)s/create$',
       
   107             'soc.views.models.%s.create', 'Create %(name)s'),
       
   108         (r'^%(name_lower)s/delete/%(key_fields)s$',
       
   109             'soc.views.models.%s.delete', 'Delete %(name)s'),
       
   110         (r'^%(name_lower)s/edit/%(key_fields)s$',
       
   111             'soc.views.models.%s.edit', 'Edit %(name)s'),
       
   112         (r'^%(name_lower)s/list$',
       
   113             'soc.views.models.%s.list', 'List %(name_plural)s'),
       
   114         ]
       
   115 
    98     self._rights = dicts.merge(rights, new_rights)
   116     self._rights = dicts.merge(rights, new_rights)
    99     self._params = dicts.merge(params, new_params)
   117     self._params = dicts.merge(params, new_params)
   100 
   118 
   101   def public(self, request, page_name=None, params=None, **kwargs):
   119   def public(self, request, page_name=None, params=None, **kwargs):
   102     """Displays the public page for the entity specified by **kwargs
   120     """Displays the public page for the entity specified by **kwargs
   480     for field, value in form.cleaned_data.iteritems():
   498     for field, value in form.cleaned_data.iteritems():
   481       fields[field] = value
   499       fields[field] = value
   482 
   500 
   483     return key_name, fields
   501     return key_name, fields
   484 
   502 
       
   503   def getKeyFieldsPattern(self, params):
       
   504     """
       
   505     """
       
   506 
       
   507     names = self._logic.getKeyFieldNames()
       
   508     patterns = params['key_fields_prefix']
       
   509 
       
   510     for name in names:
       
   511       pattern = r'(?P<%s>%s)' % (name, path_link_name.LINKNAME_PATTERN_CORE)
       
   512       patterns.append(pattern)
       
   513 
       
   514     result = '/'.join(patterns)
       
   515     return result
       
   516 
   485   def _getSidebarItems(self, params):
   517   def _getSidebarItems(self, params):
   486     """Retrieves a list of sidebar entries for this view from self._params
   518     """Retrieves a list of sidebar entries for this view from self._params
   487 
   519 
   488     If params['sidebar'] is None default entries will be constructed 
   520     If params['sidebar'] is None default entries will be constructed 
   489     """
   521     """
   530     res = {}
   562     res = {}
   531     res['heading'] = params['name']
   563     res['heading'] = params['name']
   532     res['items'] = items
   564     res['items'] = items
   533 
   565 
   534     return res
   566     return res
       
   567 
       
   568   def getDjangoURLPatterns(self, params=None):
       
   569     """Retrieves a list of sidebar entries for this view from self._params
       
   570 
       
   571     If self._params['django_patterns'] is None default entries will be constructed 
       
   572     """
       
   573 
       
   574     params = dicts.merge(params, self._params)
       
   575 
       
   576     # Return the found result
       
   577     if params['django_patterns']:
       
   578       return params['django_patterns']
       
   579 
       
   580     # Construct defaults manualy
       
   581     default_patterns = params['django_patterns_defaults']
       
   582     key_fields_pattern = self.getKeyFieldsPattern(params)
       
   583 
       
   584     patterns = []
       
   585 
       
   586     for url, module, name in default_patterns:
       
   587       name_short_lower = params['name_short'].lower()
       
   588       name_plural_lower = params['name_plural'].lower() 
       
   589 
       
   590       name = name % {
       
   591           'name': name_short_lower, 
       
   592           'name_plural': name_plural_lower,
       
   593           }
       
   594 
       
   595       module = module % name_short_lower
       
   596 
       
   597       url = url % {
       
   598           'name_lower': name_short_lower,
       
   599           'lnp': path_link_name.LINKNAME_ARG_PATTERN,
       
   600           'ulnp': path_link_name.LINKNAME_PATTERN_CORE,
       
   601           'key_fields': key_fields_pattern,
       
   602           }
       
   603 
       
   604       kwargs = {'page_name': name}
       
   605 
       
   606       item = (url, module, kwargs, name)
       
   607       patterns.append(item)
       
   608 
       
   609     return patterns