Commit 839aeb97 authored by Tres Seaver's avatar Tres Seaver

PEP8, remove unused imports, normalize docstrings.

parent 13518798
......@@ -11,17 +11,13 @@
#
##############################################################################
"""DTML Method objects.
$Id$
"""
import sys
from urllib import quote
from AccessControl.SecurityInfo import ClassSecurityInfo
from AccessControl.Role import RoleManager
from Acquisition import Implicit
from App.class_init import InitializeClass
from App.Dialogs import MessageDialog
from App.special_dtml import DTMLFile
from App.special_dtml import HTML
from DateTime.DateTime import DateTime
......@@ -33,20 +29,17 @@ from AccessControl.Permissions import view as View
from AccessControl.Permissions import ftp_access
from AccessControl.DTML import RestrictedDTML
from AccessControl.requestmethod import requestmethod
from webdav.common import rfc1123_date
from OFS.Cache import Cacheable
from OFS.History import Historical
from OFS.History import html_diff
from OFS.SimpleItem import Item_w__name__
from OFS.ZDOM import ElementWithTitle
from webdav.Lockable import ResourceLockedError
from zExceptions import Forbidden
from zExceptions.TracebackSupplement import PathTracebackSupplement
from ZPublisher.Iterators import IStreamIterator
from zope.contenttype import guess_content_type
from OFS.Cache import Cacheable
from OFS.History import Historical
from OFS.History import html_diff
from OFS.PropertyManager import PropertyManager
from OFS.SimpleItem import Item_w__name__
from OFS.SimpleItem import pretty_tb
from OFS.ZDOM import ElementWithTitle
_marker = [] # Create a new marker object.
......@@ -59,12 +52,12 @@ class DTMLMethod(RestrictedDTML,
Historical,
Cacheable,
):
"""DTML Method objects are DocumentTemplate.HTML objects that act
as methods of their containers."""
meta_type='DTML Method'
_proxy_roles=()
index_html=None # Prevent accidental acquisition
_cache_namespace_keys=()
""" DocumentTemplate.HTML objects that act as methods of their containers.
"""
meta_type = 'DTML Method'
_proxy_roles = ()
index_html = None # Prevent accidental acquisition
_cache_namespace_keys = ()
security = ClassSecurityInfo()
security.declareObjectProtected(View)
......@@ -72,21 +65,18 @@ class DTMLMethod(RestrictedDTML,
# Documents masquerade as functions:
class func_code:
pass
func_code=func_code()
func_code.co_varnames = 'self','REQUEST','RESPONSE'
func_code = func_code()
func_code.co_varnames = 'self', 'REQUEST', 'RESPONSE'
func_code.co_argcount = 3
manage_options = (
(
{'label':'Edit', 'action':'manage_main',
'help':('OFSP','DTML-DocumentOrMethod_Edit.stx')},
#upload is deprecated
#{'label':'Upload', 'action':'manage_uploadForm',
# 'help':('OFSP','DTML-DocumentOrMethod_Upload.stx')},
{'label':'View', 'action':'',
'help':('OFSP','DTML-DocumentOrMethod_View.stx')},
{'label':'Proxy', 'action':'manage_proxyForm',
'help':('OFSP','DTML-DocumentOrMethod_Proxy.stx')},
{'label': 'Edit', 'action': 'manage_main',
'help': ('OFSP', 'DTML-DocumentOrMethod_Edit.stx')},
{'label': 'View', 'action': '',
'help': ('OFSP', 'DTML-DocumentOrMethod_View.stx')},
{'label': 'Proxy', 'action': 'manage_proxyForm',
'help': ('OFSP', 'DTML-DocumentOrMethod_Proxy.stx')},
)
+ Historical.manage_options
+ RoleManager.manage_options
......@@ -94,21 +84,25 @@ class DTMLMethod(RestrictedDTML,
+ Cacheable.manage_options
)
# Careful in permissiong changes--used by DTMLDocument!
# Careful in permission changes--used by DTMLDocument!
security.declareProtected(change_dtml_methods, 'manage_historyCopy')
security.declareProtected(change_dtml_methods, 'manage_beforeHistoryCopy')
security.declareProtected(change_dtml_methods, 'manage_afterHistoryCopy')
# support a more reasonable default for content-type
# for http HEAD requests.
default_content_type='text/html'
# More reasonable default for content-type for http HEAD requests.
default_content_type = 'text/html'
security.declareProtected(View, '__call__')
def __call__(self, client=None, REQUEST={}, RESPONSE=None, **kw):
"""Render the document given a client object, REQUEST mapping,
Response, and key word arguments."""
"""Render using the given client object
o If client is not passed, we are being called as a sub-template:
don't do any error propagation.
o If supplied, use the REQUEST mapping, Response, and key word
arguments.
"""
if not self._cache_namespace_keys:
data = self.ZCacheable_get(default=_marker)
if data is not _marker:
......@@ -129,10 +123,10 @@ class DTMLMethod(RestrictedDTML,
return data
__traceback_supplement__ = (PathTracebackSupplement, self)
kw['document_id'] =self.getId()
kw['document_title']=self.title
kw['document_id'] = self.getId()
kw['document_title'] = self.title
security=getSecurityManager()
security = getSecurityManager()
security.addContext(self)
if self.__dict__.has_key('validate'):
first_time_through = 0
......@@ -143,14 +137,16 @@ class DTMLMethod(RestrictedDTML,
if client is None:
# Called as subtemplate, so don't need error propagation!
r=apply(HTML.__call__, (self, client, REQUEST), kw)
if RESPONSE is None: result = r
else: result = decapitate(r, RESPONSE)
r = apply(HTML.__call__, (self, client, REQUEST), kw)
if RESPONSE is None:
result = r
else:
result = decapitate(r, RESPONSE)
if not self._cache_namespace_keys:
self.ZCacheable_set(result)
return result
r=apply(HTML.__call__, (self, client, REQUEST), kw)
r = apply(HTML.__call__, (self, client, REQUEST), kw)
if type(r) is not type('') or RESPONSE is None:
if not self._cache_namespace_keys:
self.ZCacheable_set(r)
......@@ -161,12 +157,12 @@ class DTMLMethod(RestrictedDTML,
if first_time_through:
del self.__dict__['validate']
have_key=RESPONSE.headers.has_key
have_key = RESPONSE.headers.has_key
if not (have_key('content-type') or have_key('Content-Type')):
if self.__dict__.has_key('content_type'):
c=self.content_type
c = self.content_type
else:
c, e=guess_content_type(self.getId(), r)
c, e = guess_content_type(self.getId(), r)
RESPONSE.setHeader('Content-Type', c)
result = decapitate(r, RESPONSE)
if not self._cache_namespace_keys:
......@@ -183,8 +179,10 @@ class DTMLMethod(RestrictedDTML,
# cache entry.
kw = {}
for key in self._cache_namespace_keys:
try: val = md[key]
except: val = None
try:
val = md[key]
except:
val = None
kw[key] = val
return self.ZCacheable_get(keywords=kw, default=default)
return default
......@@ -194,8 +192,10 @@ class DTMLMethod(RestrictedDTML,
if self._cache_namespace_keys:
kw = {}
for key in self._cache_namespace_keys:
try: val = md[key]
except: val = None
try:
val = md[key]
except:
val = None
kw[key] = val
self.ZCacheable_set(result, keywords=kw)
......@@ -204,17 +204,14 @@ class DTMLMethod(RestrictedDTML,
security.declareProtected(change_dtml_methods, 'getCacheNamespaceKeys')
def getCacheNamespaceKeys(self):
'''
Returns the cacheNamespaceKeys.
'''
""" Return the cacheNamespaceKeys.
"""
return self._cache_namespace_keys
security.declareProtected(change_dtml_methods, 'setCacheNamespaceKeys')
def setCacheNamespaceKeys(self, keys, REQUEST=None):
'''
Sets the list of names that should be looked up in the
namespace to provide a cache key.
'''
""" Set the list of names looked up to provide a cache key.
"""
ks = []
for key in keys:
key = str(key).strip()
......@@ -229,34 +226,34 @@ class DTMLMethod(RestrictedDTML,
return len(self.raw)
# deprecated; use get_size!
getSize=get_size
getSize = get_size
security.declareProtected(change_dtml_methods, 'manage')
security.declareProtected(change_dtml_methods, 'manage_editForm')
manage_editForm=DTMLFile('dtml/documentEdit', globals())
manage_editForm = DTMLFile('dtml/documentEdit', globals())
manage_editForm._setName('manage_editForm')
# deprecated!
manage_uploadForm=manage_editForm
manage_uploadForm = manage_editForm
security.declareProtected(change_dtml_methods, 'manage_main')
manage=manage_main=manage_editDocument=manage_editForm
manage = manage_main = manage_editDocument = manage_editForm
security.declareProtected(change_proxy_roles, 'manage_proxyForm')
manage_proxyForm=DTMLFile('dtml/documentProxy', globals())
_size_changes={
'Bigger': (5,5),
'Smaller': (-5,-5),
'Narrower': (0,-5),
'Wider': (0,5),
'Taller': (5,0),
'Shorter': (-5,0),
manage_proxyForm = DTMLFile('dtml/documentProxy', globals())
_size_changes = {
'Bigger': (5, 5),
'Smaller': (-5, -5),
'Narrower': (0, -5),
'Wider': (0, 5),
'Taller': (5, 0),
'Shorter': (-5, 0),
}
def _er(self,data,title,SUBMIT,dtpref_cols,dtpref_rows,REQUEST):
dr,dc = self._size_changes[SUBMIT]
def _er(self, data, title, SUBMIT, dtpref_cols, dtpref_rows, REQUEST):
dr, dc = self._size_changes[SUBMIT]
rows = str(max(1, int(dtpref_rows) + dr))
cols = str(dtpref_cols)
if cols.endswith('%'):
......@@ -267,15 +264,17 @@ class DTMLMethod(RestrictedDTML,
setCookie = REQUEST["RESPONSE"].setCookie
setCookie("dtpref_rows", rows, path='/', expires=e)
setCookie("dtpref_cols", cols, path='/', expires=e)
REQUEST.other.update({"dtpref_cols":cols, "dtpref_rows":rows})
REQUEST.other.update({"dtpref_cols": cols, "dtpref_rows": rows})
return self.manage_main(self, REQUEST, title=title,
__str__=self.quotedHTML(data))
security.declareProtected(change_dtml_methods, 'manage_edit')
def manage_edit(self,data,title,SUBMIT='Change',dtpref_cols='100%',
dtpref_rows='20',REQUEST=None):
"""
Replaces a Documents contents with Data, Title with Title.
def manage_edit(self, data, title,
SUBMIT='Change',
dtpref_cols='100%',
dtpref_rows='20',
REQUEST=None):
""" Replace contents with 'data', title with 'title'.
The SUBMIT parameter is also used to change the size of the editing
area on the default Document edit screen. If the value is "Smaller",
......@@ -285,56 +284,63 @@ class DTMLMethod(RestrictedDTML,
"""
self._validateProxy(REQUEST)
if self._size_changes.has_key(SUBMIT):
return self._er(data,title,SUBMIT,dtpref_cols,dtpref_rows,REQUEST)
return self._er(data, title,
SUBMIT, dtpref_cols, dtpref_rows, REQUEST)
if self.wl_isLocked():
raise ResourceLockedError, 'This DTML Method is locked via WebDAV'
raise ResourceLockedError('This DTML Method is locked via WebDAV')
self.title=str(title)
if type(data) is not type(''): data=data.read()
self.title = str(title)
if type(data) is not type(''):
data = data.read()
self.munge(data)
self.ZCacheable_invalidate()
if REQUEST:
message="Saved changes."
return self.manage_main(self,REQUEST,manage_tabs_message=message)
message = "Saved changes."
return self.manage_main(self, REQUEST, manage_tabs_message=message)
security.declareProtected(change_dtml_methods, 'manage_upload')
def manage_upload(self,file='', REQUEST=None):
"""Replace the contents of the document with the text in file."""
def manage_upload(self, file='', REQUEST=None):
""" Replace the contents of the document with the text in 'file'.
"""
self._validateProxy(REQUEST)
if self.wl_isLocked():
raise ResourceLockedError, 'This DTML Method is locked via WebDAV'
raise ResourceLockedError('This DTML Method is locked via WebDAV')
if type(file) is not type(''):
if REQUEST and not file:
raise ValueError, 'No file specified'
file=file.read()
raise ValueError('No file specified')
file = file.read()
self.munge(file)
self.ZCacheable_invalidate()
if REQUEST:
message="Saved changes."
return self.manage_main(self,REQUEST,manage_tabs_message=message)
message = "Saved changes."
return self.manage_main(self, REQUEST, manage_tabs_message=message)
def manage_haveProxy(self,r): return r in self._proxy_roles
def manage_haveProxy(self, r):
return r in self._proxy_roles
def _validateProxy(self, request, roles=None):
if roles is None: roles=self._proxy_roles
if not roles: return
user=u=getSecurityManager().getUser()
user=user.allowed
if roles is None:
roles = self._proxy_roles
if not roles:
return
user = u = getSecurityManager().getUser()
user = user.allowed
for r in roles:
if r and not user(self, (r,)):
user=None
user = None
break
if user is not None: return
if user is not None:
return
raise Forbidden, (
raise Forbidden(
'You are not authorized to change <em>%s</em> because you '
'do not have proxy roles.\n<!--%s, %s-->' % (self.__name__, u, roles))
'do not have proxy roles.\n<!--%s, %s-->'
% (self.__name__, u, roles))
security.declareProtected(change_proxy_roles, 'manage_proxy')
@requestmethod('POST')
......@@ -342,20 +348,23 @@ class DTMLMethod(RestrictedDTML,
"Change Proxy Roles"
self._validateProxy(REQUEST, roles)
self._validateProxy(REQUEST)
self._proxy_roles=tuple(roles)
self._proxy_roles = tuple(roles)
self.ZCacheable_invalidate()
if REQUEST:
message="Saved changes."
return self.manage_proxyForm(self,REQUEST,manage_tabs_message=message)
message = "Saved changes."
return self.manage_proxyForm(self, REQUEST,
manage_tabs_message=message)
security.declareProtected(view_management_screens, 'PrincipiaSearchSource')
def PrincipiaSearchSource(self):
"Support for searching - the document's contents are searched."
""" Support for searching - the document's contents are searched.
"""
return self.read()
security.declareProtected(view_management_screens, 'document_src')
def document_src(self, REQUEST=None, RESPONSE=None):
"""Return unprocessed document source."""
""" Return unprocessed document source.
"""
if RESPONSE is not None:
RESPONSE.setHeader('Content-Type', 'text/plain')
return self.read()
......@@ -364,10 +373,11 @@ class DTMLMethod(RestrictedDTML,
security.declareProtected(change_dtml_methods, 'PUT')
def PUT(self, REQUEST, RESPONSE):
"""Handle HTTP PUT requests."""
""" Handle FTP / HTTP PUT requests.
"""
self.dav__init(REQUEST, RESPONSE)
self.dav__simpleifhandler(REQUEST, RESPONSE, refresh=1)
body=REQUEST.get('BODY', '')
body = REQUEST.get('BODY', '')
self._validateProxy(REQUEST)
self.munge(body)
self.ZCacheable_invalidate()
......@@ -379,7 +389,8 @@ class DTMLMethod(RestrictedDTML,
security.declareProtected(ftp_access, 'manage_FTPget')
def manage_FTPget(self):
"Get source for FTP download"
""" Get source for FTP download.
"""
return self.read()
......@@ -419,7 +430,8 @@ def decapitate(html, RESPONSE=None):
eolen = 2
else:
eol = html.find( '\n', spos)
if eol < 0: return html
if eol < 0:
return html
eolen = 1
header.append(html[spos:eol].strip())
spos = eol + eolen
......@@ -444,16 +456,21 @@ def addDTMLMethod(self, id, title='', file='', REQUEST=None, submit=None):
"""Add a DTML Method object with the contents of file. If
'file' is empty, default document text is used.
"""
if type(file) is not type(''): file=file.read()
if not file: file=default_dm_html
id=str(id)
title=str(title)
ob=DTMLMethod(file, __name__=id)
ob.title=title
id=self._setObject(id, ob)
if type(file) is not type(''):
file = file.read()
if not file:
file = default_dm_html
id = str(id)
title = str(title)
ob = DTMLMethod(file, __name__=id)
ob.title = title
id = self._setObject(id, ob)
if REQUEST is not None:
try: u=self.DestinationURL()
except: u=REQUEST['URL1']
if submit==" Add and Edit ": u="%s/%s" % (u,quote(id))
try:
u = self.DestinationURL()
except:
u = REQUEST['URL1']
if submit == " Add and Edit ":
u = "%s/%s" % (u, quote(id))
REQUEST.RESPONSE.redirect(u+'/manage_main')
return ''
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment