app/soc/views/document/show.py
author Todd Larsen <tlarsen@google.com>
Sat, 15 Nov 2008 03:12:33 +0000
changeset 481 94834a1e6c01
parent 477 8a8b1bd035c4
child 482 839740b061ad
permissions -rw-r--r--
Attempt to rename User.id to User.account, in preparation for making User be derived from Linkable, which will have a property named 'id'. Patch by: Todd Larsen
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
238
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     1
#!/usr/bin/python2.5
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     2
#
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     3
# Copyright 2008 the Melange authors.
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     4
#
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     5
# Licensed under the Apache License, Version 2.0 (the "License");
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     6
# you may not use this file except in compliance with the License.
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     7
# You may obtain a copy of the License at
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     8
#
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     9
#   http://www.apache.org/licenses/LICENSE-2.0
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    10
#
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    11
# Unless required by applicable law or agreed to in writing, software
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    12
# distributed under the License is distributed on an "AS IS" BASIS,
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    13
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    14
# See the License for the specific language governing permissions and
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    15
# limitations under the License.
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    16
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    17
"""Document viewers.
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    18
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    19
public: how the general public sees a Document
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    20
"""
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    21
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    22
__authors__ = [
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    23
  '"Todd Larsen" <tlarsen@google.com>',
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    24
  ]
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    25
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    26
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    27
from soc.logic import out_of_band
336
9d5b8880260f Fix not working docs show view. Document show view wasn't updated when the logic refactor was made.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 316
diff changeset
    28
from soc.logic import path_link_name
9d5b8880260f Fix not working docs show view. Document show view wasn't updated when the logic refactor was made.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 316
diff changeset
    29
from soc.logic.models import document
316
9efdc7bc3565 Add missing blank lines between imports and sort all of the imports.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 298
diff changeset
    30
from soc.views import helper
238
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    31
from soc.views import simple
365
74dec172944e Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 361
diff changeset
    32
from soc.views.helper import decorators
316
9efdc7bc3565 Add missing blank lines between imports and sort all of the imports.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 298
diff changeset
    33
272
00cea07656c0 Move helpers/response_helpers.py to helper/responses.py.
Todd Larsen <tlarsen@google.com>
parents: 270
diff changeset
    34
import soc.views.helper.responses
270
7dd6d8347b56 Move helpers/template_helpers.py to helper/templates.py.
Todd Larsen <tlarsen@google.com>
parents: 242
diff changeset
    35
import soc.views.helper.templates
238
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    36
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    37
477
8a8b1bd035c4 Moved from docs -> document
Sverre Rabbelier <srabbelier@gmail.com>
parents: 398
diff changeset
    38
DEF_DOCS_PUBLIC_TMPL = 'soc/document/public.html'
238
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    39
365
74dec172944e Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 361
diff changeset
    40
@decorators.view
358
843d83b87282 Add page=None parameter to all views. Information from page argument (which is soc.logic.site.page.Page object) is going to be used later in views code and for some context values. Fix some indentions in __doc__ strings. Add proper __doc__ string for all() function in sponsor/list.py module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 336
diff changeset
    41
def public(request, page=None, partial_path=None, link_name=None,
238
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    42
           template=DEF_DOCS_PUBLIC_TMPL):
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    43
  """How the "general public" sees a Document.
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    44
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    45
  Args:
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    46
    request: the standard django request object
358
843d83b87282 Add page=None parameter to all views. Information from page argument (which is soc.logic.site.page.Page object) is going to be used later in views code and for some context values. Fix some indentions in __doc__ strings. Add proper __doc__ string for all() function in sponsor/list.py module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 336
diff changeset
    47
    page: a soc.logic.site.page.Page object which is abstraction that combines 
843d83b87282 Add page=None parameter to all views. Information from page argument (which is soc.logic.site.page.Page object) is going to be used later in views code and for some context values. Fix some indentions in __doc__ strings. Add proper __doc__ string for all() function in sponsor/list.py module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 336
diff changeset
    48
      a Django view with sidebar menu info
238
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    49
    partial_path: the Document's site-unique "path" extracted from the URL,
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    50
      minus the trailing link_name
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    51
    link_name: the last portion of the Document's site-unique "path"
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    52
      extracted from the URL
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    53
    template: the "sibling" template (or a search list of such templates)
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    54
      from which to construct the public.html template name (or names)
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    55
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    56
  Returns:
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    57
    A subclass of django.http.HttpResponse which either contains the form to
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    58
    be filled out, or a redirect to the correct view in the interface.
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    59
  """
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    60
  # create default template context for use with any templates
272
00cea07656c0 Move helpers/response_helpers.py to helper/responses.py.
Todd Larsen <tlarsen@google.com>
parents: 270
diff changeset
    61
  context = helper.responses.getUniversalContext(request)
238
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    62
242
17984abf0c74 Some TODOs on access control that I didn't want to forget.
Todd Larsen <tlarsen@google.com>
parents: 238
diff changeset
    63
  # TODO: there eventually needs to be a call to some controller logic that
17984abf0c74 Some TODOs on access control that I didn't want to forget.
Todd Larsen <tlarsen@google.com>
parents: 238
diff changeset
    64
  #   implements some sort of access controls, based on the currently
17984abf0c74 Some TODOs on access control that I didn't want to forget.
Todd Larsen <tlarsen@google.com>
parents: 238
diff changeset
    65
  #   logged-in User's Roles, etc.
17984abf0c74 Some TODOs on access control that I didn't want to forget.
Todd Larsen <tlarsen@google.com>
parents: 238
diff changeset
    66
17984abf0c74 Some TODOs on access control that I didn't want to forget.
Todd Larsen <tlarsen@google.com>
parents: 238
diff changeset
    67
  # TODO: based on the User's Roles, Documents that the User can edit
17984abf0c74 Some TODOs on access control that I didn't want to forget.
Todd Larsen <tlarsen@google.com>
parents: 238
diff changeset
    68
  #   should display a link to a document edit form
336
9d5b8880260f Fix not working docs show view. Document show view wasn't updated when the logic refactor was made.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 316
diff changeset
    69
  
9d5b8880260f Fix not working docs show view. Document show view wasn't updated when the logic refactor was made.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 316
diff changeset
    70
  doc = None
242
17984abf0c74 Some TODOs on access control that I didn't want to forget.
Todd Larsen <tlarsen@google.com>
parents: 238
diff changeset
    71
298
c76a366c7ab4 Replace almost all occurences of linkname with link_name
Sverre Rabbelier <srabbelier@gmail.com>
parents: 272
diff changeset
    72
  # try to fetch User entity corresponding to link_name if one exists
336
9d5b8880260f Fix not working docs show view. Document show view wasn't updated when the logic refactor was made.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 316
diff changeset
    73
  path = path_link_name.combinePath([partial_path, link_name])
9d5b8880260f Fix not working docs show view. Document show view wasn't updated when the logic refactor was made.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 316
diff changeset
    74
9d5b8880260f Fix not working docs show view. Document show view wasn't updated when the logic refactor was made.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 316
diff changeset
    75
  # try to fetch Document entity corresponding to path if one exists    
238
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    76
  try:
336
9d5b8880260f Fix not working docs show view. Document show view wasn't updated when the logic refactor was made.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 316
diff changeset
    77
    if path:
9d5b8880260f Fix not working docs show view. Document show view wasn't updated when the logic refactor was made.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 316
diff changeset
    78
      doc = document.logic.getFromFields(partial_path=partial_path,
9d5b8880260f Fix not working docs show view. Document show view wasn't updated when the logic refactor was made.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 316
diff changeset
    79
                                         link_name=link_name)
238
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    80
  except out_of_band.ErrorResponse, error:
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    81
    # show custom 404 page when Document path doesn't exist in Datastore
361
465e4df617de Make page argument required for errorResponse and requestLogin functions in simple.py and update affected files. Some keyword argument changes to in user/profile.py. All the changes are based on comments to r817.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 358
diff changeset
    82
    return simple.errorResponse(request, page, error, template, context)
238
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    83
270
7dd6d8347b56 Move helpers/template_helpers.py to helper/templates.py.
Todd Larsen <tlarsen@google.com>
parents: 242
diff changeset
    84
  doc.content = helper.templates.unescape(doc.content)
398
aa1e786a0b1d Rename 'existing_doc' and 'document' to entity
Sverre Rabbelier <srabbelier@gmail.com>
parents: 365
diff changeset
    85
  context['entity'] = doc
238
d6b533f99a45 A very simplistic Document viewer.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    86
365
74dec172944e Create decorators module in view/helper and add view decorator that catches exceptions like DeadlineExceededError, MemoryError, AssertionError (this code is being moved from respond function). Add view decorator to all view functions. In addition remove not needed imports from all affected files and fix too long lines.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 361
diff changeset
    87
  return helper.responses.respond(request, template, context)