app/soc/views/models/base.py
author Sverre Rabbelier <srabbelier@gmail.com>
Wed, 11 Mar 2009 21:28:48 +0000
changeset 1796 5cd78a7aacdd
parent 1790 7655a46dcfa3
child 1801 747b0d1115ea
permissions -rw-r--r--
Allow for query caching in pick Turn the caching on for /user/pick Patch by: Sverre Rabbelier
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     1
#!/usr/bin/python2.5
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     2
#
1308
35b75ffcbb37 Partially reverted "Update the copyright notice for 2009."
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1307
diff changeset
     3
# Copyright 2008 the Melange authors.
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     4
#
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     5
# Licensed under the Apache License, Version 2.0 (the "License");
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     6
# you may not use this file except in compliance with the License.
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     7
# You may obtain a copy of the License at
1326
237d0974654e Minor style fix
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1308
diff changeset
     8
#
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
     9
#   http://www.apache.org/licenses/LICENSE-2.0
1326
237d0974654e Minor style fix
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1308
diff changeset
    10
#
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    11
# Unless required by applicable law or agreed to in writing, software
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    12
# distributed under the License is distributed on an "AS IS" BASIS,
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    13
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    14
# See the License for the specific language governing permissions and
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    15
# limitations under the License.
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    16
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    17
"""Helpers functions for displaying views.
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    18
"""
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    19
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    20
__authors__ = [
429
e50e18936f06 Fixed typo in e-mail address
Sverre Rabbelier <srabbelier@gmail.com>
parents: 428
diff changeset
    21
  '"Sverre Rabbelier" <sverre@rabbelier.nl>',
516
ec1dcd70b97e The list method in models/base.py can now use a filter to make a selection of entities to show.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 514
diff changeset
    22
  '"Lennard de Rijk" <ljvderijk@gmail.com>',
471
dcb1f7821b39 Remove stop parameter from home_settings and site_settings views. This is something Sverre didn't mean to commit :-) Add missing params description to the models Base class docs.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 459
diff changeset
    23
  '"Pawel Solyga" <pawel.solyga@gmail.com>',
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    24
  ]
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    25
1268
9d092b702f92 Resolve references if they are specified
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1227
diff changeset
    26
from google.appengine.ext import db
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    27
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    28
from django import http
1098
e5c06755ecd8 Use django.utils.simplejson in soc.views.models.base pick method instead of our standalone simplejson module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1035
diff changeset
    29
from django.utils import simplejson
970
8b5611d5b053 Use ugettext instead of ugettext_lazy
Sverre Rabbelier <srabbelier@gmail.com>
parents: 957
diff changeset
    30
from django.utils.translation import ugettext
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    31
387
c55195361cb6 Addressed comments by Todd on r822
Sverre Rabbelier <srabbelier@gmail.com>
parents: 373
diff changeset
    32
from soc.logic import dicts
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    33
from soc.views import helper
543
280a1ac6bcc1 Merge soc/logic/out_of_band.py into soc/views/out_of_band.py. Merge
Todd Larsen <tlarsen@google.com>
parents: 542
diff changeset
    34
from soc.views import out_of_band
876
0c1329d4b514 Make use of the new decorators in all applicable views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 874
diff changeset
    35
from soc.views.helper import decorators
612
3cca81b1e5a1 Moved checkAccess and getCleanedFields into access and forms
Sverre Rabbelier <srabbelier@gmail.com>
parents: 611
diff changeset
    36
from soc.views.helper import forms
858
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
    37
from soc.views.helper import redirects
1349
d05a9bf08c11 Hopefully fix json caching issues in IE7.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1342
diff changeset
    38
from soc.views.helper import responses
613
4880ffa9f3ba Moved getDjangoURLPatterns to sitemap.sitemap
Sverre Rabbelier <srabbelier@gmail.com>
parents: 612
diff changeset
    39
from soc.views import sitemap
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    40
1796
5cd78a7aacdd Allow for query caching in pick
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1790
diff changeset
    41
import soc.cache.logic
646
860e17e5118f Remove cyclic imports by moving response method of out_of_band.Error class to soc.views.helper.responses module as errorResponse function. Apply changes to affected files.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 639
diff changeset
    42
import soc.logic
860e17e5118f Remove cyclic imports by moving response method of out_of_band.Error class to soc.views.helper.responses module as errorResponse function. Apply changes to affected files.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 639
diff changeset
    43
import soc.logic.lists
860e17e5118f Remove cyclic imports by moving response method of out_of_band.Error class to soc.views.helper.responses module as errorResponse function. Apply changes to affected files.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 639
diff changeset
    44
import soc.views.helper.lists
860e17e5118f Remove cyclic imports by moving response method of out_of_band.Error class to soc.views.helper.responses module as errorResponse function. Apply changes to affected files.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 639
diff changeset
    45
import soc.views.helper.params
860e17e5118f Remove cyclic imports by moving response method of out_of_band.Error class to soc.views.helper.responses module as errorResponse function. Apply changes to affected files.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 639
diff changeset
    46
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    47
493
6976c4d8d0ac Refactor the sidebar to use Django templates
Sverre Rabbelier <srabbelier@gmail.com>
parents: 492
diff changeset
    48
class View(object):
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    49
  """Views for entity classes.
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    50
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    51
  The View class functions specific to Entity classes by relying
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    52
  on the the child-classes to define the following fields:
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    53
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    54
  self._logic: the logic singleton for this entity
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    55
  """
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    56
970
8b5611d5b053 Use ugettext instead of ugettext_lazy
Sverre Rabbelier <srabbelier@gmail.com>
parents: 957
diff changeset
    57
  DEF_CREATE_NEW_ENTITY_MSG_FMT = ugettext(
502
e1e24c0a4e82 Add new parameters to views: url_name which is name used in urls (instead of using lower entity names) and module_name which is used for constructing django urls. Append changes to all affected files. Fix some title names. Change urls that included underscores like "site_settings" into urls with slash "site/settings". Plus some other minor fixes.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 500
diff changeset
    58
      ' You can create a new %(entity_type)s by visiting'
387
c55195361cb6 Addressed comments by Todd on r822
Sverre Rabbelier <srabbelier@gmail.com>
parents: 373
diff changeset
    59
      ' <a href="%(create)s">Create '
399
b82852e6963e Various improvements to the generic View code
Sverre Rabbelier <srabbelier@gmail.com>
parents: 389
diff changeset
    60
      'a New %(entity_type)s</a> page.')
387
c55195361cb6 Addressed comments by Todd on r822
Sverre Rabbelier <srabbelier@gmail.com>
parents: 373
diff changeset
    61
970
8b5611d5b053 Use ugettext instead of ugettext_lazy
Sverre Rabbelier <srabbelier@gmail.com>
parents: 957
diff changeset
    62
  DEF_CREATE_INSTRUCTION_MSG_FMT = ugettext(
663
c2dcae606699 Make base.View.create lookup the scope if appropriate
Sverre Rabbelier <srabbelier@gmail.com>
parents: 662
diff changeset
    63
      'Please select a %s for the new %s.')
c2dcae606699 Make base.View.create lookup the scope if appropriate
Sverre Rabbelier <srabbelier@gmail.com>
parents: 662
diff changeset
    64
507
3603fdafabf7 Fold the _rights dictionary into params
Sverre Rabbelier <srabbelier@gmail.com>
parents: 502
diff changeset
    65
  def __init__(self, params=None):
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    66
    """
373
dcd7013ae0d5 Add the Page object to the context of each view method. Also, add some missing
Todd Larsen <tlarsen@google.com>
parents: 363
diff changeset
    67
dcd7013ae0d5 Add the Page object to the context of each view method. Also, add some missing
Todd Larsen <tlarsen@google.com>
parents: 363
diff changeset
    68
    Args:
dcd7013ae0d5 Add the Page object to the context of each view method. Also, add some missing
Todd Larsen <tlarsen@google.com>
parents: 363
diff changeset
    69
      params: This dictionary should be filled with the parameters
610
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
    70
        specific to this entity. See the methods in this class on
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
    71
        the fields it should contain, and how they are used.
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    72
    """
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    73
611
2ec30182e5f1 Move parameter construction into a seperate module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 610
diff changeset
    74
    self._params = helper.params.constructParams(params)
2ec30182e5f1 Move parameter construction into a seperate module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 610
diff changeset
    75
    self._logic = params['logic']
554
68c7a1dd3c52 Renamed templates/soc/entity/list/entity_*.html to *.html
Sverre Rabbelier <srabbelier@gmail.com>
parents: 553
diff changeset
    76
876
0c1329d4b514 Make use of the new decorators in all applicable views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 874
diff changeset
    77
  @decorators.merge_params
0c1329d4b514 Make use of the new decorators in all applicable views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 874
diff changeset
    78
  @decorators.check_access
710
edb5dbb1dea7 Add explicit access_types from the url
Sverre Rabbelier <srabbelier@gmail.com>
parents: 708
diff changeset
    79
  def public(self, request, access_type,
edb5dbb1dea7 Add explicit access_types from the url
Sverre Rabbelier <srabbelier@gmail.com>
parents: 708
diff changeset
    80
             page_name=None, params=None, **kwargs):
499
d22e4fe8e64b Fix missing dots in doc strings and some other doc string corrections.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 497
diff changeset
    81
    """Displays the public page for the entity specified by **kwargs.
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    82
610
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
    83
    Params usage:
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
    84
      rights: The rights dictionary is used to check if the user has
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
    85
        the required rights to view the public page for this entity.
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
    86
        See checkAccess for more details on how the rights dictionary
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
    87
        is used to check access rights.
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
    88
      error_public: The error_public value is used as template when
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
    89
        the key values (as defined by the page's url) do not
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
    90
        correspond to an existing entity.
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
    91
      name: The name value is used to set the entity_type in the
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
    92
        context so that the template can refer to it.
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
    93
      public_template: The public_template value is used as template
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
    94
        to display the public page of the found entity.
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
    95
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
    96
    Args:
373
dcd7013ae0d5 Add the Page object to the context of each view method. Also, add some missing
Todd Larsen <tlarsen@google.com>
parents: 363
diff changeset
    97
      request: the standard Django HTTP request object
957
5b657063b23b Add missing parameter description to docstring of soc.views.models.base module methods.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 939
diff changeset
    98
      access_type : the name of the access type which should be checked
500
44ea4620c5c0 Replace old page parameter doc string description with new one for page_name.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 499
diff changeset
    99
      page_name: the page name displayed in templates as page and header title
471
dcb1f7821b39 Remove stop parameter from home_settings and site_settings views. This is something Sverre didn't mean to commit :-) Add missing params description to the models Base class docs.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 459
diff changeset
   100
      params: a dict with params for this View
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   101
      kwargs: the Key Fields for the specified entity
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   102
    """
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   103
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   104
    # create default template context for use with any templates
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   105
    context = helper.responses.getUniversalContext(request)
1357
3dd1507aa723 Prepare all views for a new modular approach to JS loading
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1349
diff changeset
   106
    helper.responses.useJavaScript(context, params['js_uses_all'])
482
839740b061ad Factor out direct use of the page object
Sverre Rabbelier <srabbelier@gmail.com>
parents: 471
diff changeset
   107
    context['page_name'] = page_name
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   108
    entity = None
1784
d5dacf2be926 Use params['logic'] instead of self._logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1703
diff changeset
   109
    logic = params['logic']
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   110
446
0b479d573a4c Refactoring of {site/home}_settings to make them use base.View
Sverre Rabbelier <srabbelier@gmail.com>
parents: 445
diff changeset
   111
    if not all(kwargs.values()):
0b479d573a4c Refactoring of {site/home}_settings to make them use base.View
Sverre Rabbelier <srabbelier@gmail.com>
parents: 445
diff changeset
   112
      #TODO: Change this into a proper redirect
0b479d573a4c Refactoring of {site/home}_settings to make them use base.View
Sverre Rabbelier <srabbelier@gmail.com>
parents: 445
diff changeset
   113
      return http.HttpResponseRedirect('/')
0b479d573a4c Refactoring of {site/home}_settings to make them use base.View
Sverre Rabbelier <srabbelier@gmail.com>
parents: 445
diff changeset
   114
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   115
    try:
1784
d5dacf2be926 Use params['logic'] instead of self._logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1703
diff changeset
   116
      entity = logic.getFromKeyFieldsOr404(kwargs)
543
280a1ac6bcc1 Merge soc/logic/out_of_band.py into soc/views/out_of_band.py. Merge
Todd Larsen <tlarsen@google.com>
parents: 542
diff changeset
   117
    except out_of_band.Error, error:
646
860e17e5118f Remove cyclic imports by moving response method of out_of_band.Error class to soc.views.helper.responses module as errorResponse function. Apply changes to affected files.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 639
diff changeset
   118
      return helper.responses.errorResponse(
860e17e5118f Remove cyclic imports by moving response method of out_of_band.Error class to soc.views.helper.responses module as errorResponse function. Apply changes to affected files.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 639
diff changeset
   119
          error, request, template=params['error_public'], context=context)
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   120
446
0b479d573a4c Refactoring of {site/home}_settings to make them use base.View
Sverre Rabbelier <srabbelier@gmail.com>
parents: 445
diff changeset
   121
    self._public(request, entity, context)
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   122
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   123
    context['entity'] = entity
455
4d98832b43ba Added support for providing a custom params dict
Sverre Rabbelier <srabbelier@gmail.com>
parents: 446
diff changeset
   124
    context['entity_type'] = params['name']
1500
a495ae7efc70 Fixed broken 'Edit <entity name> Settings' for orgs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1497
diff changeset
   125
    context['entity_type_url'] = params['url_name']
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   126
1677
b2cf6ad50a2a Make it possible to add some default values to the context
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1667
diff changeset
   127
    context = dicts.merge(params['context'], context)
b2cf6ad50a2a Make it possible to add some default values to the context
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1667
diff changeset
   128
455
4d98832b43ba Added support for providing a custom params dict
Sverre Rabbelier <srabbelier@gmail.com>
parents: 446
diff changeset
   129
    template = params['public_template']
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   130
858
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   131
    return helper.responses.respond(request, template, context=context)
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   132
876
0c1329d4b514 Make use of the new decorators in all applicable views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 874
diff changeset
   133
  @decorators.merge_params
0c1329d4b514 Make use of the new decorators in all applicable views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 874
diff changeset
   134
  @decorators.check_access
1342
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   135
  def admin(self, request, access_type,
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   136
             page_name=None, params=None, **kwargs):
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   137
    """Displays the admin page for the entity specified by **kwargs.
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   138
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   139
    Params usage:
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   140
      rights: The rights dictionary is used to check if the user has
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   141
        the required rights to view the public page for this entity.
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   142
        See checkAccess for more details on how the rights dictionary
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   143
        is used to check access rights.
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   144
      name: The name value is used to set the entity_type in the
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   145
        context so that the template can refer to it.
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   146
      public_template: The public_template value is used as template
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   147
        to display the public page of the found entity.
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   148
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   149
    Args:
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   150
      request: the standard Django HTTP request object
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   151
      access_type : the name of the access type which should be checked
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   152
      page_name: the page name displayed in templates as page and header title
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   153
      params: a dict with params for this View
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   154
      kwargs: the Key Fields for the specified entity
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   155
    """
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   156
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   157
    # create default template context for use with any templates
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   158
    context = helper.responses.getUniversalContext(request)
1357
3dd1507aa723 Prepare all views for a new modular approach to JS loading
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1349
diff changeset
   159
    helper.responses.useJavaScript(context, params['js_uses_all'])
1342
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   160
    context['page_name'] = page_name
1784
d5dacf2be926 Use params['logic'] instead of self._logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1703
diff changeset
   161
    logic = params['logic']
1342
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   162
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   163
    try:
1784
d5dacf2be926 Use params['logic'] instead of self._logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1703
diff changeset
   164
      entity = logic.getFromKeyFieldsOr404(kwargs)
1342
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   165
    except out_of_band.Error, error:
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   166
      return helper.responses.errorResponse(error, request, context=context)
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   167
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   168
    form = params['admin_form'](instance=entity)
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   169
    template = params['admin_template']
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   170
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   171
    return self._constructResponse(request, entity, context, form,
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   172
                                   params, template=template)
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   173
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   174
  @decorators.merge_params
f8056a197fb8 Add an admin view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1339
diff changeset
   175
  @decorators.check_access
858
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   176
  def export(self, request, access_type,
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   177
             page_name=None, params=None, **kwargs):
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   178
    """Displays the export page for the entity specified by **kwargs.
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   179
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   180
    Params usage:
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   181
      rights: The rights dictionary is used to check if the user has
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   182
        the required rights to view the export page for this entity.
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   183
        See checkAccess for more details on how the rights dictionary
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   184
        is used to check access rights.
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   185
      error_export: The error_export value is used as template when
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   186
        the key values (as defined by the page's url) do not
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   187
        correspond to an existing entity.
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   188
      name: The name value is used to set the entity_type in the
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   189
        context so that the template can refer to it.
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   190
      export_template: The export_template value is used as template
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   191
        to display the export page of the found entity.
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   192
      export_content_type: The export_content_type value is used to set
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   193
        the Content-Type header of the HTTP response.  If empty (or None),
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   194
        public() is called instead.
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   195
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   196
    Args:
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   197
      request: the standard Django HTTP request object
957
5b657063b23b Add missing parameter description to docstring of soc.views.models.base module methods.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 939
diff changeset
   198
      access_type : the name of the access type which should be checked
858
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   199
      page_name: the page name displayed in templates as page and header title
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   200
      params: a dict with params for this View
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   201
      kwargs: the Key Fields for the specified entity
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   202
    """
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   203
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   204
    if not params.get('export_content_type'):
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   205
      return self.public(request, access_type, page_name=page_name,
874
30e9629bf590 Fixed two trivial bugs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 858
diff changeset
   206
                         params=params, **kwargs)
858
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   207
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   208
    # create default template context for use with any templates
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   209
    context = helper.responses.getUniversalContext(request)
1357
3dd1507aa723 Prepare all views for a new modular approach to JS loading
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1349
diff changeset
   210
    helper.responses.useJavaScript(context, params['js_uses_all'])
858
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   211
    context['page_name'] = page_name
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   212
    entity = None
1784
d5dacf2be926 Use params['logic'] instead of self._logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1703
diff changeset
   213
    logic = params['logic']
858
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   214
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   215
    if not all(kwargs.values()):
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   216
      #TODO: Change this into a proper redirect
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   217
      return http.HttpResponseRedirect('/')
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   218
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   219
    try:
1784
d5dacf2be926 Use params['logic'] instead of self._logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1703
diff changeset
   220
      entity = logic.getFromKeyFieldsOr404(kwargs)
858
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   221
    except out_of_band.Error, error:
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   222
      return helper.responses.errorResponse(
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   223
          error, request, template=params['error_export'], context=context)
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   224
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   225
    self._export(request, entity, context)
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   226
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   227
    context['entity'] = entity
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   228
    context['entity_type'] = params['name']
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   229
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   230
    template = params['export_template']
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   231
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   232
    response_args = {'mimetype': params['export_content_type']}
1399
5b154edd94ac Make it easier to support other extensions per-Model (such as .csv, etc.).
Todd Larsen <tlarsen@google.com>
parents: 1398
diff changeset
   233
1400
842958b8a55d Rebased my double work on top of Todd recent commit
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1399
diff changeset
   234
    export_extension = params['export_extension']
842958b8a55d Rebased my double work on top of Todd recent commit
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1399
diff changeset
   235
1398
e6a11f0dba68 Force browser to ask to save an Export, and provide a filename extension.
Todd Larsen <tlarsen@google.com>
parents: 1373
diff changeset
   236
    response_headers = {
1399
5b154edd94ac Make it easier to support other extensions per-Model (such as .csv, etc.).
Todd Larsen <tlarsen@google.com>
parents: 1398
diff changeset
   237
        'Content-Disposition': 'attachment; filename=%s%s' % (
5b154edd94ac Make it easier to support other extensions per-Model (such as .csv, etc.).
Todd Larsen <tlarsen@google.com>
parents: 1398
diff changeset
   238
            entity.link_id, export_extension),
1398
e6a11f0dba68 Force browser to ask to save an Export, and provide a filename extension.
Todd Larsen <tlarsen@google.com>
parents: 1373
diff changeset
   239
        }
858
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   240
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   241
    return helper.responses.respond(request, template, context=context,
1398
e6a11f0dba68 Force browser to ask to save an Export, and provide a filename extension.
Todd Larsen <tlarsen@google.com>
parents: 1373
diff changeset
   242
                                    response_args=response_args,
e6a11f0dba68 Force browser to ask to save an Export, and provide a filename extension.
Todd Larsen <tlarsen@google.com>
parents: 1373
diff changeset
   243
                                    response_headers=response_headers)
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   244
876
0c1329d4b514 Make use of the new decorators in all applicable views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 874
diff changeset
   245
  @decorators.check_access
710
edb5dbb1dea7 Add explicit access_types from the url
Sverre Rabbelier <srabbelier@gmail.com>
parents: 708
diff changeset
   246
  def create(self, request, access_type,
edb5dbb1dea7 Add explicit access_types from the url
Sverre Rabbelier <srabbelier@gmail.com>
parents: 708
diff changeset
   247
             page_name=None, params=None, **kwargs):
499
d22e4fe8e64b Fix missing dots in doc strings and some other doc string corrections.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 497
diff changeset
   248
    """Displays the create page for this entity type.
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   249
610
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   250
    Params usage:
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   251
      The params dictionary is passed on to edit, see the docstring
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   252
      for edit on how it uses it.
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   253
373
dcd7013ae0d5 Add the Page object to the context of each view method. Also, add some missing
Todd Larsen <tlarsen@google.com>
parents: 363
diff changeset
   254
    Args:
dcd7013ae0d5 Add the Page object to the context of each view method. Also, add some missing
Todd Larsen <tlarsen@google.com>
parents: 363
diff changeset
   255
      request: the standard Django HTTP request object
957
5b657063b23b Add missing parameter description to docstring of soc.views.models.base module methods.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 939
diff changeset
   256
      access_type : the name of the access type which should be checked
500
44ea4620c5c0 Replace old page parameter doc string description with new one for page_name.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 499
diff changeset
   257
      page_name: the page name displayed in templates as page and header title
471
dcb1f7821b39 Remove stop parameter from home_settings and site_settings views. This is something Sverre didn't mean to commit :-) Add missing params description to the models Base class docs.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 459
diff changeset
   258
      params: a dict with params for this View
373
dcd7013ae0d5 Add the Page object to the context of each view method. Also, add some missing
Todd Larsen <tlarsen@google.com>
parents: 363
diff changeset
   259
      kwargs: not used for create()
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   260
    """
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   261
663
c2dcae606699 Make base.View.create lookup the scope if appropriate
Sverre Rabbelier <srabbelier@gmail.com>
parents: 662
diff changeset
   262
    new_params = dicts.merge(params, self._params)
c2dcae606699 Make base.View.create lookup the scope if appropriate
Sverre Rabbelier <srabbelier@gmail.com>
parents: 662
diff changeset
   263
c2dcae606699 Make base.View.create lookup the scope if appropriate
Sverre Rabbelier <srabbelier@gmail.com>
parents: 662
diff changeset
   264
    if ('scope_view' in new_params) and ('scope_path' not in kwargs):
c2dcae606699 Make base.View.create lookup the scope if appropriate
Sverre Rabbelier <srabbelier@gmail.com>
parents: 662
diff changeset
   265
      view = new_params['scope_view'].view
c2dcae606699 Make base.View.create lookup the scope if appropriate
Sverre Rabbelier <srabbelier@gmail.com>
parents: 662
diff changeset
   266
      redirect = new_params['scope_redirect']
c2dcae606699 Make base.View.create lookup the scope if appropriate
Sverre Rabbelier <srabbelier@gmail.com>
parents: 662
diff changeset
   267
      return self.select(request, view, redirect,
c2dcae606699 Make base.View.create lookup the scope if appropriate
Sverre Rabbelier <srabbelier@gmail.com>
parents: 662
diff changeset
   268
                         params=params, page_name=page_name, **kwargs)
c2dcae606699 Make base.View.create lookup the scope if appropriate
Sverre Rabbelier <srabbelier@gmail.com>
parents: 662
diff changeset
   269
c2dcae606699 Make base.View.create lookup the scope if appropriate
Sverre Rabbelier <srabbelier@gmail.com>
parents: 662
diff changeset
   270
    params = new_params
1784
d5dacf2be926 Use params['logic'] instead of self._logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1703
diff changeset
   271
    logic = params['logic']
492
4abdeedfc08e Fixed redirection after creation to Just Work
Sverre Rabbelier <srabbelier@gmail.com>
parents: 490
diff changeset
   272
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   273
    # Create page is an edit page with no key fields
490
7cfa2ad62944 Allow pre-seeding a create form
Sverre Rabbelier <srabbelier@gmail.com>
parents: 482
diff changeset
   274
    empty_kwargs = {}
1784
d5dacf2be926 Use params['logic'] instead of self._logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1703
diff changeset
   275
    fields = logic.getKeyFieldNames()
410
2af7f84f4fc7 Moved all key_name related things to the logic modules
Sverre Rabbelier <srabbelier@gmail.com>
parents: 409
diff changeset
   276
    for field in fields:
490
7cfa2ad62944 Allow pre-seeding a create form
Sverre Rabbelier <srabbelier@gmail.com>
parents: 482
diff changeset
   277
      empty_kwargs[field] = None
410
2af7f84f4fc7 Moved all key_name related things to the logic modules
Sverre Rabbelier <srabbelier@gmail.com>
parents: 409
diff changeset
   278
710
edb5dbb1dea7 Add explicit access_types from the url
Sverre Rabbelier <srabbelier@gmail.com>
parents: 708
diff changeset
   279
    return self.edit(request, access_type, page_name=page_name,
708
89f1a8c2ea59 Some cleanups in role.py and site.py and create()
Sverre Rabbelier <srabbelier@gmail.com>
parents: 703
diff changeset
   280
                     params=params, seed=kwargs, **empty_kwargs)
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   281
876
0c1329d4b514 Make use of the new decorators in all applicable views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 874
diff changeset
   282
  @decorators.merge_params
0c1329d4b514 Make use of the new decorators in all applicable views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 874
diff changeset
   283
  @decorators.check_access
710
edb5dbb1dea7 Add explicit access_types from the url
Sverre Rabbelier <srabbelier@gmail.com>
parents: 708
diff changeset
   284
  def edit(self, request, access_type,
edb5dbb1dea7 Add explicit access_types from the url
Sverre Rabbelier <srabbelier@gmail.com>
parents: 708
diff changeset
   285
           page_name=None, params=None, seed=None, **kwargs):
499
d22e4fe8e64b Fix missing dots in doc strings and some other doc string corrections.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 497
diff changeset
   286
    """Displays the edit page for the entity specified by **kwargs.
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   287
610
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   288
    Params usage:
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   289
      The params dictionary is passed on to either editGet or editPost
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   290
      depending on the method type of the request. See the docstring
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   291
      for editGet and editPost on how they use it.
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   292
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   293
      rights: The rights dictionary is used to check if the user has
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   294
        the required rights to edit (or create) a new entity.
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   295
        See checkAccess for more details on how the rights dictionary
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   296
        is used to check access rights.
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   297
      name: The name value is used to construct the message_fmt of the
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   298
        raised error when there key_values do not define an existing
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   299
        entity. See DEF_CREATE_NEW_ENTITY_MSG_FMT on how the name
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   300
        (and the lower() version of it) is used.
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   301
      missing_redirect: The missing_redirect value is also used to
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   302
        construct the message_fmt mentioned above.
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   303
      error_public: The error_public value is used as the template for
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   304
        the error response mentioned above.
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   305
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   306
    Args:
373
dcd7013ae0d5 Add the Page object to the context of each view method. Also, add some missing
Todd Larsen <tlarsen@google.com>
parents: 363
diff changeset
   307
      request: the standard Django HTTP request object
957
5b657063b23b Add missing parameter description to docstring of soc.views.models.base module methods.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 939
diff changeset
   308
      access_type : the name of the access type which should be checked
500
44ea4620c5c0 Replace old page parameter doc string description with new one for page_name.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 499
diff changeset
   309
      page_name: the page name displayed in templates as page and header title
471
dcb1f7821b39 Remove stop parameter from home_settings and site_settings views. This is something Sverre didn't mean to commit :-) Add missing params description to the models Base class docs.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 459
diff changeset
   310
      params: a dict with params for this View
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   311
      kwargs: The Key Fields for the specified entity
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   312
    """
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   313
1784
d5dacf2be926 Use params['logic'] instead of self._logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1703
diff changeset
   314
    logic = params['logic']
d5dacf2be926 Use params['logic'] instead of self._logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1703
diff changeset
   315
373
dcd7013ae0d5 Add the Page object to the context of each view method. Also, add some missing
Todd Larsen <tlarsen@google.com>
parents: 363
diff changeset
   316
    context = helper.responses.getUniversalContext(request)
1357
3dd1507aa723 Prepare all views for a new modular approach to JS loading
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1349
diff changeset
   317
    helper.responses.useJavaScript(context, params['js_uses_all'])
482
839740b061ad Factor out direct use of the page object
Sverre Rabbelier <srabbelier@gmail.com>
parents: 471
diff changeset
   318
    context['page_name'] = page_name
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   319
    entity = None
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   320
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   321
    try:
439
0658c3c9a9dc Minor fixes needed for generic key name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 438
diff changeset
   322
      if all(kwargs.values()):
1784
d5dacf2be926 Use params['logic'] instead of self._logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1703
diff changeset
   323
        entity = logic.getFromKeyFieldsOr404(kwargs)
543
280a1ac6bcc1 Merge soc/logic/out_of_band.py into soc/views/out_of_band.py. Merge
Todd Larsen <tlarsen@google.com>
parents: 542
diff changeset
   324
    except out_of_band.Error, error:
490
7cfa2ad62944 Allow pre-seeding a create form
Sverre Rabbelier <srabbelier@gmail.com>
parents: 482
diff changeset
   325
      if not seed:
543
280a1ac6bcc1 Merge soc/logic/out_of_band.py into soc/views/out_of_band.py. Merge
Todd Larsen <tlarsen@google.com>
parents: 542
diff changeset
   326
        error.message_fmt = (
280a1ac6bcc1 Merge soc/logic/out_of_band.py into soc/views/out_of_band.py. Merge
Todd Larsen <tlarsen@google.com>
parents: 542
diff changeset
   327
          error.message_fmt + self.DEF_CREATE_NEW_ENTITY_MSG_FMT % {
490
7cfa2ad62944 Allow pre-seeding a create form
Sverre Rabbelier <srabbelier@gmail.com>
parents: 482
diff changeset
   328
            'entity_type_lower' : params['name'].lower(),
7cfa2ad62944 Allow pre-seeding a create form
Sverre Rabbelier <srabbelier@gmail.com>
parents: 482
diff changeset
   329
            'entity_type' : params['name'],
543
280a1ac6bcc1 Merge soc/logic/out_of_band.py into soc/views/out_of_band.py. Merge
Todd Larsen <tlarsen@google.com>
parents: 542
diff changeset
   330
            'create' : params['missing_redirect']})
646
860e17e5118f Remove cyclic imports by moving response method of out_of_band.Error class to soc.views.helper.responses module as errorResponse function. Apply changes to affected files.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 639
diff changeset
   331
        return helper.responses.errorResponse(
860e17e5118f Remove cyclic imports by moving response method of out_of_band.Error class to soc.views.helper.responses module as errorResponse function. Apply changes to affected files.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 639
diff changeset
   332
            error, request, template=params['error_public'], context=context)
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   333
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   334
    if request.method == 'POST':
876
0c1329d4b514 Make use of the new decorators in all applicable views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 874
diff changeset
   335
      return self.editPost(request, entity, context, params=params)
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   336
    else:
876
0c1329d4b514 Make use of the new decorators in all applicable views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 874
diff changeset
   337
      return self.editGet(request, entity, context, seed, params=params)
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   338
876
0c1329d4b514 Make use of the new decorators in all applicable views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 874
diff changeset
   339
  @decorators.merge_params
0c1329d4b514 Make use of the new decorators in all applicable views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 874
diff changeset
   340
  def editPost(self, request, entity, context, params=None):
639
1f92bd41b914 Some docstring fixes in few modules (soc.views.helper soc.views.models.base).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 632
diff changeset
   341
    """Processes POST requests for the specified entity.
610
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   342
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   343
    Params usage:
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   344
      The params dictionary is passed to _constructResponse when the
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   345
      form is not valid (see edit_form and create_form below). See
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   346
      the docstring of _constructResponse on how it uses it.
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   347
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   348
      edit_form: The edit_form value is used as form when there is an
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   349
        existing entity. It is provided with with the request.POST
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   350
        dictionary on construction. The collectCleanedFields method
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   351
        is called with the newly constructed form. If the form is
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   352
        not valid, it is passed as argument to _constructResponse.
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   353
      create_form: The create_form value is used in a similar way to
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   354
        edit_form, only it is used when there is no existing entity.
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   355
      edit_redirect: The edit_redirect value is used as the first part
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   356
        of the url if the form was valid. The last part of the url is
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   357
        created using the getKeySuffix method of the _logic object.
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   358
      edit_params: The edit_params dictionary is used as argument to
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   359
        redirectToChangedSuffix, it will be appended to the url in the
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   360
        standard ?key=value format.
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   361
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   362
    Args:
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   363
      request: a django request object
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   364
      entity: the entity that will be modified or created, may be None
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   365
      context: the context dictionary that will be provided to Django
876
0c1329d4b514 Make use of the new decorators in all applicable views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 874
diff changeset
   366
      params: required, a dict with params for this View
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   367
    """
399
b82852e6963e Various improvements to the generic View code
Sverre Rabbelier <srabbelier@gmail.com>
parents: 389
diff changeset
   368
1784
d5dacf2be926 Use params['logic'] instead of self._logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1703
diff changeset
   369
    logic = params['logic']
d5dacf2be926 Use params['logic'] instead of self._logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1703
diff changeset
   370
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   371
    if entity:
455
4d98832b43ba Added support for providing a custom params dict
Sverre Rabbelier <srabbelier@gmail.com>
parents: 446
diff changeset
   372
      form = params['edit_form'](request.POST)
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   373
    else:
455
4d98832b43ba Added support for providing a custom params dict
Sverre Rabbelier <srabbelier@gmail.com>
parents: 446
diff changeset
   374
      form = params['create_form'](request.POST)
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   375
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   376
    if not form.is_valid():
455
4d98832b43ba Added support for providing a custom params dict
Sverre Rabbelier <srabbelier@gmail.com>
parents: 446
diff changeset
   377
      return self._constructResponse(request, entity, context, form, params)
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   378
612
3cca81b1e5a1 Moved checkAccess and getCleanedFields into access and forms
Sverre Rabbelier <srabbelier@gmail.com>
parents: 611
diff changeset
   379
    key_name, fields = forms.collectCleanedFields(form)
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   380
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   381
    self._editPost(request, entity, fields)
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   382
459
2cfcedaf7c16 Preparation for generic user views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 458
diff changeset
   383
    if not key_name:
1784
d5dacf2be926 Use params['logic'] instead of self._logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1703
diff changeset
   384
      key_name = logic.getKeyNameFromFields(fields)
459
2cfcedaf7c16 Preparation for generic user views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 458
diff changeset
   385
1784
d5dacf2be926 Use params['logic'] instead of self._logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1703
diff changeset
   386
    entity = logic.updateOrCreateFromKeyName(fields, key_name)
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   387
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   388
    if not entity:
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   389
      return http.HttpResponseRedirect('/')
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   390
455
4d98832b43ba Added support for providing a custom params dict
Sverre Rabbelier <srabbelier@gmail.com>
parents: 446
diff changeset
   391
    page_params = params['edit_params']
1784
d5dacf2be926 Use params['logic'] instead of self._logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1703
diff changeset
   392
    params['suffix'] = logic.getKeySuffix(entity)
735
28225172af06 Make it possible to redirect anywhere after editPost
Sverre Rabbelier <srabbelier@gmail.com>
parents: 714
diff changeset
   393
28225172af06 Make it possible to redirect anywhere after editPost
Sverre Rabbelier <srabbelier@gmail.com>
parents: 714
diff changeset
   394
    request.path = params['edit_redirect'] % params
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   395
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   396
    # redirect to (possibly new) location of the entity
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   397
    # (causes 'Profile saved' message to be displayed)
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   398
    return helper.responses.redirectToChangedSuffix(
735
28225172af06 Make it possible to redirect anywhere after editPost
Sverre Rabbelier <srabbelier@gmail.com>
parents: 714
diff changeset
   399
        request, None, params=page_params)
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   400
876
0c1329d4b514 Make use of the new decorators in all applicable views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 874
diff changeset
   401
  @decorators.merge_params
0c1329d4b514 Make use of the new decorators in all applicable views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 874
diff changeset
   402
  def editGet(self, request, entity, context, seed, params=None):
639
1f92bd41b914 Some docstring fixes in few modules (soc.views.helper soc.views.models.base).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 632
diff changeset
   403
    """Processes GET requests for the specified entity.
610
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   404
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   405
    Params usage:
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   406
      The params dictionary is passed to _constructResponse, see the
639
1f92bd41b914 Some docstring fixes in few modules (soc.views.helper soc.views.models.base).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 632
diff changeset
   407
      docstring  of _constructResponse on how it uses it.
610
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   408
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   409
      save_message: The save_message list is used as argument to
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   410
        getSingleIndexedParamValue when an existing entity was saved.
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   411
      edit_form: The edit_form is used as form if there is an existing
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   412
        entity. The existing entity is passed as instance to it on
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   413
        construction. If key_name is part of it's fields it will be
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   414
        set to the entity's key().name() value. It is also passed as
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   415
        argument to the _editGet method. See the docstring for
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   416
        _editGet on how it uses it.
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   417
      create_form: The create_form is used as form if there was no
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   418
        existing entity. If the seed argument is present, it is passed
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   419
        as the 'initial' argument on construction. Otherwise, it is
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   420
        called with no arguments.
611
2ec30182e5f1 Move parameter construction into a seperate module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 610
diff changeset
   421
      submit_msg_param_name: The submit_msg_param_name value is used
2ec30182e5f1 Move parameter construction into a seperate module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 610
diff changeset
   422
        as the key part in the ?key=value construct for the submit
2ec30182e5f1 Move parameter construction into a seperate module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 610
diff changeset
   423
        message parameter (see also save_message).
610
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   424
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   425
    Args:
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   426
      request: the django request object
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   427
      entity: the entity that will be edited, may be None
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   428
      context: the context dictionary that will be provided to django
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   429
      seed: if no entity is provided, the initial values for the new entity
876
0c1329d4b514 Make use of the new decorators in all applicable views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 874
diff changeset
   430
      params: required, a dict with params for this View
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   431
    """
403
d3e545a8bd26 Some more improvements to the generic view code
Sverre Rabbelier <srabbelier@gmail.com>
parents: 402
diff changeset
   432
1784
d5dacf2be926 Use params['logic'] instead of self._logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1703
diff changeset
   433
    logic = params['logic']
d5dacf2be926 Use params['logic'] instead of self._logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1703
diff changeset
   434
    suffix = logic.getKeySuffix(entity)
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   435
1373
178bd19966fe Fixes the problem of <Entity> Saved not being
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1357
diff changeset
   436
    # remove the params from the request, this is relevant only if
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   437
    # someone bookmarked a POST page.
1373
178bd19966fe Fixes the problem of <Entity> Saved not being
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1357
diff changeset
   438
    is_self_referrer = helper.requests.isReferrerSelf(
178bd19966fe Fixes the problem of <Entity> Saved not being
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1357
diff changeset
   439
        request, suffix=suffix, url_name=params['url_name'])
178bd19966fe Fixes the problem of <Entity> Saved not being
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1357
diff changeset
   440
611
2ec30182e5f1 Move parameter construction into a seperate module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 610
diff changeset
   441
    if request.GET.get(params['submit_msg_param_name']):
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   442
      if (not entity) or (not is_self_referrer):
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   443
        return http.HttpResponseRedirect(request.path)
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   444
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   445
    if entity:
1373
178bd19966fe Fixes the problem of <Entity> Saved not being
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1357
diff changeset
   446
      # note: no message will be displayed if parameter is not present
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   447
      context['notice'] = helper.requests.getSingleIndexedParamValue(
611
2ec30182e5f1 Move parameter construction into a seperate module
Sverre Rabbelier <srabbelier@gmail.com>
parents: 610
diff changeset
   448
          request, params['submit_msg_param_name'],
455
4d98832b43ba Added support for providing a custom params dict
Sverre Rabbelier <srabbelier@gmail.com>
parents: 446
diff changeset
   449
          values=params['save_message'])
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   450
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   451
      # populate form with the existing entity
455
4d98832b43ba Added support for providing a custom params dict
Sverre Rabbelier <srabbelier@gmail.com>
parents: 446
diff changeset
   452
      form = params['edit_form'](instance=entity)
610
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   453
459
2cfcedaf7c16 Preparation for generic user views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 458
diff changeset
   454
      if 'key_name' in form.fields:
2cfcedaf7c16 Preparation for generic user views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 458
diff changeset
   455
        form.fields['key_name'].initial = entity.key().name()
610
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   456
399
b82852e6963e Various improvements to the generic View code
Sverre Rabbelier <srabbelier@gmail.com>
parents: 389
diff changeset
   457
      self._editGet(request, entity, form)
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   458
    else:
939
b341698bf3b1 Make reference picker work for create too
Sverre Rabbelier <srabbelier@gmail.com>
parents: 937
diff changeset
   459
      seed = seed if seed else {}
1414
69c812b91d37 Redone form field filling via request.GET to work on multiple fields.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1400
diff changeset
   460
      dicts.merge(seed, request.GET)
939
b341698bf3b1 Make reference picker work for create too
Sverre Rabbelier <srabbelier@gmail.com>
parents: 937
diff changeset
   461
      self._editSeed(request, seed)
b341698bf3b1 Make reference picker work for create too
Sverre Rabbelier <srabbelier@gmail.com>
parents: 937
diff changeset
   462
490
7cfa2ad62944 Allow pre-seeding a create form
Sverre Rabbelier <srabbelier@gmail.com>
parents: 482
diff changeset
   463
      if seed:
1497
1387f0d2cf45 Pass the seed to _constructResponse
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1468
diff changeset
   464
        # pass the seed through the  context to _constructResponse
1387f0d2cf45 Pass the seed to _constructResponse
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1468
diff changeset
   465
        # it will be popped before dispatching to Django
1387f0d2cf45 Pass the seed to _constructResponse
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1468
diff changeset
   466
        context['seed'] = seed
490
7cfa2ad62944 Allow pre-seeding a create form
Sverre Rabbelier <srabbelier@gmail.com>
parents: 482
diff changeset
   467
        form = params['create_form'](initial=seed)
7cfa2ad62944 Allow pre-seeding a create form
Sverre Rabbelier <srabbelier@gmail.com>
parents: 482
diff changeset
   468
      else:
7cfa2ad62944 Allow pre-seeding a create form
Sverre Rabbelier <srabbelier@gmail.com>
parents: 482
diff changeset
   469
        form = params['create_form']()
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   470
455
4d98832b43ba Added support for providing a custom params dict
Sverre Rabbelier <srabbelier@gmail.com>
parents: 446
diff changeset
   471
    return self._constructResponse(request, entity, context, form, params)
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   472
876
0c1329d4b514 Make use of the new decorators in all applicable views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 874
diff changeset
   473
  @decorators.merge_params
0c1329d4b514 Make use of the new decorators in all applicable views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 874
diff changeset
   474
  @decorators.check_access
710
edb5dbb1dea7 Add explicit access_types from the url
Sverre Rabbelier <srabbelier@gmail.com>
parents: 708
diff changeset
   475
  def list(self, request, access_type,
1667
95bc81b4cd5c Updated list to use the new order in getForFields.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1658
diff changeset
   476
           page_name=None, params=None, filter=None, order=None, **kwargs):
499
d22e4fe8e64b Fix missing dots in doc strings and some other doc string corrections.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 497
diff changeset
   477
    """Displays the list page for the entity type.
1326
237d0974654e Minor style fix
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1308
diff changeset
   478
373
dcd7013ae0d5 Add the Page object to the context of each view method. Also, add some missing
Todd Larsen <tlarsen@google.com>
parents: 363
diff changeset
   479
    Args:
dcd7013ae0d5 Add the Page object to the context of each view method. Also, add some missing
Todd Larsen <tlarsen@google.com>
parents: 363
diff changeset
   480
      request: the standard Django HTTP request object
957
5b657063b23b Add missing parameter description to docstring of soc.views.models.base module methods.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 939
diff changeset
   481
      access_type : the name of the access type which should be checked
500
44ea4620c5c0 Replace old page parameter doc string description with new one for page_name.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 499
diff changeset
   482
      page_name: the page name displayed in templates as page and header title
471
dcb1f7821b39 Remove stop parameter from home_settings and site_settings views. This is something Sverre didn't mean to commit :-) Add missing params description to the models Base class docs.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 459
diff changeset
   483
      params: a dict with params for this View
516
ec1dcd70b97e The list method in models/base.py can now use a filter to make a selection of entities to show.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 514
diff changeset
   484
      filter: a dict for the properties that the entities should have
610
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   485
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   486
    Params usage:
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   487
      The params dictionary is passed as argument to getListContent in
1326
237d0974654e Minor style fix
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1308
diff changeset
   488
      the soc.views.helper.list module. See the docstring for getListContent
237d0974654e Minor style fix
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1308
diff changeset
   489
      on how it uses it. The params dictionary is also passed as argument to
639
1f92bd41b914 Some docstring fixes in few modules (soc.views.helper soc.views.models.base).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 632
diff changeset
   490
      the _list method. See the docstring for _list on how it uses it.
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   491
    """
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   492
1667
95bc81b4cd5c Updated list to use the new order in getForFields.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1658
diff changeset
   493
    content = helper.lists.getListContent(request, params, filter, order=order)
