Rearrange imports in home.py so they apply to new discussed format (separate "from ..." and "import ..." blocks). Add Delete Document functionality.
authorPawel Solyga <Pawel.Solyga@gmail.com>
Mon, 13 Oct 2008 17:41:20 +0000
changeset 314 dfaf249c12b2
parent 313 c25b1b680ba7
child 315 c4f1a07ee340
Rearrange imports in home.py so they apply to new discussed format (separate "from ..." and "import ..." blocks). Add Delete Document functionality. Patch by: Pawel Solyga Review by: to-be-reviewed
app/soc/logic/site/map.py
app/soc/templates/soc/site/docs/edit.html
app/soc/views/site/docs/edit.py
app/soc/views/site/home.py
--- a/app/soc/logic/site/map.py	Mon Oct 13 06:19:43 2008 +0000
+++ b/app/soc/logic/site/map.py	Mon Oct 13 17:41:20 2008 +0000
@@ -162,6 +162,14 @@
   short_name='Modify Site Document',
   parent=site_home_edit)
 
+site_docs_delete = page.Page(
+  page.Url(
+    r'^site/docs/%s/delete$' % path_link_name.PATH_LINKNAME_ARGS_PATTERN,
+    'soc.views.site.docs.edit.delete'),
+  'Site: Delete Existing Document',
+  short_name='Delete Site Document',
+  parent=site_home_edit)
+
 site_docs_list = page.Page(
   page.Url(
     r'^site/docs/list$',
--- a/app/soc/templates/soc/site/docs/edit.html	Mon Oct 13 06:19:43 2008 +0000
+++ b/app/soc/templates/soc/site/docs/edit.html	Mon Oct 13 17:41:20 2008 +0000
@@ -55,6 +55,11 @@
    <td>
     <input type="button" onclick="location.href='/'" value="Cancel"/>
    </td>
+   {% if existing_doc %}
+   <td>
+    <input type="button" onclick="location.href='/site/docs/{{ existing_doc.partial_path }}/{{ existing_doc.link_name }}/delete'" value="Delete"/>
+   </td>
+   {% endif %}
    {% endblock %}
   </tr>
  </table>
--- a/app/soc/views/site/docs/edit.py	Mon Oct 13 06:19:43 2008 +0000
+++ b/app/soc/views/site/docs/edit.py	Mon Oct 13 17:41:20 2008 +0000
@@ -278,3 +278,48 @@
   context['form'] = form
 
   return helper.responses.respond(request, template, context)
+
+
+def delete(request, partial_path=None, link_name=None,
+           template=DEF_SITE_DOCS_EDIT_TMPL):
+  """Request handler for a Developer to delete Document Model entity.
+
+  Args:
+    request: the standard django request object
+    partial_path: the Document's site-unique "path" extracted from the URL,
+      minus the trailing link_name
+    link_name: the last portion of the Document's site-unique "path"
+      extracted from the URL
+    template: the "sibling" template (or a search list of such templates)
+      from which to construct the public.html template name (or names)
+
+  Returns:
+    A subclass of django.http.HttpResponse which redirects 
+    to /site/docs/list.
+  """
+
+  try:
+    access.checkIsDeveloper(request)
+  except  soc.views.out_of_band.AccessViolationResponse, alt_response:
+    return alt_response.response()
+
+  # create default template context for use with any templates
+  context = helper.responses.getUniversalContext(request)
+
+  existing_doc = None
+  path = path_link_name.combinePath([partial_path, link_name])
+
+  # try to fetch Document entity corresponding to path if one exists    
+  try:
+    if path:
+      existing_doc = document.logic.getFromFields(partial_path=partial_path,
+                                                  link_name=link_name)
+  except out_of_band.ErrorResponse, error:
+    # show custom 404 page when path doesn't exist in Datastore
+    error.message = error.message + DEF_CREATE_NEW_DOC_MSG
+    return simple.errorResponse(request, error, template, context)
+
+  if existing_doc:
+    document.logic.delete(existing_doc)
+
+  return http.HttpResponseRedirect('/site/docs/list')
\ No newline at end of file
--- a/app/soc/views/site/home.py	Mon Oct 13 06:19:43 2008 +0000
+++ b/app/soc/views/site/home.py	Mon Oct 13 17:41:20 2008 +0000
@@ -28,13 +28,12 @@
 
 
 from google.appengine.api import users
+from google.appengine.ext import db
 
 from django import http
 from django import shortcuts
 from django import newforms as forms
 
-
-import soc.logic.models.settings
 from soc.logic import models
 from soc.logic import out_of_band
 from soc.logic import validate
@@ -43,14 +42,15 @@
 from soc.views import simple
 from soc.views import helper
 from soc.views.helper import access
-import soc.views.out_of_band
+
+import soc.logic.models.settings
+import soc.models.document
+import soc.models.site_settings
 import soc.views.helper.forms
 import soc.views.helper.responses
 import soc.views.helper.templates
 import soc.views.helper.widgets
-
-import soc.models.site_settings
-import soc.models.document
+import soc.views.out_of_band
 
 
 class DocumentForm(helper.forms.DbModelForm):
@@ -114,7 +114,12 @@
 
   if site_settings:
     context['site_settings'] = site_settings
-    site_doc = site_settings.home
+    
+    # check if ReferenceProperty to home Document is valid
+    try:
+      site_doc = site_settings.home
+    except db.Error:
+      site_doc = None
   
     if site_doc:
       site_doc.content = helper.templates.unescape(site_doc.content)
@@ -185,7 +190,13 @@
     if site_settings:
       # populate form with the existing SiteSettings entity
       settings_form = SiteSettingsForm(instance=site_settings)
-      site_doc = site_settings.home
+      
+      # check if ReferenceProperty to home Document is valid
+      try:
+        site_doc = site_settings.home
+      except db.Error:
+        site_doc = None
+    
     else:
       # no SiteSettings entity exists for this key_name, so show a blank form
       settings_form = SiteSettingsForm()