app/soc/views/models/base.py
changeset 542 7cc99461b64d
parent 539 e30462354e26
child 543 280a1ac6bcc1
equal deleted inserted replaced
541:d572b0fb6bfe 542:7cc99461b64d
    53   """
    53   """
    54 
    54 
    55   DEF_SUBMIT_MSG_PARAM_NAME = 's'
    55   DEF_SUBMIT_MSG_PARAM_NAME = 's'
    56   DEF_SUBMIT_MSG_PROFILE_SAVED = 0
    56   DEF_SUBMIT_MSG_PROFILE_SAVED = 0
    57 
    57 
    58   DEF_CREATE_NEW_ENTITY_MSG = ugettext_lazy(
    58   DEF_CREATE_NEW_ENTITY_MSG_FMT = ugettext_lazy(
    59       ' You can create a new %(entity_type)s by visiting'
    59       ' You can create a new %(entity_type)s by visiting'
    60       ' <a href="%(create)s">Create '
    60       ' <a href="%(create)s">Create '
    61       'a New %(entity_type)s</a> page.')
    61       'a New %(entity_type)s</a> page.')
    62 
    62 
    63   def __init__(self, params=None):
    63   def __init__(self, params=None):
    81         delete_redirect: the Django template to redirect to on delete
    81         delete_redirect: the Django template to redirect to on delete
    82         create_redirect: the Django template to redirect to after creation
    82         create_redirect: the Django template to redirect to after creation
    83         save_message: the message to display when the entity is saved
    83         save_message: the message to display when the entity is saved
    84         edit_params: the params to use when editing
    84         edit_params: the params to use when editing
    85         sidebar: the sidebar menu items for this view
    85         sidebar: the sidebar menu items for this view
    86         sidebar_defaults: a dictionary with defaults for the sidebar 
    86         sidebar_defaults: a dictionary with defaults for the sidebar; each
       
    87           value in the dict is a two-tuple:
       
    88           (url_format,       # supplied a single positional url_name
       
    89            menu_text_format) # supplied the params dict
    87     """
    90     """
    88 
    91 
    89     rights = {}
    92     rights = {}
    90     rights['unspecified'] = []
    93     rights['unspecified'] = []
    91     rights['any_access'] = [access.checkIsUser]
    94     rights['any_access'] = [access.checkIsUser]
   100     new_params['missing_redirect'] = '/%s/create' % params['url_name']
   103     new_params['missing_redirect'] = '/%s/create' % params['url_name']
   101     
   104     
   102     new_params['sidebar'] = None
   105     new_params['sidebar'] = None
   103     new_params['sidebar_defaults'] = [
   106     new_params['sidebar_defaults'] = [
   104      ('/%s/create', 'New %(name)s'),
   107      ('/%s/create', 'New %(name)s'),
   105      ('/%s/list', 'List %(plural)s'),
   108      ('/%s/list', 'List %(name_plural)s'),
   106     ]
   109     ]
   107     new_params['sidebar_additional'] = []
   110     new_params['sidebar_additional'] = []
       
   111     new_params['sidebar_heading'] = None
   108 
   112 
   109     new_params['key_fields_prefix'] = []
   113     new_params['key_fields_prefix'] = []
   110 
   114 
   111     new_params['django_patterns'] = None
   115     new_params['django_patterns'] = None
   112     new_params['django_patterns_defaults'] = [
   116     new_params['django_patterns_defaults'] = [
   113         (r'^%(url_name)s/show/%(key_fields)s$', 
   117         (r'^%(url_name)s/show/%(key_fields)s$', 
   114             'soc.views.models.%s.public', 'Show %(name)s'),
   118             'soc.views.models.%s.public', 'Show %(name_short)s'),
   115         (r'^%(url_name)s/create$',
   119         (r'^%(url_name)s/create$',
   116             'soc.views.models.%s.create', 'Create %(name)s'),
   120             'soc.views.models.%s.create', 'Create %(name_short)s'),
   117         (r'^%(url_name)s/create/%(key_fields)s$',
   121         (r'^%(url_name)s/create/%(key_fields)s$',
   118             'soc.views.models.%s.create', 'Create %(name)s'),
   122             'soc.views.models.%s.create', 'Create %(name_short)s'),
   119         (r'^%(url_name)s/delete/%(key_fields)s$',
   123         (r'^%(url_name)s/delete/%(key_fields)s$',
   120             'soc.views.models.%s.delete', 'Delete %(name)s'),
   124             'soc.views.models.%s.delete', 'Delete %(name_short)s'),
   121         (r'^%(url_name)s/edit/%(key_fields)s$',
   125         (r'^%(url_name)s/edit/%(key_fields)s$',
   122             'soc.views.models.%s.edit', 'Edit %(name)s'),
   126             'soc.views.models.%s.edit', 'Edit %(name_short)s'),
   123         (r'^%(url_name)s/list$',
   127         (r'^%(url_name)s/list$',
   124             'soc.views.models.%s.list', 'List %(name_plural)s'),
   128             'soc.views.models.%s.list', 'List %(name_plural)s'),
   125         ]
   129         ]
   126 
   130 
   127     new_params['list_redirect_action'] = '/' + params['url_name'] + '/edit'
   131     new_params['list_redirect_action'] = '/' + params['url_name'] + '/edit'
   232         key_fields = self._logic.getKeyFieldsFromDict(kwargs)
   236         key_fields = self._logic.getKeyFieldsFromDict(kwargs)
   233         entity = self._logic.getIfFields(key_fields)
   237         entity = self._logic.getIfFields(key_fields)
   234     except soc.logic.out_of_band.ErrorResponse, error:
   238     except soc.logic.out_of_band.ErrorResponse, error:
   235       if not seed:
   239       if not seed:
   236         template = params['public_template']
   240         template = params['public_template']
   237         error.message = error.message + self.DEF_CREATE_NEW_ENTITY_MSG % {
   241         error.message = error.message + self.DEF_CREATE_NEW_ENTITY_MSG_FMT % {
   238             'entity_type_lower' : params['name'].lower(),
   242             'entity_type_lower' : params['name'].lower(),
   239             'entity_type' : params['name'],
   243             'entity_type' : params['name'],
   240             'create' : params['missing_redirect']
   244             'create' : params['missing_redirect']
   241             }
   245             }
   242         return simple.errorResponse(request, page_name, error, template,
   246         return simple.errorResponse(request, page_name, error, template,
   394     try:
   398     try:
   395       key_fields = self._logic.getKeyFieldsFromDict(kwargs)
   399       key_fields = self._logic.getKeyFieldsFromDict(kwargs)
   396       entity = self._logic.getIfFields(key_fields)
   400       entity = self._logic.getIfFields(key_fields)
   397     except soc.logic.out_of_band.ErrorResponse, error:
   401     except soc.logic.out_of_band.ErrorResponse, error:
   398       template = params['edit_template']
   402       template = params['edit_template']
   399       error.message = error.message + self.DEF_CREATE_NEW_ENTITY_MSG % {
   403       error.message = error.message + self.DEF_CREATE_NEW_ENTITY_MSG_FMT % {
   400           'entity_type_lower' : params['name'].lower(),
   404           'entity_type_lower' : params['name'].lower(),
   401           'entity_type' : params['name'],
   405           'entity_type' : params['name'],
   402           'create' : params['missing_redirect']
   406           'create' : params['missing_redirect']
   403           }
   407           }
   404       return simple.errorResponse(request, page_name, error, template, context)
   408       return simple.errorResponse(request, page_name, error, template, context)
   558     # Construct defaults manualy
   562     # Construct defaults manualy
   559     defaults = params['sidebar_defaults']
   563     defaults = params['sidebar_defaults']
   560 
   564 
   561     result = []
   565     result = []
   562 
   566 
   563     for url, title in defaults:
   567     for url, menu_text in defaults:
   564       url = url % params['url_name'].lower()
   568       url = url % params['url_name'].lower()
   565 
   569       item = (url, menu_text % params)
   566       title = title % {
       
   567           'name': params['name'],
       
   568           'plural': params['name_plural']
       
   569           }
       
   570 
       
   571       item = (url, title)
       
   572       result.append(item)
   570       result.append(item)
   573 
   571 
   574     for item in params['sidebar_additional']:
   572     for item in params['sidebar_additional']:
   575       result.append(item)
   573       result.append(item)
   576 
   574 
   585 
   583 
   586     params = dicts.merge(params, self._params)
   584     params = dicts.merge(params, self._params)
   587 
   585 
   588     items = []
   586     items = []
   589 
   587 
   590     for url, title in self._getSidebarItems(params):
   588     for url, menu_text in self._getSidebarItems(params):
   591       items.append({'url': url, 'title': title})
   589       items.append({'url': url, 'title': menu_text})
   592 
   590 
   593     res = {}
   591     res = {}
   594     res['heading'] = params['name']
   592 
       
   593     if not params['sidebar_heading']:
       
   594       params['sidebar_heading'] = params['name']
       
   595 
       
   596     res['heading'] = params['sidebar_heading']
   595     res['items'] = items
   597     res['items'] = items
   596 
   598 
   597     return res
   599     return res
   598 
   600 
   599   def getDjangoURLPatterns(self, params=None):
   601   def getDjangoURLPatterns(self, params=None):
   600     """Retrieves a list of sidebar entries for this view from self._params.
   602     """Retrieves a list of sidebar entries for this view from self._params.
   601 
   603 
   602     If self._params['django_patterns'] is None default entries will be constructed.
   604     If self._params['django_patterns'] is None default entries will be
       
   605     constructed.
   603     """
   606     """
   604 
   607 
   605     params = dicts.merge(params, self._params)
   608     params = dicts.merge(params, self._params)
   606 
   609 
   607     # Return the found result
   610     # Return the found result
   613     key_fields_pattern = self.getKeyFieldsPattern(params)
   616     key_fields_pattern = self.getKeyFieldsPattern(params)
   614 
   617 
   615     patterns = []
   618     patterns = []
   616 
   619 
   617     for url, module, name in default_patterns:
   620     for url, module, name in default_patterns:
   618       name_short = params['name_short']
   621       name = name % params
   619       name_plural = params['name_plural']
       
   620 
       
   621       name = name % {
       
   622           'name': name_short, 
       
   623           'name_plural': name_plural,
       
   624           }
       
   625 
       
   626       module = module % params['module_name']
   622       module = module % params['module_name']
   627 
   623 
   628       url = url % {
   624       url = url % {
   629           'url_name': params['url_name'],
   625           'url_name': params['url_name'],
   630           'lnp': linkable.LINK_ID_ARG_PATTERN,
   626           'lnp': linkable.LINK_ID_ARG_PATTERN,