555
3cdfb42d941b Split the list view code up in three pieces
Sverre Rabbelier <srabbelier@gmail.com>
parents: 554
diff changeset
   494
    contents = [content]
3cdfb42d941b Split the list view code up in three pieces
Sverre Rabbelier <srabbelier@gmail.com>
parents: 554
diff changeset
   495
3cdfb42d941b Split the list view code up in three pieces
Sverre Rabbelier <srabbelier@gmail.com>
parents: 554
diff changeset
   496
    return self._list(request, params, contents, page_name)
3cdfb42d941b Split the list view code up in three pieces
Sverre Rabbelier <srabbelier@gmail.com>
parents: 554
diff changeset
   497
1326
237d0974654e Minor style fix
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1308
diff changeset
   498
  def _list(self, request, params, contents, page_name, context=None):
639
1f92bd41b914 Some docstring fixes in few modules (soc.views.helper soc.views.models.base).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 632
diff changeset
   499
    """Returns the list page for the specified contents.
555
3cdfb42d941b Split the list view code up in three pieces
Sverre Rabbelier <srabbelier@gmail.com>
parents: 554
diff changeset
   500
3cdfb42d941b Split the list view code up in three pieces
Sverre Rabbelier <srabbelier@gmail.com>
parents: 554
diff changeset
   501
    Args:
3cdfb42d941b Split the list view code up in three pieces
Sverre Rabbelier <srabbelier@gmail.com>
parents: 554
diff changeset
   502
      request: the standard Django HTTP request object
3cdfb42d941b Split the list view code up in three pieces
Sverre Rabbelier <srabbelier@gmail.com>
parents: 554
diff changeset
   503
      params: a dict with params for this View
3cdfb42d941b Split the list view code up in three pieces
Sverre Rabbelier <srabbelier@gmail.com>
parents: 554
diff changeset
   504
      contents: a list of content dicts
3cdfb42d941b Split the list view code up in three pieces
Sverre Rabbelier <srabbelier@gmail.com>
parents: 554
diff changeset
   505
      page_name: the page name displayed in templates as page and header title
1296
64918d0c97ea Implemented the 2nd part of bulk acceptance.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1269
diff changeset
   506
      context: the context for this page
610
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   507
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   508
    Params usage:
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   509
      name: The name value is used to set the entity_type in the
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   510
        context so that the template can refer to it.
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   511
      name_plural: The name_plural value is used to set
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   512
        the entity_type_plural value in the context so that the
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   513
        template can refer to it.
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   514
      list_template: The list_template value is used as template for
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   515
        to display the list of all entities for this View.
555
3cdfb42d941b Split the list view code up in three pieces
Sverre Rabbelier <srabbelier@gmail.com>
parents: 554
diff changeset
   516
    """
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   517
1326
237d0974654e Minor style fix
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1308
diff changeset
   518
    context = dicts.merge(context,
1296
64918d0c97ea Implemented the 2nd part of bulk acceptance.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1269
diff changeset
   519
        helper.responses.getUniversalContext(request))
1357
3dd1507aa723 Prepare all views for a new modular approach to JS loading
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1349
diff changeset
   520
    helper.responses.useJavaScript(context, params['js_uses_all'])
555
3cdfb42d941b Split the list view code up in three pieces
Sverre Rabbelier <srabbelier@gmail.com>
parents: 554
diff changeset
   521
    context['page_name'] = page_name
3cdfb42d941b Split the list view code up in three pieces
Sverre Rabbelier <srabbelier@gmail.com>
parents: 554
diff changeset
   522
    context['list'] = soc.logic.lists.Lists(contents)
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   523
455
4d98832b43ba Added support for providing a custom params dict
Sverre Rabbelier <srabbelier@gmail.com>
parents: 446
diff changeset
   524
    context['entity_type'] = params['name']
4d98832b43ba Added support for providing a custom params dict
Sverre Rabbelier <srabbelier@gmail.com>
parents: 446
diff changeset
   525
    context['entity_type_plural'] = params['name_plural']
1458
ec06d3ee73e4 Make it possible to display a message when there are no lists
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1427
diff changeset
   526
    context['no_lists_msg'] = params['no_lists_msg']
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   527
455
4d98832b43ba Added support for providing a custom params dict
Sverre Rabbelier <srabbelier@gmail.com>
parents: 446
diff changeset
   528
    template = params['list_template']
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   529
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   530
    return helper.responses.respond(request, template, context)
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   531
876
0c1329d4b514 Make use of the new decorators in all applicable views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 874
diff changeset
   532
  @decorators.merge_params
0c1329d4b514 Make use of the new decorators in all applicable views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 874
diff changeset
   533
  @decorators.check_access
710
edb5dbb1dea7 Add explicit access_types from the url
Sverre Rabbelier <srabbelier@gmail.com>
parents: 708
diff changeset
   534
  def delete(self, request, access_type,
edb5dbb1dea7 Add explicit access_types from the url
Sverre Rabbelier <srabbelier@gmail.com>
parents: 708
diff changeset
   535
             page_name=None, params=None, **kwargs):
499
d22e4fe8e64b Fix missing dots in doc strings and some other doc string corrections.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 497
diff changeset
   536
    """Shows the delete page for the entity specified by **kwargs.
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   537
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   538
    Args:
373
dcd7013ae0d5 Add the Page object to the context of each view method. Also, add some missing
Todd Larsen <tlarsen@google.com>
parents: 363
diff changeset
   539
      request: the standard Django HTTP request object
957
5b657063b23b Add missing parameter description to docstring of soc.views.models.base module methods.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 939
diff changeset
   540
      access_type : the name of the access type which should be checked
500
44ea4620c5c0 Replace old page parameter doc string description with new one for page_name.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 499
diff changeset
   541
      page_name: the page name displayed in templates as page and header title
471
dcb1f7821b39 Remove stop parameter from home_settings and site_settings views. This is something Sverre didn't mean to commit :-) Add missing params description to the models Base class docs.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 459
diff changeset
   542
      params: a dict with params for this View
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   543
      kwargs: The Key Fields for the specified entity
610
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   544
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   545
    Params usage:
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   546
      rights: The rights dictionary is used to check if the user has
1326
237d0974654e Minor style fix
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1308
diff changeset
   547
        the required rights to delete the specified entity. See checkAccess
237d0974654e Minor style fix
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1308
diff changeset
   548
        for more details on how the rights dictionary is used to check access
639
1f92bd41b914 Some docstring fixes in few modules (soc.views.helper soc.views.models.base).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 632
diff changeset
   549
        rights.
610
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   550
      name: used in the same way as in edit(), see it's docstring for
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   551
        a more detailed explanation on how it is used.
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   552
      missing_redirect: see name
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   553
      error_edit: see name
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   554
      delete_redirect: The delete_redirect value is used as the url to
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   555
        redirect to after having successfully deleted the entity.
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   556
    """
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   557
1784
d5dacf2be926 Use params['logic'] instead of self._logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1703
diff changeset
   558
    logic = params['logic']
d5dacf2be926 Use params['logic'] instead of self._logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1703
diff changeset
   559
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   560
    try:
1784
d5dacf2be926 Use params['logic'] instead of self._logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1703
diff changeset
   561
      entity = logic.getFromKeyFieldsOr404(kwargs)
543
280a1ac6bcc1 Merge soc/logic/out_of_band.py into soc/views/out_of_band.py. Merge
Todd Larsen <tlarsen@google.com>
parents: 542
diff changeset
   562
    except out_of_band.Error, error:
280a1ac6bcc1 Merge soc/logic/out_of_band.py into soc/views/out_of_band.py. Merge
Todd Larsen <tlarsen@google.com>
parents: 542
diff changeset
   563
      error.message_fmt = (
280a1ac6bcc1 Merge soc/logic/out_of_band.py into soc/views/out_of_band.py. Merge
Todd Larsen <tlarsen@google.com>
parents: 542
diff changeset
   564
        error.message_fmt + self.DEF_CREATE_NEW_ENTITY_MSG_FMT % {
455
4d98832b43ba Added support for providing a custom params dict
Sverre Rabbelier <srabbelier@gmail.com>
parents: 446
diff changeset
   565
          'entity_type_lower' : params['name'].lower(),
4d98832b43ba Added support for providing a custom params dict
Sverre Rabbelier <srabbelier@gmail.com>
parents: 446
diff changeset
   566
          'entity_type' : params['name'],
543
280a1ac6bcc1 Merge soc/logic/out_of_band.py into soc/views/out_of_band.py. Merge
Todd Larsen <tlarsen@google.com>
parents: 542
diff changeset
   567
          'create' : params['missing_redirect']})
646
860e17e5118f Remove cyclic imports by moving response method of out_of_band.Error class to soc.views.helper.responses module as errorResponse function. Apply changes to affected files.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 639
diff changeset
   568
      return helper.responses.errorResponse(
1357
3dd1507aa723 Prepare all views for a new modular approach to JS loading
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1349
diff changeset
   569
          error, request, template=params['error_edit'])
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   570
1784
d5dacf2be926 Use params['logic'] instead of self._logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1703
diff changeset
   571
    if not logic.isDeletable(entity):
1594
b80bf089d5f7 Display a notice if the entity cannot be deleted
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1500
diff changeset
   572
      page_params = params['cannot_delete_params']
b80bf089d5f7 Display a notice if the entity cannot be deleted
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1500
diff changeset
   573
      params['suffix'] = entity.key().name()
b80bf089d5f7 Display a notice if the entity cannot be deleted
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1500
diff changeset
   574
      request.path = params['edit_redirect'] % params
b80bf089d5f7 Display a notice if the entity cannot be deleted
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1500
diff changeset
   575
b80bf089d5f7 Display a notice if the entity cannot be deleted
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1500
diff changeset
   576
      # redirect to the edit page
b80bf089d5f7 Display a notice if the entity cannot be deleted
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1500
diff changeset
   577
      # display notice that entity could not be deleted
b80bf089d5f7 Display a notice if the entity cannot be deleted
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1500
diff changeset
   578
      return helper.responses.redirectToChangedSuffix(
b80bf089d5f7 Display a notice if the entity cannot be deleted
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1500
diff changeset
   579
          request, None, params=page_params)
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   580
1784
d5dacf2be926 Use params['logic'] instead of self._logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1703
diff changeset
   581
    logic.delete(entity)
455
4d98832b43ba Added support for providing a custom params dict
Sverre Rabbelier <srabbelier@gmail.com>
parents: 446
diff changeset
   582
    redirect = params['delete_redirect']
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   583
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   584
    return http.HttpResponseRedirect(redirect)
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   585
933
7331232d6356 Added a 'pick' view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 880
diff changeset
   586
  def select(self, request, view, redirect,
7331232d6356 Added a 'pick' view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 880
diff changeset
   587
             page_name=None, params=None, filter=None):
668
77f9a6ea6e67 Some style and typo fixes in different modules.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 663
diff changeset
   588
    """Displays a list page allowing the user to select an entity.
653
5105939d3bb4 Make the 'select entity' View generic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 652
diff changeset
   589
876
0c1329d4b514 Make use of the new decorators in all applicable views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 874
diff changeset
   590
    After having selected the Scope, the user is redirected to the
0c1329d4b514 Make use of the new decorators in all applicable views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 874
diff changeset
   591
    'create a new entity' page with the scope_path set appropriately.
653
5105939d3bb4 Make the 'select entity' View generic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 652
diff changeset
   592
5105939d3bb4 Make the 'select entity' View generic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 652
diff changeset
   593
    Params usage:
5105939d3bb4 Make the 'select entity' View generic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 652
diff changeset
   594
      The params dictionary is also passed to getListContent from
5105939d3bb4 Make the 'select entity' View generic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 652
diff changeset
   595
        the helper.list module, please refer to its docstring also.
5105939d3bb4 Make the 'select entity' View generic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 652
diff changeset
   596
      The params dictionary is passed to self._list as well, refer
5105939d3bb4 Make the 'select entity' View generic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 652
diff changeset
   597
        to its docstring for details on how it uses it.
5105939d3bb4 Make the 'select entity' View generic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 652
diff changeset
   598
5105939d3bb4 Make the 'select entity' View generic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 652
diff changeset
   599
    Args:
5105939d3bb4 Make the 'select entity' View generic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 652
diff changeset
   600
      request: the standard Django HTTP request object
933
7331232d6356 Added a 'pick' view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 880
diff changeset
   601
      view: the view for which to generate the select page
7331232d6356 Added a 'pick' view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 880
diff changeset
   602
      redirect: the redirect to use
653
5105939d3bb4 Make the 'select entity' View generic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 652
diff changeset
   603
      page_name: the page name displayed in templates as page and header title
5105939d3bb4 Make the 'select entity' View generic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 652
diff changeset
   604
      params: a dict with params for this View
933
7331232d6356 Added a 'pick' view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 880
diff changeset
   605
      filter: a filter that all displayed entities should satisfy
653
5105939d3bb4 Make the 'select entity' View generic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 652
diff changeset
   606
    """
5105939d3bb4 Make the 'select entity' View generic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 652
diff changeset
   607
5105939d3bb4 Make the 'select entity' View generic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 652
diff changeset
   608
    params = dicts.merge(params, view.getParams())
5105939d3bb4 Make the 'select entity' View generic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 652
diff changeset
   609
    params = dicts.merge(params, self._params)
5105939d3bb4 Make the 'select entity' View generic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 652
diff changeset
   610
    params['list_action'] = (redirect, self._params)
663
c2dcae606699 Make base.View.create lookup the scope if appropriate
Sverre Rabbelier <srabbelier@gmail.com>
parents: 662
diff changeset
   611
    params['list_description'] = self.DEF_CREATE_INSTRUCTION_MSG_FMT % (
c2dcae606699 Make base.View.create lookup the scope if appropriate
Sverre Rabbelier <srabbelier@gmail.com>
parents: 662
diff changeset
   612
        params['name'], self._params['name'])
653
5105939d3bb4 Make the 'select entity' View generic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 652
diff changeset
   613
933
7331232d6356 Added a 'pick' view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 880
diff changeset
   614
    content = helper.lists.getListContent(request, params, filter=filter)
653
5105939d3bb4 Make the 'select entity' View generic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 652
diff changeset
   615
    contents = [content]
5105939d3bb4 Make the 'select entity' View generic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 652
diff changeset
   616
5105939d3bb4 Make the 'select entity' View generic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 652
diff changeset
   617
    return self._list(request, params, contents, page_name)
5105939d3bb4 Make the 'select entity' View generic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 652
diff changeset
   618
1796
5cd78a7aacdd Allow for query caching in pick
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1790
diff changeset
   619
  def _getPickData(self, model, filter, logic):
5cd78a7aacdd Allow for query caching in pick
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1790
diff changeset
   620
    """Retrieves the pick data for this query.
5cd78a7aacdd Allow for query caching in pick
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1790
diff changeset
   621
5cd78a7aacdd Allow for query caching in pick
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1790
diff changeset
   622
    Args:
5cd78a7aacdd Allow for query caching in pick
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1790
diff changeset
   623
      model: the model that is being queried
5cd78a7aacdd Allow for query caching in pick
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1790
diff changeset
   624
      filter: the filters that apply
5cd78a7aacdd Allow for query caching in pick
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1790
diff changeset
   625
      logic: the logic that will be used for the query
5cd78a7aacdd Allow for query caching in pick
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1790
diff changeset
   626
    """
5cd78a7aacdd Allow for query caching in pick
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1790
diff changeset
   627
5cd78a7aacdd Allow for query caching in pick
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1790
diff changeset
   628
    query = logic.getQueryForFields(filter=filter)
5cd78a7aacdd Allow for query caching in pick
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1790
diff changeset
   629
    entities = logic.getAll(query)
5cd78a7aacdd Allow for query caching in pick
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1790
diff changeset
   630
    return entities
5cd78a7aacdd Allow for query caching in pick
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1790
diff changeset
   631
933
7331232d6356 Added a 'pick' view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 880
diff changeset
   632
  @decorators.merge_params
7331232d6356 Added a 'pick' view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 880
diff changeset
   633
  @decorators.check_access
7331232d6356 Added a 'pick' view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 880
diff changeset
   634
  def pick(self, request, acces_type, page_name=None, params=None):
7331232d6356 Added a 'pick' view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 880
diff changeset
   635
    """Displays a list page allowing the user to select an entity.
7331232d6356 Added a 'pick' view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 880
diff changeset
   636
7331232d6356 Added a 'pick' view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 880
diff changeset
   637
    After having selected an entity, the user is redirected to the
7331232d6356 Added a 'pick' view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 880
diff changeset
   638
    return_url as specified in the GET args.
7331232d6356 Added a 'pick' view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 880
diff changeset
   639
7331232d6356 Added a 'pick' view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 880
diff changeset
   640
    Params usage:
7331232d6356 Added a 'pick' view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 880
diff changeset
   641
      The params dictionary is passed to self.select, refer
7331232d6356 Added a 'pick' view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 880
diff changeset
   642
        to its docstring for details on how it uses it.
7331232d6356 Added a 'pick' view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 880
diff changeset
   643
7331232d6356 Added a 'pick' view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 880
diff changeset
   644
    Args:
7331232d6356 Added a 'pick' view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 880
diff changeset
   645
      request: the standard Django HTTP request object
957
5b657063b23b Add missing parameter description to docstring of soc.views.models.base module methods.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 939
diff changeset
   646
      access_type : the name of the access type which should be checked
933
7331232d6356 Added a 'pick' view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 880
diff changeset
   647
      page_name: the page name displayed in templates as page and header title
7331232d6356 Added a 'pick' view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 880
diff changeset
   648
      params: a dict with params for this View
7331232d6356 Added a 'pick' view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 880
diff changeset
   649
    """
7331232d6356 Added a 'pick' view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 880
diff changeset
   650
1784
d5dacf2be926 Use params['logic'] instead of self._logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1703
diff changeset
   651
    logic = params['logic']
d5dacf2be926 Use params['logic'] instead of self._logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1703
diff changeset
   652
1304
b736aed728c2 Convert the QueryDict to a regular dictionary
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1296
diff changeset
   653
    # convert to a regular dict
b736aed728c2 Convert the QueryDict to a regular dictionary
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1296
diff changeset
   654
    filter = {}
b736aed728c2 Convert the QueryDict to a regular dictionary
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1296
diff changeset
   655
    for key in request.GET.keys():
b736aed728c2 Convert the QueryDict to a regular dictionary
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1296
diff changeset
   656
      # need to use getlist as we want to support multiple values
b736aed728c2 Convert the QueryDict to a regular dictionary
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1296
diff changeset
   657
      filter[key] = request.GET.getlist(key)
933
7331232d6356 Added a 'pick' view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 880
diff changeset
   658
1796
5cd78a7aacdd Allow for query caching in pick
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1790
diff changeset
   659
    if params['cache_pick']:
5cd78a7aacdd Allow for query caching in pick
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1790
diff changeset
   660
      fun =  soc.cache.logic.cache(self._getPickData)
5cd78a7aacdd Allow for query caching in pick
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1790
diff changeset
   661
    else:
5cd78a7aacdd Allow for query caching in pick
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1790
diff changeset
   662
      fun = self._getPickData
5cd78a7aacdd Allow for query caching in pick
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1790
diff changeset
   663
5cd78a7aacdd Allow for query caching in pick
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1790
diff changeset
   664
    entities = fun(logic._model, filter, logic)
1790
7655a46dcfa3 Retrieve all entities rather than just the first 1k
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1784
diff changeset
   665
1304
b736aed728c2 Convert the QueryDict to a regular dictionary
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1296
diff changeset
   666
    data = [i.toDict() for i in entities]
933
7331232d6356 Added a 'pick' view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 880
diff changeset
   667
1703
6d6813e83756 Factor out the 'json' part from pick
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   668
    return self.json(request, data)
6d6813e83756 Factor out the 'json' part from pick
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   669
6d6813e83756 Factor out the 'json' part from pick
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   670
  def json(self, request, data):
6d6813e83756 Factor out the 'json' part from pick
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   671
    """Returns data as a json object.
6d6813e83756 Factor out the 'json' part from pick
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   672
    """
6d6813e83756 Factor out the 'json' part from pick
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   673
977
d212d5f4c41a Have /entity/pick return a JSON object instead of a user view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 973
diff changeset
   674
    to_json = {
d212d5f4c41a Have /entity/pick return a JSON object instead of a user view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 973
diff changeset
   675
        'data': data,
d212d5f4c41a Have /entity/pick return a JSON object instead of a user view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 973
diff changeset
   676
        }
d212d5f4c41a Have /entity/pick return a JSON object instead of a user view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 973
diff changeset
   677
d212d5f4c41a Have /entity/pick return a JSON object instead of a user view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 973
diff changeset
   678
    json = simplejson.dumps(to_json)
d212d5f4c41a Have /entity/pick return a JSON object instead of a user view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 973
diff changeset
   679
d212d5f4c41a Have /entity/pick return a JSON object instead of a user view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 973
diff changeset
   680
    context = {'json': json}
d212d5f4c41a Have /entity/pick return a JSON object instead of a user view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 973
diff changeset
   681
    template = 'soc/json.html'
d212d5f4c41a Have /entity/pick return a JSON object instead of a user view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 973
diff changeset
   682
1331
e6fc2238bab0 Added no-cache headers to pick and bulk-accept views.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1326
diff changeset
   683
    response = responses.respond(request, template, context)
1703
6d6813e83756 Factor out the 'json' part from pick
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   684
1349
d05a9bf08c11 Hopefully fix json caching issues in IE7.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1342
diff changeset
   685
    # if the browser supports HTTP/1.1
d05a9bf08c11 Hopefully fix json caching issues in IE7.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1342
diff changeset
   686
    # post-check and pre-check and no-store for IE7
1658
65147d9fbd96 Fix too long lines and rename unused loop variables to _ in soc.views.models.base module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1594
diff changeset
   687
    response['Cache-Control'] = 'no-store, no-cache, must-revalidate, ' \
65147d9fbd96 Fix too long lines and rename unused loop variables to _ in soc.views.models.base module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1594
diff changeset
   688
        'post-check=0, pre-check=0'
1703
6d6813e83756 Factor out the 'json' part from pick
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   689
1349
d05a9bf08c11 Hopefully fix json caching issues in IE7.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 1342
diff changeset
   690
    # if the browser supports HTTP/1.0
1331
e6fc2238bab0 Added no-cache headers to pick and bulk-accept views.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1326
diff changeset
   691
    response['Pragma'] = 'no-cache'
1703
6d6813e83756 Factor out the 'json' part from pick
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1700
diff changeset
   692
1331
e6fc2238bab0 Added no-cache headers to pick and bulk-accept views.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1326
diff changeset
   693
    return response
933
7331232d6356 Added a 'pick' view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 880
diff changeset
   694
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   695
  def _editPost(self, request, entity, fields):
499
d22e4fe8e64b Fix missing dots in doc strings and some other doc string corrections.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 497
diff changeset
   696
    """Performs any required processing on the entity to post its edit page.
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   697
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   698
    Args:
399
b82852e6963e Various improvements to the generic View code
Sverre Rabbelier <srabbelier@gmail.com>
parents: 389
diff changeset
   699
      request: the django request object
639
1f92bd41b914 Some docstring fixes in few modules (soc.views.helper soc.views.models.base).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 632
diff changeset
   700
      entity: the entity to create or update from POST contents
399
b82852e6963e Various improvements to the generic View code
Sverre Rabbelier <srabbelier@gmail.com>
parents: 389
diff changeset
   701
      fields: the new field values
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   702
    """
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   703
1700
599a5ff8f422 Clean document references
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1677
diff changeset
   704
    references = self._params['references']
599a5ff8f422 Clean document references
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1677
diff changeset
   705
    for field_name, original_name, _ in references:
1268
9d092b702f92 Resolve references if they are specified
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1227
diff changeset
   706
      if field_name not in fields:
9d092b702f92 Resolve references if they are specified
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1227
diff changeset
   707
        continue
9d092b702f92 Resolve references if they are specified
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1227
diff changeset
   708
1700
599a5ff8f422 Clean document references
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1677
diff changeset
   709
      entity = fields.get('resolved_%s' % field_name)
1268
9d092b702f92 Resolve references if they are specified
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1227
diff changeset
   710
      fields[original_name] = entity
9d092b702f92 Resolve references if they are specified
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1227
diff changeset
   711
662
0e89b027b140 Make use of the new generic key_name by lookup up scope_path
Sverre Rabbelier <srabbelier@gmail.com>
parents: 653
diff changeset
   712
    # If scope_logic is not defined, this entity has no scope
677
c8f24e3078b8 Fix scope lookup for unscoped entities
Sverre Rabbelier <srabbelier@gmail.com>
parents: 668
diff changeset
   713
    if not self._params['scope_logic']:
662
0e89b027b140 Make use of the new generic key_name by lookup up scope_path
Sverre Rabbelier <srabbelier@gmail.com>
parents: 653
diff changeset
   714
      return
0e89b027b140 Make use of the new generic key_name by lookup up scope_path
Sverre Rabbelier <srabbelier@gmail.com>
parents: 653
diff changeset
   715
714
3e2ce3d8057a Add missing dots in docstrings, proper sorting of imports and small docstring typo fixes.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 710
diff changeset
   716
    # If this entity is unscoped, do not try to retrieve a scope
701
d6f5d34cff5a If an entity is unscoped, do not try to retrieve a scope
Sverre Rabbelier <srabbelier@gmail.com>
parents: 677
diff changeset
   717
    if 'scope_path' not in fields:
d6f5d34cff5a If an entity is unscoped, do not try to retrieve a scope
Sverre Rabbelier <srabbelier@gmail.com>
parents: 677
diff changeset
   718
      return
d6f5d34cff5a If an entity is unscoped, do not try to retrieve a scope
Sverre Rabbelier <srabbelier@gmail.com>
parents: 677
diff changeset
   719
1427
00a118a442f7 Scope is already set to entity.scope, so no need to overwrite in base._editPost().
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1424
diff changeset
   720
    if not entity:
1424
f8c762a33a43 Since scope does not change we do not need to call getFromKeyName every time.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1414
diff changeset
   721
      scope = self._params['scope_logic'].logic.getFromKeyName(
f8c762a33a43 Since scope does not change we do not need to call getFromKeyName every time.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1414
diff changeset
   722
          fields['scope_path'])
f8c762a33a43 Since scope does not change we do not need to call getFromKeyName every time.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1414
diff changeset
   723
      fields['scope'] = scope
446
0b479d573a4c Refactoring of {site/home}_settings to make them use base.View
Sverre Rabbelier <srabbelier@gmail.com>
parents: 445
diff changeset
   724
0b479d573a4c Refactoring of {site/home}_settings to make them use base.View
Sverre Rabbelier <srabbelier@gmail.com>
parents: 445
diff changeset
   725
  def _public(self, request, entity, context):
880
d67557c612de Fixed typo in r1446.
Todd Larsen <tlarsen@google.com>
parents: 876
diff changeset
   726
    """Performs any required processing to get an entity's public page.
446
0b479d573a4c Refactoring of {site/home}_settings to make them use base.View
Sverre Rabbelier <srabbelier@gmail.com>
parents: 445
diff changeset
   727
0b479d573a4c Refactoring of {site/home}_settings to make them use base.View
Sverre Rabbelier <srabbelier@gmail.com>
parents: 445
diff changeset
   728
    Args:
0b479d573a4c Refactoring of {site/home}_settings to make them use base.View
Sverre Rabbelier <srabbelier@gmail.com>
parents: 445
diff changeset
   729
      request: the django request object
0b479d573a4c Refactoring of {site/home}_settings to make them use base.View
Sverre Rabbelier <srabbelier@gmail.com>
parents: 445
diff changeset
   730
      entity: the entity to make public
0b479d573a4c Refactoring of {site/home}_settings to make them use base.View
Sverre Rabbelier <srabbelier@gmail.com>
parents: 445
diff changeset
   731
      context: the context object
0b479d573a4c Refactoring of {site/home}_settings to make them use base.View
Sverre Rabbelier <srabbelier@gmail.com>
parents: 445
diff changeset
   732
    """
858
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   733
    pass
446
0b479d573a4c Refactoring of {site/home}_settings to make them use base.View
Sverre Rabbelier <srabbelier@gmail.com>
parents: 445
diff changeset
   734
858
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   735
  def _export(self, request, entity, context):
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   736
    """Performs any required processing to get an entity's export page.
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   737
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   738
    Args:
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   739
      request: the django request object
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   740
      entity: the entity to export
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   741
      context: the context object
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   742
    """
446
0b479d573a4c Refactoring of {site/home}_settings to make them use base.View
Sverre Rabbelier <srabbelier@gmail.com>
parents: 445
diff changeset
   743
    pass
363
d35ffa6ca643 Add a framework for generic views
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff changeset
   744
399
b82852e6963e Various improvements to the generic View code
Sverre Rabbelier <srabbelier@gmail.com>
parents: 389
diff changeset
   745
  def _editGet(self, request, entity, form):
499
d22e4fe8e64b Fix missing dots in doc strings and some other doc string corrections.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 497
diff changeset
   746
    """Performs any required processing on the form to get its edit page.
399
b82852e6963e Various improvements to the generic View code
Sverre Rabbelier <srabbelier@gmail.com>
parents: 389
diff changeset
   747
b82852e6963e Various improvements to the generic View code
Sverre Rabbelier <srabbelier@gmail.com>
parents: 389
diff changeset
   748
    Args:
b82852e6963e Various improvements to the generic View code
Sverre Rabbelier <srabbelier@gmail.com>
parents: 389
diff changeset
   749
      request: the django request object
b82852e6963e Various improvements to the generic View code
Sverre Rabbelier <srabbelier@gmail.com>
parents: 389
diff changeset
   750
      entity: the entity to get
b82852e6963e Various improvements to the generic View code
Sverre Rabbelier <srabbelier@gmail.com>
parents: 389
diff changeset
   751
      form: the django form that will be used for the page
b82852e6963e Various improvements to the generic View code
Sverre Rabbelier <srabbelier@gmail.com>
parents: 389
diff changeset
   752
    """
b82852e6963e Various improvements to the generic View code
Sverre Rabbelier <srabbelier@gmail.com>
parents: 389
diff changeset
   753
662
0e89b027b140 Make use of the new generic key_name by lookup up scope_path
Sverre Rabbelier <srabbelier@gmail.com>
parents: 653
diff changeset
   754
    # fill in the email field with the data from the entity
677
c8f24e3078b8 Fix scope lookup for unscoped entities
Sverre Rabbelier <srabbelier@gmail.com>
parents: 668
diff changeset
   755
    if 'scope_path' in form.fields:
c8f24e3078b8 Fix scope lookup for unscoped entities
Sverre Rabbelier <srabbelier@gmail.com>
parents: 668
diff changeset
   756
      form.fields['scope_path'].initial = entity.scope_path
399
b82852e6963e Various improvements to the generic View code
Sverre Rabbelier <srabbelier@gmail.com>
parents: 389
diff changeset
   757
1700
599a5ff8f422 Clean document references
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1677
diff changeset
   758
    for field_name, _, getter in self._params['references']:
1268
9d092b702f92 Resolve references if they are specified
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1227
diff changeset
   759
      try:
9d092b702f92 Resolve references if they are specified
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1227
diff changeset
   760
        field = getter(entity)
9d092b702f92 Resolve references if they are specified
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1227
diff changeset
   761
        form.fields[field_name].initial = field.link_id if field else None
9d092b702f92 Resolve references if they are specified
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1227
diff changeset
   762
      except db.Error:
9d092b702f92 Resolve references if they are specified
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1227
diff changeset
   763
        pass
9d092b702f92 Resolve references if they are specified
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1227
diff changeset
   764
1414
69c812b91d37 Redone form field filling via request.GET to work on multiple fields.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1400
diff changeset
   765
    for field, value in request.GET.iteritems():
69c812b91d37 Redone form field filling via request.GET to work on multiple fields.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1400
diff changeset
   766
      if field in form.fields:
69c812b91d37 Redone form field filling via request.GET to work on multiple fields.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1400
diff changeset
   767
        form.fields[field].initial = value
934
9fcc08971efe Add a 'pick' view to the appropriate views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 933
diff changeset
   768
497
73666a7cd718 Added a default _editSeed method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 495
diff changeset
   769
  def _editSeed(self, request, seed):
499
d22e4fe8e64b Fix missing dots in doc strings and some other doc string corrections.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 497
diff changeset
   770
    """Performs any required processing on the form to get its edit page.
497
73666a7cd718 Added a default _editSeed method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 495
diff changeset
   771
73666a7cd718 Added a default _editSeed method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 495
diff changeset
   772
    Args:
73666a7cd718 Added a default _editSeed method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 495
diff changeset
   773
      request: the django request object
73666a7cd718 Added a default _editSeed method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 495
diff changeset
   774
      seed: the fields to seed the create page with
73666a7cd718 Added a default _editSeed method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 495
diff changeset
   775
    """
1414
69c812b91d37 Redone form field filling via request.GET to work on multiple fields.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 1400
diff changeset
   776
    pass
497
73666a7cd718 Added a default _editSeed method
Sverre Rabbelier <srabbelier@gmail.com>
parents: 495
diff changeset
   777
1269
62b1e9ee46c5 Add an _editContext hook
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1268
diff changeset
   778
  def _editContext(self, request, context):
62b1e9ee46c5 Add an _editContext hook
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1268
diff changeset
   779
    """Performs any required processing on the context for edit pages.
62b1e9ee46c5 Add an _editContext hook
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1268
diff changeset
   780
62b1e9ee46c5 Add an _editContext hook
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1268
diff changeset
   781
    Args:
62b1e9ee46c5 Add an _editContext hook
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1268
diff changeset
   782
      request: the django request object
62b1e9ee46c5 Add an _editContext hook
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1268
diff changeset
   783
      context: the context dictionary that will be used
62b1e9ee46c5 Add an _editContext hook
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1268
diff changeset
   784
    """
62b1e9ee46c5 Add an _editContext hook
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1268
diff changeset
   785
62b1e9ee46c5 Add an _editContext hook
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1268
diff changeset
   786
    pass
62b1e9ee46c5 Add an _editContext hook
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1268
diff changeset
   787
1339
c007dc7d00ca Make _constructResponsoe take an optional template
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1331
diff changeset
   788
  def _constructResponse(self, request, entity, context,
c007dc7d00ca Make _constructResponsoe take an optional template
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1331
diff changeset
   789
                         form, params, template=None):
499
d22e4fe8e64b Fix missing dots in doc strings and some other doc string corrections.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 497
diff changeset
   790
    """Updates the context and returns a response for the specified arguments.
399
b82852e6963e Various improvements to the generic View code
Sverre Rabbelier <srabbelier@gmail.com>
parents: 389
diff changeset
   791
b82852e6963e Various improvements to the generic View code
Sverre Rabbelier <srabbelier@gmail.com>
parents: 389
diff changeset
   792
    Args:
b82852e6963e Various improvements to the generic View code
Sverre Rabbelier <srabbelier@gmail.com>
parents: 389
diff changeset
   793
      request: the django request object
610
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   794
      entity: the entity that is used and set in the context
399
b82852e6963e Various improvements to the generic View code
Sverre Rabbelier <srabbelier@gmail.com>
parents: 389
diff changeset
   795
      context: the context to be used
610
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   796
      form: the form that will be used and set in the context
471
dcb1f7821b39 Remove stop parameter from home_settings and site_settings views. This is something Sverre didn't mean to commit :-) Add missing params description to the models Base class docs.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 459
diff changeset
   797
      params: a dict with params for this View
1339
c007dc7d00ca Make _constructResponsoe take an optional template
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1331
diff changeset
   798
      template: if specified, this template is
610
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   799
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   800
    Params usage:
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   801
      name: The name_plural value is used to set the entity_type
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   802
       value in the context so that the template can refer to it.
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   803
      name_plural: same as name, but used to set entity_type_plural
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   804
      name_short: same as name, but used to set entity_type_short
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   805
      url_name: same as name, but used to set entity_type_url
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   806
      edit_template: The edit_template value is used as template when
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   807
        there is an existing entity to display the edit page for the
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   808
        specified entity.
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   809
      create_template: similar to edit_template, but is used when
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   810
        there is no existing entity.
399
b82852e6963e Various improvements to the generic View code
Sverre Rabbelier <srabbelier@gmail.com>
parents: 389
diff changeset
   811
    """
b82852e6963e Various improvements to the generic View code
Sverre Rabbelier <srabbelier@gmail.com>
parents: 389
diff changeset
   812
1784
d5dacf2be926 Use params['logic'] instead of self._logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1703
diff changeset
   813
    logic = params['logic']
d5dacf2be926 Use params['logic'] instead of self._logic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1703
diff changeset
   814
    suffix = logic.getKeySuffix(entity)
403
d3e545a8bd26 Some more improvements to the generic view code
Sverre Rabbelier <srabbelier@gmail.com>
parents: 402
diff changeset
   815
399
b82852e6963e Various improvements to the generic View code
Sverre Rabbelier <srabbelier@gmail.com>
parents: 389
diff changeset
   816
    context['form'] = form
b82852e6963e Various improvements to the generic View code
Sverre Rabbelier <srabbelier@gmail.com>
parents: 389
diff changeset
   817
    context['entity'] = entity
403
d3e545a8bd26 Some more improvements to the generic view code
Sverre Rabbelier <srabbelier@gmail.com>
parents: 402
diff changeset
   818
    context['entity_suffix'] = suffix
455
4d98832b43ba Added support for providing a custom params dict
Sverre Rabbelier <srabbelier@gmail.com>
parents: 446
diff changeset
   819
    context['entity_type'] = params['name']
4d98832b43ba Added support for providing a custom params dict
Sverre Rabbelier <srabbelier@gmail.com>
parents: 446
diff changeset
   820
    context['entity_type_plural'] = params['name_plural']
4d98832b43ba Added support for providing a custom params dict
Sverre Rabbelier <srabbelier@gmail.com>
parents: 446
diff changeset
   821
    context['entity_type_short'] = params['name_short']
502
e1e24c0a4e82 Add new parameters to views: url_name which is name used in urls (instead of using lower entity names) and module_name which is used for constructing django urls. Append changes to all affected files. Fix some title names. Change urls that included underscores like "site_settings" into urls with slash "site/settings". Plus some other minor fixes.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 500
diff changeset
   822
    context['entity_type_url'] = params['url_name']
1035
04229d710ce9 Allow for setting a edit_cancel_redirect
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1017
diff changeset
   823
    context['edit_cancel_redirect'] = params.get('edit_cancel_redirect')
935
09f47e08f805 Adust the as_table tag to render a pick link if appropriate
Sverre Rabbelier <srabbelier@gmail.com>
parents: 934
diff changeset
   824
    context['return_url'] = request.path
399
b82852e6963e Various improvements to the generic View code
Sverre Rabbelier <srabbelier@gmail.com>
parents: 389
diff changeset
   825
874
30e9629bf590 Fixed two trivial bugs
Sverre Rabbelier <srabbelier@gmail.com>
parents: 858
diff changeset
   826
    if params.get('export_content_type') and entity:
858
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   827
      context['export_link'] = redirects.getExportRedirect(entity, params)
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   828
1339
c007dc7d00ca Make _constructResponsoe take an optional template
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1331
diff changeset
   829
    if not template:
c007dc7d00ca Make _constructResponsoe take an optional template
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1331
diff changeset
   830
      if entity:
c007dc7d00ca Make _constructResponsoe take an optional template
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1331
diff changeset
   831
        template = params['edit_template']
c007dc7d00ca Make _constructResponsoe take an optional template
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1331
diff changeset
   832
      else:
c007dc7d00ca Make _constructResponsoe take an optional template
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1331
diff changeset
   833
        template = params['create_template']
399
b82852e6963e Various improvements to the generic View code
Sverre Rabbelier <srabbelier@gmail.com>
parents: 389
diff changeset
   834
1269
62b1e9ee46c5 Add an _editContext hook
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1268
diff changeset
   835
    self._editContext(request, context)
1497
1387f0d2cf45 Pass the seed to _constructResponse
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1468
diff changeset
   836
1387f0d2cf45 Pass the seed to _constructResponse
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1468
diff changeset
   837
    # remove the seed from the context before dispatching to Django
1387f0d2cf45 Pass the seed to _constructResponse
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1468
diff changeset
   838
    context.pop('seed', None)
1387f0d2cf45 Pass the seed to _constructResponse
Sverre Rabbelier <srabbelier@gmail.com>
parents: 1468
diff changeset
   839
399
b82852e6963e Various improvements to the generic View code
Sverre Rabbelier <srabbelier@gmail.com>
parents: 389
diff changeset
   840
    return helper.responses.respond(request, template, context)
b82852e6963e Various improvements to the generic View code
Sverre Rabbelier <srabbelier@gmail.com>
parents: 389
diff changeset
   841
652
02323664d532 Cleanups in preparation of general selector view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 651
diff changeset
   842
  def getParams(self):
668
77f9a6ea6e67 Some style and typo fixes in different modules.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 663
diff changeset
   843
    """Returns this view's params attribute.
652
02323664d532 Cleanups in preparation of general selector view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 651
diff changeset
   844
    """
02323664d532 Cleanups in preparation of general selector view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 651
diff changeset
   845
02323664d532 Cleanups in preparation of general selector view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 651
diff changeset
   846
    return self._params
02323664d532 Cleanups in preparation of general selector view
Sverre Rabbelier <srabbelier@gmail.com>
parents: 651
diff changeset
   847
876
0c1329d4b514 Make use of the new decorators in all applicable views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 874
diff changeset
   848
  @decorators.merge_params
1017
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 977
diff changeset
   849
  def getSidebarMenus(self, id, user, params=None):
499
d22e4fe8e64b Fix missing dots in doc strings and some other doc string corrections.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 497
diff changeset
   850
    """Returns an dictionary with one sidebar entry.
493
6976c4d8d0ac Refactor the sidebar to use Django templates
Sverre Rabbelier <srabbelier@gmail.com>
parents: 492
diff changeset
   851
6976c4d8d0ac Refactor the sidebar to use Django templates
Sverre Rabbelier <srabbelier@gmail.com>
parents: 492
diff changeset
   852
    Args:
610
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   853
      params: a dict with params for this View
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   854
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   855
    Params usage:
614
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 613
diff changeset
   856
      The params dictionary is passed as argument to getSidebarItems
639
1f92bd41b914 Some docstring fixes in few modules (soc.views.helper soc.views.models.base).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 632
diff changeset
   857
      from the soc.views.sitemap.sidebar module, see the docstring
1f92bd41b914 Some docstring fixes in few modules (soc.views.helper soc.views.models.base).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 632
diff changeset
   858
      of _getSidebarItems on how it uses it.
493
6976c4d8d0ac Refactor the sidebar to use Django templates
Sverre Rabbelier <srabbelier@gmail.com>
parents: 492
diff changeset
   859
    """
6976c4d8d0ac Refactor the sidebar to use Django templates
Sverre Rabbelier <srabbelier@gmail.com>
parents: 492
diff changeset
   860
1017
6ad4fdb48840 Cache access checks and disable sidebar caching
Sverre Rabbelier <srabbelier@gmail.com>
parents: 977
diff changeset
   861
    return sitemap.sidebar.getSidebarMenus(id, user, params=params)
494
5e9c656a1b68 Refactored SiteMap to be generic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 493
diff changeset
   862
876
0c1329d4b514 Make use of the new decorators in all applicable views
Sverre Rabbelier <srabbelier@gmail.com>
parents: 874
diff changeset
   863
  @decorators.merge_params
494
5e9c656a1b68 Refactored SiteMap to be generic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 493
diff changeset
   864
  def getDjangoURLPatterns(self, params=None):
614
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 613
diff changeset
   865
    """Retrieves a list of sidebar entries for this view
610
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   866
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   867
    Params usage:
614
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 613
diff changeset
   868
      The params dictionary is passed to the getDjangoURLPatterns
639
1f92bd41b914 Some docstring fixes in few modules (soc.views.helper soc.views.models.base).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 632
diff changeset
   869
      function in the soc.views.sitemap.sitemap module, see the
1f92bd41b914 Some docstring fixes in few modules (soc.views.helper soc.views.models.base).
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 632
diff changeset
   870
      docstring of getDjangoURLPatterns on how it uses it.
610
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   871
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   872
    Args:
e0bd276ffd82 Documented params usage in soc/views/models/base.py
Sverre Rabbelier <srabbelier@gmail.com>
parents: 606
diff changeset
   873
      params: a dict with params for this View
494
5e9c656a1b68 Refactored SiteMap to be generic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 493
diff changeset
   874
    """
5e9c656a1b68 Refactored SiteMap to be generic
Sverre Rabbelier <srabbelier@gmail.com>
parents: 493
diff changeset
   875
613
4880ffa9f3ba Moved getDjangoURLPatterns to sitemap.sitemap
Sverre Rabbelier <srabbelier@gmail.com>
parents: 612
diff changeset
   876
    return sitemap.sitemap.getDjangoURLPatterns(params)
858
e79e7a22326f Add an export() view, and implement it as text/text for Document.
Todd Larsen <tlarsen@google.com>
parents: 755
diff changeset
   877