Commit 006ee05c authored by Hanno Schlichting's avatar Hanno Schlichting

flake8

parent ae2c1d38
[flake8]
ignore = N801,N802,N803,N805,N806,N812,E301
exclude = bootstrap.py
......@@ -19,7 +19,8 @@ from AccessControl.class_init import InitializeClass
from App.special_dtml import DTMLFile
from DateTime.DateTime import DateTime
class CacheManager:
class CacheManager(object):
"""Cache management mix-in
"""
_cache_age = 60
......@@ -47,46 +48,46 @@ class CacheManager:
def cache_age(self):
return self._cache_age
def manage_cache_age(self,value,REQUEST):
def manage_cache_age(self, value, REQUEST):
"set cache age"
db = self._getDB()
self._cache_age = value
db.setCacheDeactivateAfter(value)
if REQUEST is not None:
response=REQUEST['RESPONSE']
response.redirect(REQUEST['URL1']+'/manage_cacheParameters')
response = REQUEST['RESPONSE']
response.redirect(REQUEST['URL1'] + '/manage_cacheParameters')
def cache_size(self):
db = self._getDB()
return db.getCacheSize()
def manage_cache_size(self,value,REQUEST):
def manage_cache_size(self, value, REQUEST):
"set cache size"
db = self._getDB()
db.setCacheSize(value)
if REQUEST is not None:
response=REQUEST['RESPONSE']
response.redirect(REQUEST['URL1']+'/manage_cacheParameters')
response = REQUEST['RESPONSE']
response.redirect(REQUEST['URL1'] + '/manage_cacheParameters')
def manage_full_sweep(self,value,REQUEST):
def manage_full_sweep(self, value, REQUEST):
"Perform a full sweep through the cache"
db = self._getDB()
db.cacheFullSweep(value)
if REQUEST is not None:
response=REQUEST['RESPONSE']
response.redirect(REQUEST['URL1']+'/manage_cacheGC')
response = REQUEST['RESPONSE']
response.redirect(REQUEST['URL1'] + '/manage_cacheGC')
def manage_minimize(self,value=1,REQUEST=None):
def manage_minimize(self, value=1, REQUEST=None):
"Perform a full sweep through the cache"
# XXX Add a deprecation warning about value?
self._getDB().cacheMinimize()
if REQUEST is not None:
response=REQUEST['RESPONSE']
response.redirect(REQUEST['URL1']+'/manage_cacheGC')
response = REQUEST['RESPONSE']
response.redirect(REQUEST['URL1'] + '/manage_cacheGC')
def cache_detail(self, REQUEST=None):
"""
......@@ -129,7 +130,7 @@ class CacheManager:
else:
state = 'G' # ghost
res.append('%d %-34s %6d %s %s%s' % (
dict['conn_no'], `dict['oid']`, dict['rc'],
dict['conn_no'], repr(dict['oid']), dict['rc'],
state, dict['klass'], idinfo))
REQUEST.RESPONSE.setHeader('Content-Type', 'text/plain')
return '\n'.join(res)
......@@ -158,7 +159,7 @@ class CacheManager:
am = self._getActivityMonitor()
length = int(length)
if length < 0:
raise ValueError, 'length can not be negative'
raise ValueError('length can not be negative')
if am is not None:
am.setHistoryLength(length)
self._history_length = length # Restore on startup
......@@ -235,7 +236,7 @@ class CacheManager:
'start': div['start'],
'end': div['end'],
'time_offset': time_offset,
})
})
if analysis:
start_time = DateTime(divs[0]['start']).aCommonZ()
......
......@@ -16,9 +16,11 @@ import os
import sys
import time
# Legacy API for this module; 3rd party code may use this.
from os.path import realpath
from Acquisition import aq_base
# BBB
from os.path import realpath # NOQA
attrget = getattr
# These are needed because the various date formats below must
# be in english per the RFCs. That means we can't use strftime,
......@@ -26,38 +28,45 @@ from os.path import realpath
weekday_abbr = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
weekday_full = ['Monday', 'Tuesday', 'Wednesday', 'Thursday',
'Friday', 'Saturday', 'Sunday']
monthname = [None, 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
monthname = [None, 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
def iso8601_date(ts=None):
# Return an ISO 8601 formatted date string, required
# for certain DAV properties.
# '2000-11-10T16:21:09-08:00
if ts is None: ts=time.time()
if ts is None:
ts = time.time()
return time.strftime('%Y-%m-%dT%H:%M:%SZ', time.gmtime(ts))
def rfc850_date(ts=None):
# Return an HTTP-date formatted date string.
# 'Friday, 10-Nov-00 16:21:09 GMT'
if ts is None: ts=time.time()
if ts is None:
ts = time.time()
year, month, day, hh, mm, ss, wd, y, z = time.gmtime(ts)
return "%s, %02d-%3s-%2s %02d:%02d:%02d GMT" % (
weekday_full[wd],
day, monthname[month],
str(year)[2:],
hh, mm, ss)
weekday_full[wd],
day, monthname[month],
str(year)[2:],
hh, mm, ss)
def rfc1123_date(ts=None):
# Return an RFC 1123 format date string, required for
# use in HTTP Date headers per the HTTP 1.1 spec.
# 'Fri, 10 Nov 2000 16:21:09 GMT'
if ts is None: ts=time.time()
if ts is None:
ts = time.time()
year, month, day, hh, mm, ss, wd, y, z = time.gmtime(ts)
return "%s, %02d %3s %4d %02d:%02d:%02d GMT" % (weekday_abbr[wd],
day, monthname[month],
year,
hh, mm, ss)
return "%s, %02d %3s %4d %02d:%02d:%02d GMT" % (
weekday_abbr[wd],
day, monthname[month],
year,
hh, mm, ss)
def absattr(attr, callable=callable):
# Return the absolute value of an attribute,
......@@ -66,9 +75,6 @@ def absattr(attr, callable=callable):
return attr()
return attr
def aq_base(ob, getattr=getattr):
# Return the aq_base of an object.
return getattr(ob, 'aq_base', ob)
def is_acquired(ob, hasattr=hasattr, aq_base=aq_base, absattr=absattr):
# Return true if this object is not considered to be
......@@ -82,7 +88,7 @@ def is_acquired(ob, hasattr=hasattr, aq_base=aq_base, absattr=absattr):
return 0
parent = aq_base(ob.aq_parent)
absId = absattr(ob.id)
absId = absattr(ob.id)
if hasattr(parent, absId):
# Consider direct attributes not acquired
......@@ -104,22 +110,20 @@ def is_acquired(ob, hasattr=hasattr, aq_base=aq_base, absattr=absattr):
ob.isTopLevelPrincipiaApplicationObject:
# This object the top level
return 0
return 1 # This object is acquired by our measure
return 1 # This object is acquired by our measure
def package_home(globals_dict):
__name__=globals_dict['__name__']
m=sys.modules[__name__]
if hasattr(m,'__path__'):
r=m.__path__[0]
__name__ = globals_dict['__name__']
m = sys.modules[__name__]
if hasattr(m, '__path__'):
r = m.__path__[0]
elif "." in __name__:
r=sys.modules[__name__[:__name__.rfind('.')]].__path__[0]
r = sys.modules[__name__[:__name__.rfind('.')]].__path__[0]
else:
r=__name__
r = __name__
return os.path.abspath(r)
# We really only want the 3-argument version of getattr:
attrget = getattr
def Dictionary(**kw): return kw # Sorry Guido
def Dictionary(**kw):
return kw # Sorry Guido
......@@ -46,8 +46,8 @@ def _getPath(home, prefix, name, suffixes):
fn = os.path.join(dir, name)
if fn == name:
# Paranoia
raise ValueError('The file name, %s, should be a simple file name'
% name)
raise ValueError(
'The file name, %s, should be a simple file name' % name)
for suffix in suffixes:
if suffix:
......@@ -87,8 +87,8 @@ def getPath(prefix, name, checkProduct=1, suffixes=('',), cfg=None):
"""
dir, ignored = os.path.split(name)
if dir:
raise ValueError('The file name, %s, should be a simple file name'
% name)
raise ValueError(
'The file name, %s, should be a simple file name' % name)
if checkProduct:
dot = name.find('.')
......@@ -120,27 +120,28 @@ def getPath(prefix, name, checkProduct=1, suffixes=('',), cfg=None):
try:
dot = name.rfind('.')
if dot > 0:
realName = name[dot+1:]
realName = name[dot + 1:]
toplevel = name[:dot]
rdot = toplevel.rfind('.')
if rdot > -1:
module = __import__(toplevel, globals(), {}, toplevel[rdot+1:])
module = __import__(
toplevel, globals(), {}, toplevel[rdot + 1:])
else:
module = __import__(toplevel)
prefix = os.path.join(module.__path__[0], prefix, realName)
for suffix in suffixes:
if suffix:
fn = "%s.%s" % (prefix, suffix)
else:
fn = prefix
if os.path.exists(fn):
if os.path.exists(fn):
return fn
except:
except Exception:
pass
def getObject(module, name, reload=0,
# The use of a mutable default is intentional here,
......@@ -163,15 +164,15 @@ def getObject(module, name, reload=0,
else:
prefix = module
path = getPath('Extensions', prefix, suffixes=('','py','pyc'))
path = getPath('Extensions', prefix, suffixes=('', 'py', 'pyc'))
if path is None:
raise NotFound("The specified module, '%s', couldn't be found."
% module)
raise NotFound(
"The specified module, '%s', couldn't be found." % module)
__traceback_info__= path, module
__traceback_info__ = path, module
base, ext = os.path.splitext(path)
if ext=='.pyc':
if ext == '.pyc':
file = open(path, 'rb')
binmod = imp.load_compiled('Extension', path, file)
file.close()
......
......@@ -51,13 +51,13 @@ class Product(Base):
security = ClassSecurityInfo()
meta_type='Product'
version=''
meta_type = 'Product'
version = ''
thisIsAnInstalledProduct = True
title = 'This is a non-persistent product wrapper.'
def __init__(self, id):
self.id=id
self.id = id
security.declarePublic('Destination')
def Destination(self):
......@@ -70,7 +70,7 @@ InitializeClass(Product)
class ProductDispatcher(Implicit):
" "
# Allow access to factory dispatchers
__allow_access_to_unprotected_subobjects__=1
__allow_access_to_unprotected_subobjects__ = 1
def __getitem__(self, name):
return self.__bobo_traverse__(None, name)
......@@ -84,80 +84,82 @@ class ProductDispatcher(Implicit):
_packages = _product_packages()
package = _packages.get(name, None)
dispatcher_class=getattr(
dispatcher_class = getattr(
package,
'__FactoryDispatcher__',
FactoryDispatcher)
product = Product(name)
dispatcher=dispatcher_class(product, self.aq_parent, REQUEST)
dispatcher = dispatcher_class(product, self.aq_parent, REQUEST)
return dispatcher.__of__(self)
class FactoryDispatcher(Implicit):
"""Provide a namespace for product "methods"
"""
security = ClassSecurityInfo()
_owner=UnownableOwner
_owner = UnownableOwner
def __init__(self, product, dest, REQUEST=None):
product = aq_base(product)
self._product=product
self._d=dest
self._product = product
self._d = dest
if REQUEST is not None:
try:
v=REQUEST['URL']
except KeyError: pass
v = REQUEST['URL']
except KeyError:
pass
else:
v=v[:v.rfind('/')]
self._u=v[:v.rfind('/')]
v = v[:v.rfind('/')]
self._u = v[:v.rfind('/')]
security.declarePublic('Destination')
def Destination(self):
"Return the destination for factory output"
return self.__dict__['_d'] # we don't want to wrap the result!
return self.__dict__['_d'] # we don't want to wrap the result!
security.declarePublic('this')
this=Destination
this = Destination
security.declarePublic('DestinationURL')
def DestinationURL(self):
"Return the URL for the destination for factory output"
url=getattr(self, '_u', None)
url = getattr(self, '_u', None)
if url is None:
url=self.Destination().absolute_url()
url = self.Destination().absolute_url()
return url
def __getattr__(self, name):
p=self.__dict__['_product']
d=p.__dict__
if hasattr(p,name) and name in d:
m=d[name]
w=getattr(m, '_permissionMapper', None)
p = self.__dict__['_product']
d = p.__dict__
if hasattr(p, name) and name in d:
m = d[name]
w = getattr(m, '_permissionMapper', None)
if w is not None:
m=aqwrap(m, aq_base(w), self)
m = aqwrap(m, aq_base(w), self)
return m
# Waaa
m = 'Products.%s' % p.id
if m in sys.modules and sys.modules[m]._m.has_key(name):
if m in sys.modules and sys.modules[m]._m.has_key(name): # NOQA
return sys.modules[m]._m[name]
raise AttributeError, name
raise AttributeError(name)
# Provide acquired indicators for critical OM methods:
_setObject = _getOb = Acquired
# Make sure factory methods are unowned:
_owner=UnownableOwner
_owner = UnownableOwner
# Provide a replacement for manage_main that does a redirection:
def manage_main(trueself, self, REQUEST, update_menu=0):
"""Implement a contents view by redirecting to the true view
"""
d = update_menu and '/manage_main?update_menu=1' or '/manage_main'
REQUEST['RESPONSE'].redirect(self.DestinationURL()+d)
REQUEST['RESPONSE'].redirect(self.DestinationURL() + d)
InitializeClass(FactoryDispatcher)
......@@ -60,10 +60,10 @@ if ppathpat is not None:
psep = os.pathsep
if ppathpat.find('%(') >= 0:
newppath = (ppathpat % {
'PRODUCTS_PATH': psep.join(ppath ),
'SOFTWARE_PRODUCTS': psep.join(ppath[ippart:] ),
'PRODUCTS_PATH': psep.join(ppath),
'SOFTWARE_PRODUCTS': psep.join(ppath[ippart:]),
'INSTANCE_PRODUCTS': ip,
}).split(psep)
}).split(psep)
else:
newppath = ppathpat.split(psep)
del ppath[:]
......
......@@ -50,32 +50,32 @@ class ImageFile(Explicit):
_prefix = PREFIX
if not os.path.isabs(path):
warnings.warn(NON_PREFIX_WARNING, UserWarning, 2)
elif type(_prefix) is not type(''):
_prefix=package_home(_prefix)
elif not isinstance(_prefix, str):
_prefix = package_home(_prefix)
# _prefix is ignored if path is absolute
path = os.path.join(_prefix, path)
self.path=path
self.path = path
if getConfiguration().debug_mode:
# In development mode, a shorter time is handy
max_age = 60 # One minute
max_age = 60 # One minute
else:
# A longer time reduces latency in production mode
max_age = 3600 # One hour
max_age = 3600 # One hour
self.cch = 'public,max-age=%d' % max_age
# First try to get the content_type by name
content_type, enc=guess_content_type(path, default='failed')
content_type, enc = guess_content_type(path, default='failed')
if content_type == 'failed':
# This failed, lets look into the file content
img = open(path, 'rb')
data = img.read(1024) # 1k should be enough
data = img.read(1024) # 1k should be enough
img.close()
content_type, enc=guess_content_type(path, data)
content_type, enc = guess_content_type(path, data)
if content_type:
self.content_type=content_type
self.content_type = content_type
else:
ext = os.path.splitext(path)[-1].replace('.', '')
self.content_type = 'image/%s' % ext
......@@ -97,7 +97,7 @@ class ImageFile(Explicit):
RESPONSE.setHeader('Content-Length', str(self.size).replace('L', ''))
header = REQUEST.get_header('If-Modified-Since', None)
if header is not None:
header=header.split(';')[0]
header = header.split(';')[0]
# Some proxies seem to send invalid date strings for this
# header. If the date string is not valid, we ignore it
# rather than raise an error to be generally consistent
......@@ -105,14 +105,14 @@ class ImageFile(Explicit):
# understand the screwy date string as a lucky side effect
# of the way they parse it).
try:
mod_since = long(DateTime(header).timeTime())
mod_since = int(DateTime(header).timeTime())
except:
mod_since = None
if mod_since is not None:
if getattr(self, 'lmt', None):
last_mod = long(self.lmt)
last_mod = int(self.lmt)
else:
last_mod = long(0)
last_mod = int(0)
if last_mod > 0 and last_mod <= mod_since:
RESPONSE.setStatus(304)
return ''
......
......@@ -33,31 +33,28 @@ class Tabs(Base):
security = ClassSecurityInfo()
security.declarePublic('manage_tabs')
manage_tabs=DTMLFile('dtml/manage_tabs', globals())
manage_tabs = DTMLFile('dtml/manage_tabs', globals())
manage_options =()
manage_options = ()
security.declarePublic('filtered_manage_options')
def filtered_manage_options(self, REQUEST=None):
result=[]
result = []
try:
options=tuple(self.manage_options)
options = tuple(self.manage_options)
except TypeError:
options=tuple(self.manage_options())
options = tuple(self.manage_options())
for d in options:
filter=d.get('filter', None)
filter = d.get('filter', None)
if filter is not None and not filter(self):
continue
path=d.get('path', None)
path = d.get('path', None)
if path is None:
path=d['action']
path = d['action']
o=self.restrictedTraverse(path, None)
o = self.restrictedTraverse(path, None)
if o is None:
continue
......@@ -65,23 +62,22 @@ class Tabs(Base):
return result
manage_workspace__roles__ = ('Authenticated',)
manage_workspace__roles__=('Authenticated',)
def manage_workspace(self, REQUEST):
"""Dispatch to first interface in manage_options
"""
options=self.filtered_manage_options(REQUEST)
options = self.filtered_manage_options(REQUEST)
try:
m=options[0]['action']
if m=='manage_workspace':
raise TypeError
m = options[0]['action']
if m == 'manage_workspace':
raise TypeError
except (IndexError, KeyError):
raise Unauthorized, (
raise Unauthorized(
'You are not authorized to view this object.')
if m.find('/'):
raise Redirect, (
"%s/%s" % (REQUEST['URL1'], m))
raise Redirect("%s/%s" % (REQUEST['URL1'], m))
return getattr(self, m)(self, REQUEST)
......@@ -101,33 +97,34 @@ class Tabs(Base):
script = '%s/%s' % (script, step)
out.append(linkpat % (escape(script, 1), escape(unquote(step))))
script = '%s/%s' % (script, last)
out.append('<a class="strong-link" href="%s/manage_workspace">%s</a>'%
(escape(script, 1), escape(unquote(last))))
out.append(
'<a class="strong-link" href="%s/manage_workspace">%s</a>' %
(escape(script, 1), escape(unquote(last))))
return '%s%s' % (url, '/'.join(out))
def tabs_path_info(self, script, path,
# Static vars
quote=urllib.quote,
):
out=[]
while path[:1]=='/':
out = []
while path[:1] == '/':
path = path[1:]
while path[-1:]=='/':
while path[-1:] == '/':
path = path[:-1]
while script[:1]=='/':
while script[:1] == '/':
script = script[1:]
while script[-1:]=='/':
while script[-1:] == '/':
script = script[:-1]
path=path.split('/')[:-1]
path = path.split('/')[:-1]
if script:
path = [script] + path
if not path:
return ''
script=''
last=path[-1]
script = ''
last = path[-1]
del path[-1]
for p in path:
script="%s/%s" % (script, quote(p))
script = "%s/%s" % (script, quote(p))
out.append('<a href="%s/manage_workspace">%s</a>' % (script, p))
out.append(last)
return '/'.join(out)
......@@ -143,33 +140,33 @@ class Navigation(Base):
security = ClassSecurityInfo()
security.declareProtected(view_management_screens, 'manage')
manage =DTMLFile('dtml/manage', globals())
manage = DTMLFile('dtml/manage', globals())
security.declareProtected(view_management_screens, 'manage_menu')
manage_menu =DTMLFile('dtml/menu', globals())
manage_menu = DTMLFile('dtml/menu', globals())
security.declareProtected(view_management_screens, 'manage_page_header')
manage_page_header=DTMLFile('dtml/manage_page_header', globals())
manage_page_header = DTMLFile('dtml/manage_page_header', globals())
security.declareProtected(view_management_screens, 'manage_page_footer')
manage_page_footer=DTMLFile('dtml/manage_page_footer', globals())
manage_page_footer = DTMLFile('dtml/manage_page_footer', globals())
security.declarePublic('manage_form_title')
manage_form_title =DTMLFile('dtml/manage_form_title', globals(),
form_title='Add Form',
help_product=None,
help_topic=None)
manage_form_title = DTMLFile('dtml/manage_form_title', globals(),
form_title='Add Form',
help_product=None,
help_topic=None)
manage_form_title._setFuncSignature(
varnames=('form_title', 'help_product', 'help_topic') )
varnames=('form_title', 'help_product', 'help_topic'))
security.declarePublic('manage_zmi_logout')
def manage_zmi_logout(self, REQUEST, RESPONSE):
"""Logout current user"""
p = getattr(REQUEST, '_logout_path', None)
if p is not None:
return apply(self.restrictedTraverse(p))
return self.restrictedTraverse(*p)
realm=RESPONSE.realm
realm = RESPONSE.realm
RESPONSE.setStatus(401)
RESPONSE.setHeader('WWW-Authenticate', 'basic realm="%s"' % realm, 1)
RESPONSE.setBody("""<html>
......
......@@ -27,14 +27,15 @@ from App.FactoryDispatcher import FactoryDispatcher
# Waaaa
import Products
if not hasattr(Products, 'meta_types'):
Products.meta_types=()
Products.meta_types = ()
if not hasattr(Products, 'meta_classes'):
Products.meta_classes={}
Products.meta_class_info={}
Products.meta_classes = {}
Products.meta_class_info = {}
_marker = [] # Create a new marker object
LOG = getLogger('ProductContext')
class ProductContext:
def __init__(self, product, app, package):
......@@ -45,8 +46,7 @@ class ProductContext:
permission=None, constructors=(),
icon=None, permissions=None, legacy=(),
visibility="Global", interfaces=_marker,
container_filter=None
):
container_filter=None):
"""Register a constructor
Keyword arguments are used to provide meta data:
......@@ -94,18 +94,19 @@ class ProductContext:
before calling an object's constructor.
"""
pack=self.__pack
initial=constructors[0]
productObject=self.__prod
pid=productObject.id
pack = self.__pack
initial = constructors[0]
productObject = self.__prod
pid = productObject.id
if permissions:
if isinstance(permissions, basestring): # You goofed it!
raise TypeError, ('Product context permissions should be a '
if isinstance(permissions, basestring): # You goofed it!
raise TypeError(
'Product context permissions should be a '
'list of permissions not a string', permissions)
for p in permissions:
if isinstance(p, tuple):
p, default= p
p, default = p
registerPermissions(((p, (), default),))
else:
registerPermissions(((p, ()),))
......@@ -113,14 +114,14 @@ class ProductContext:
############################################################
# Constructor permission setup
if permission is None:
permission="Add %ss" % (meta_type or instance_class.meta_type)
permission = "Add %ss" % (meta_type or instance_class.meta_type)
if isinstance(permission, tuple):
permission, default = permission
else:
default = ('Manager',)
pr = PermissionRole(permission,default)
pr = PermissionRole(permission, default)
registerPermissions(((permission, (), default),))
############################################################
......@@ -131,17 +132,17 @@ class ProductContext:
name, method = method
aliased = 1
else:
name=method.__name__
name = method.__name__
aliased = 0
if name not in OM.__dict__:
setattr(OM, name, method)
setattr(OM, name+'__roles__', pr)
setattr(OM, name + '__roles__', pr)
if aliased:
# Set the unaliased method name and its roles
# to avoid security holes. XXX: All "legacy"
# methods need to be eliminated.
setattr(OM, method.__name__, method)
setattr(OM, method.__name__+'__roles__', pr)
setattr(OM, method.__name__ + '__roles__', pr)
if isinstance(initial, tuple):
name, initial = initial
......@@ -166,36 +167,36 @@ class ProductContext:
else:
interfaces = tuple(implementedBy(instance_class))
Products.meta_types = Products.meta_types + (
{ 'name': meta_type or instance_class.meta_type,
# 'action': The action in the add drop down in the ZMI. This is
# currently also required by the _verifyObjectPaste
# method of CopyContainers like Folders.
'action': ('manage_addProduct/%s/%s' % (pid, name)),
# 'product': product id
'product': pid,
# 'permission': Guards the add action.
'permission': permission,
# 'visibility': A silly name. Doesn't have much to do with
# visibility. Allowed values: 'Global', None
'visibility': visibility,
# 'interfaces': A tuple of oldstyle and/or newstyle interfaces.
'interfaces': interfaces,
'instance': instance_class,
'container_filter': container_filter
},)
m[name]=initial
m[name+'__roles__']=pr
Products.meta_types = Products.meta_types + ({
'name': meta_type or instance_class.meta_type,
# 'action': The action in the add drop down in the ZMI. This is
# currently also required by the _verifyObjectPaste
# method of CopyContainers like Folders.
'action': ('manage_addProduct/%s/%s' % (pid, name)),
# 'product': product id
'product': pid,
# 'permission': Guards the add action.
'permission': permission,
# 'visibility': A silly name. Doesn't have much to do with
# visibility. Allowed values: 'Global', None
'visibility': visibility,
# 'interfaces': A tuple of oldstyle and/or newstyle interfaces.
'interfaces': interfaces,
'instance': instance_class,
'container_filter': container_filter
},)
m[name] = initial
m[name + '__roles__'] = pr
for method in constructors[1:]:
if isinstance(method, tuple):
name, method = method
else:
name=os.path.split(method.__name__)[-1]
name = os.path.split(method.__name__)[-1]
if name not in productObject.__dict__:
m[name]=method
m[name+'__roles__']=pr
m[name] = method
m[name + '__roles__'] = pr
def registerHelp(self, directory=None, clear=None, title_re=None):
pass
......
......@@ -13,6 +13,8 @@
"""Undo support.
"""
import binascii
from Acquisition import aq_inner
from Acquisition import aq_parent
from AccessControl import getSecurityManager
......@@ -34,9 +36,9 @@ class UndoSupport(ExtensionClass.Base):
security = ClassSecurityInfo()
manage_options=(
manage_options = (
{'label': 'Undo', 'action': 'manage_UndoForm'},
)
)
security.declareProtected(undo_changes, 'manage_UndoForm')
manage_UndoForm = DTMLFile(
......@@ -45,12 +47,12 @@ class UndoSupport(ExtensionClass.Base):
PrincipiaUndoBatchSize=20,
first_transaction=0,
last_transaction=20,
)
)
def _get_request_var_or_attr(self, name, default):
if hasattr(self, 'REQUEST'):
REQUEST=self.REQUEST
if REQUEST.has_key(name):
REQUEST = self.REQUEST
if name in REQUEST:
return REQUEST[name]
if hasattr(self, name):
v = getattr(self, name)
......@@ -81,7 +83,7 @@ class UndoSupport(ExtensionClass.Base):
if last_transaction is None:
last_transaction = self._get_request_var_or_attr(
'last_transaction',
first_transaction+PrincipiaUndoBatchSize)
first_transaction + PrincipiaUndoBatchSize)
spec = {}
......@@ -151,11 +153,8 @@ class UndoSupport(ExtensionClass.Base):
InitializeClass(UndoSupport)
########################################################################
# Blech, need this cause binascii.b2a_base64 is too pickly
import binascii
def encode64(s, b2a=binascii.b2a_base64):
if len(s) < 58:
......@@ -163,12 +162,10 @@ def encode64(s, b2a=binascii.b2a_base64):
r = []
a = r.append
for i in range(0, len(s), 57):
a(b2a(s[i:i+57])[:-1])
a(b2a(s[i:i + 57])[:-1])
return ''.join(r)
def decode64(s, a2b=binascii.a2b_base64):
__traceback_info__=len(s), `s`
return a2b(s+'\n')
del binascii
__traceback_info__ = len(s), repr(s)
return a2b(s + '\n')
......@@ -21,18 +21,19 @@ import transaction
connection_open_hooks = []
class ZApplicationWrapper:
def __init__(self, db, name, klass= None, klass_args=()):
def __init__(self, db, name, klass=None, klass_args=()):
self._stuff = db, name
if klass is not None:
conn=db.open()
root=conn.root()
if not root.has_key(name):
root[name]=klass()
conn = db.open()
root = conn.root()
if name not in root:
root[name] = klass()
transaction.commit()
conn.close()
self._klass=klass
self._klass = klass
# This hack is to overcome a bug in Bobo!
def __getattr__(self, name):
......@@ -52,25 +53,25 @@ class ZApplicationWrapper:
conn.setDebugInfo(REQUEST.environ, REQUEST.other)
v=conn.root()[aname]
v = conn.root()[aname]
if name is not None:
if hasattr(v, '__bobo_traverse__'):
return v.__bobo_traverse__(REQUEST, name)
if hasattr(v,name): return getattr(v,name)
if hasattr(v, name):
return getattr(v, name)
return v[name]
return v
def __call__(self, connection=None):
db, aname = self._stuff
if connection is None:
connection=db.open()
connection = db.open()
elif isinstance(connection, basestring):
connection=db.open(connection)
connection = db.open(connection)
return connection.root()[aname]
......
##############################################################################
#
# Copyright (c) 2002 Zope Foundation and Contributors.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE
#
##############################################################################
......@@ -13,7 +13,17 @@
"""Class initialization.
"""
# BBB
from AccessControl.Permission import ApplicationDefaultPermissions
from AccessControl.class_init import InitializeClass
default__class_init__ = InitializeClass # BBB: old name
from zope.deferredimport import deprecated
# BBB Zope 5.0
deprecated(
'Please import from AccessControl.Permission.',
ApplicationDefaultPermissions=(
'AccessControl.Permission:ApplicationDefaultPermissions'),
)
deprecated(
'Please import from AccessControl.class_init.',
default__class_init__='AccessControl.class_init:InitializeClass',
InitializeClass='AccessControl.class_init:InitializeClass',
)
......@@ -21,19 +21,27 @@ import MethodObject
import Persistence
from App import Common
from App.config import getConfiguration
import Zope2
from Shared.DC.Scripts.Bindings import Bindings
from Acquisition import Explicit, aq_inner, aq_parent
from DocumentTemplate.DT_String import _marker, DTReturn, render_blocks
from DocumentTemplate.DT_Util import TemplateDict, InstanceDict
from AccessControl import getSecurityManager
from ComputedAttribute import ComputedAttribute
LOG = getLogger('special_dtml')
import Zope2
PREFIX = os.path.realpath(
os.path.join(os.path.dirname(Zope2.__file__), os.path.pardir)
)
)
class HTML(DocumentTemplate.HTML,Persistence.Persistent,):
class HTML(DocumentTemplate.HTML, Persistence.Persistent):
"Persistent HTML Document Templates"
class ClassicHTMLFile(DocumentTemplate.HTMLFile,MethodObject.Method,):
class ClassicHTMLFile(DocumentTemplate.HTMLFile, MethodObject.Method):
"Persistent HTML Document Templates read from files"
class func_code:
......@@ -48,26 +56,31 @@ class ClassicHTMLFile(DocumentTemplate.HTMLFile,MethodObject.Method,):
def __init__(self, name, _prefix=None, **kw):
if _prefix is None:
_prefix = PREFIX
elif type(_prefix) is not type(''):
elif not isinstance(_prefix, str):
_prefix = Common.package_home(_prefix)
args=(self, os.path.join(_prefix, name + '.dtml'))
args = (self, os.path.join(_prefix, name + '.dtml'))
if '__name__' not in kw:
kw['__name__'] = os.path.split(name)[-1]
apply(ClassicHTMLFile.inheritedAttribute('__init__'), args, kw)
ClassicHTMLFile.inheritedAttribute('__init__')(*args, **kw)
def _cook_check(self):
if getConfiguration().debug_mode:
__traceback_info__=self.raw
try: mtime=os.stat(self.raw)[8]
except: mtime=0
__traceback_info__ = self.raw
try:
mtime = os.stat(self.raw)[8]
except Exception:
mtime = 0
if mtime != self._v_last_read:
self.cook()
self._v_last_read=mtime
elif not hasattr(self,'_v_cooked'):
try: changed=self.__changed__()
except: changed=1
self._v_last_read = mtime
elif not hasattr(self, '_v_cooked'):
try:
changed = self.__changed__()
except Exception:
changed = 1
self.cook()
if not changed: self.__changed__(0)
if not changed:
self.__changed__(0)
def _setName(self, name):
self.__name__ = name
......@@ -75,8 +88,8 @@ class ClassicHTMLFile(DocumentTemplate.HTMLFile,MethodObject.Method,):
def __call__(self, *args, **kw):
self._cook_check()
return apply(HTMLFile.inheritedAttribute('__call__'),
(self,)+args[1:],kw)
return HTMLFile.inheritedAttribute('__call__')(
*(self,) + args[1:], **kw)
defaultBindings = {'name_context': 'context',
'name_container': 'container',
......@@ -84,21 +97,16 @@ defaultBindings = {'name_context': 'context',
'name_ns': 'caller_namespace',
'name_subpath': 'traverse_subpath'}
from Shared.DC.Scripts.Bindings import Bindings
from Acquisition import Explicit, aq_inner, aq_parent
from DocumentTemplate.DT_String import _marker, DTReturn, render_blocks
from DocumentTemplate.DT_Util import TemplateDict, InstanceDict
from AccessControl import getSecurityManager
from ComputedAttribute import ComputedAttribute
class DTMLFile(Bindings, Explicit, ClassicHTMLFile):
"HTMLFile with bindings and support for __render_with_namespace__"
func_code = __code__ = None
func_defaults = __defaults__ = None
_need__name__=1
_need__name__ = 1
_Bindings_ns_class = TemplateDict
def _get__roles__(self):
imp = getattr(aq_parent(aq_inner(self)),
'%s__roles__' % self.__name__)
......@@ -112,11 +120,9 @@ class DTMLFile(Bindings, Explicit, ClassicHTMLFile):
_Bindings_client = 'container'
def __init__(self, name, _prefix=None, **kw):
self.ZBindings_edit(defaultBindings)
self._setFuncSignature()
apply(DTMLFile.inheritedAttribute('__init__'),
(self, name, _prefix), kw)
DTMLFile.inheritedAttribute('__init__')(self, name, _prefix, **kw)
def getOwner(self, info=0):
'''
......@@ -155,14 +161,16 @@ class DTMLFile(Bindings, Explicit, ClassicHTMLFile):
if old_kw:
kw_bind = old_kw.copy()
kw_bind.update(kw)
except: pass
except Exception:
pass
else:
# We're first, so get the REQUEST.
try:
req = self.aq_acquire('REQUEST')
if hasattr(req, 'taintWrapper'):
req = req.taintWrapper()
except: pass
except Exception:
pass
bound_data['REQUEST'] = req
ns.this = bound_data['context']
# Bind 'keyword_args' to the complete set of keyword arguments.
......@@ -189,13 +197,16 @@ class DTMLFile(Bindings, Explicit, ClassicHTMLFile):
try:
value = self.ZDocumentTemplate_beforeRender(ns, _marker)
if value is _marker:
try: result = render_blocks(self._v_blocks, ns)
except DTReturn, v: result = v.v
try:
result = render_blocks(self._v_blocks, ns)
except DTReturn as v:
result = v.v
except AttributeError:
if type(sys.exc_value)==InstanceType and sys.exc_value.args[0]=="_v_blocks":
if (type(sys.exc_value) == InstanceType and
sys.exc_value.args[0] == "_v_blocks"):
LOG.warn("DTML file '%s' could not be read" % self.raw)
raise ValueError, ("DTML file error: "
"Check logfile for details")
raise ValueError(
"DTML file error: Check logfile for details")
else:
raise
......@@ -206,7 +217,8 @@ class DTMLFile(Bindings, Explicit, ClassicHTMLFile):
finally:
security.removeContext(self)
# Clear the namespace, breaking circular references.
while len(ns): ns._pop()
while len(ns):
ns._pop()
from Shared.DC.Scripts.Signature import _setFuncSignature
......
# Needed to make this a Python package.
......@@ -8,7 +8,7 @@ class TestImageFile(unittest.TestCase):
def setUp(self):
# ugly: need to save the old App.config configuration value since
# ImageFile might read it and trigger setting it to the default value
# ImageFile might read it and trigger setting it to the default value
self.oldcfg = App.config._config
self.warningshook = WarningsHook()
self.warningshook.install()
......@@ -25,7 +25,7 @@ class TestImageFile(unittest.TestCase):
def test_no_warn_on_absolute_path(self):
path = os.path.join(os.path.dirname(App.__file__),
'www','zopelogo.png')
'www', 'zopelogo.png')
App.ImageFile.ImageFile(path)
self.assertFalse(self.warningshook.warnings)
......@@ -35,11 +35,7 @@ class TestImageFile(unittest.TestCase):
self.assertFalse(self.warningshook.warnings)
def test_no_warn_on_namespace_as_prefix(self):
prefix = App.__dict__ # same as calling globals() inside the App module
# same as calling globals() inside the App module
prefix = App.__dict__
App.ImageFile.ImageFile('www/zopelogo.png', prefix)
self.assertFalse(self.warningshook.warnings)
def test_suite():
return unittest.TestSuite((
unittest.makeSuite(TestImageFile),
))
......@@ -9,9 +9,3 @@ class TestNavigation(unittest.TestCase):
from zope.interface.verify import verifyClass
verifyClass(INavigation, Navigation)
def test_suite():
return unittest.TestSuite((
unittest.makeSuite(TestNavigation),
))
......@@ -9,9 +9,3 @@ class TestUndoSupport(unittest.TestCase):
from zope.interface.verify import verifyClass
verifyClass(IUndoSupport, UndoSupport)
def test_suite():
return unittest.TestSuite((
unittest.makeSuite(TestUndoSupport),
))
......@@ -42,6 +42,7 @@ class CacheManagerTestCase(unittest.TestCase):
def _getManagerClass(self):
from App.CacheManager import CacheManager
class TestCacheManager(CacheManager):
# Derived CacheManager that fakes enough of the DatabaseManager to
# make it possible to test at least some parts of the CacheManager.
......@@ -56,7 +57,3 @@ class CacheManagerTestCase(unittest.TestCase):
self.assertEqual(manager.cache_size(), 42)
db._set_sizes(12)
self.assertEqual(manager.cache_size(), 12)
def test_suite():
return unittest.makeSuite(CacheManagerTestCase)
......@@ -14,27 +14,22 @@
"""Tests class initialization.
"""
def test_InitializeClass():
"""Test that InitializeClass (default__class_init__)
works in specific corner cases.
import unittest
Check when the class has an ExtensionClass as attribute.
from AccessControl.class_init import InitializeClass
import ExtensionClass
>>> import ExtensionClass
>>> from AccessControl.class_init import InitializeClass
>>> class AnotherClass(ExtensionClass.Base):
... _need__name__ = 1
>>> class C:
... foo = AnotherClass
class TestInitializeClass(unittest.TestCase):
>>> InitializeClass(C)
"""
def test_extension_class(self):
# Test that InitializeClass works in specific corner cases.
# Check when the class has an ExtensionClass as attribute.
from doctest import DocTestSuite
import unittest
class AnotherClass(ExtensionClass.Base):
_need__name__ = 1
class C:
foo = AnotherClass
def test_suite():
return unittest.TestSuite((
DocTestSuite(),
))
InitializeClass(C)
......@@ -25,7 +25,7 @@ class SetConfigTests(unittest.TestCase):
def setUp(self):
# Save away everything as we need to restore it later on
self.clienthome = self.getconfig('clienthome')
self.instancehome = self.getconfig('instancehome')
self.instancehome = self.getconfig('instancehome')
self.debug_mode = self.getconfig('debug_mode')
def tearDown(self):
......@@ -73,9 +73,3 @@ class SetConfigTests(unittest.TestCase):
self.assertEqual(Globals.DevelopmentMode, True)
self.setconfig(debug_mode=False)
self.assertEqual(Globals.DevelopmentMode, False)
def test_suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(SetConfigTests))
return suite
......@@ -84,6 +84,7 @@ def test_default_view():
>>> tearDown()
"""
def test_default_method_args_marshalling():
"""\
Test the default call method of a view, with respect to possible
......
......@@ -122,7 +122,6 @@ class ZopePageTemplate(Script, PageTemplate, Historical, Cacheable,
content_type = 'text/html'
self.pt_edit(text, content_type)
security.declareProtected(change_page_templates, 'pt_edit')
def pt_edit(self, text, content_type, keep_output_encoding=False):
text = text.strip()
......@@ -402,7 +401,6 @@ class ZopePageTemplate(Script, PageTemplate, Historical, Cacheable,
# acquisition context, so we don't know where it is. :-(
return None
def __setstate__(self, state):
# Perform on-the-fly migration to unicode.
# Perhaps it might be better to work with the 'generation' module
......
......@@ -3,7 +3,6 @@ import doctest
from zope.interface import implements
from zope.publisher.interfaces.browser import IDefaultBrowserLayer
from zope.publisher.interfaces.browser import IBrowserRequest
from zope.publisher.skinnable import setDefaultSkin
from ZPublisher import Retry
from ZODB.POSException import ConflictError
......@@ -293,6 +292,7 @@ def testPublisher():
>>> tracer.reset()
>>> request = RequestWithSkinCheck()
>>> from zope.publisher.skinnable import setDefaultSkin
>>> setDefaultSkin(request)
>>> response = publish(request, module_name, after_list)
>>> tracer.showTracedPath()
......
......@@ -161,7 +161,7 @@ class TreeMaker:
child_exp = expanded
if not simple_type(expanded):
# Assume a mapping
expanded = expanded.has_key(node.id)
expanded = node.id in expanded
child_exp = child_exp.get(node.id)
expanded = expanded or (not subtree and self._expand_root)
......
......@@ -16,10 +16,10 @@ from AccessControl.SecurityInfo import ModuleSecurityInfo
security = ModuleSecurityInfo('ZTUtils')
security.declarePublic('encodeExpansion', 'decodeExpansion', 'a2b', 'b2a')
from Tree import encodeExpansion, decodeExpansion, a2b, b2a
from Tree import encodeExpansion, decodeExpansion, a2b, b2a # NOQA
security.declarePublic('Batch', 'TreeMaker', 'SimpleTreeMaker', 'LazyFilter')
from ZTUtils.Zope import Batch, TreeMaker, SimpleTreeMaker, LazyFilter
from ZTUtils.Zope import Batch, TreeMaker, SimpleTreeMaker, LazyFilter # NOQA
security.declarePublic('url_query', 'make_query', 'make_hidden_input')
from ZTUtils.Zope import url_query, make_query, make_hidden_input
from ZTUtils.Zope import url_query, make_query, make_hidden_input # NOQA
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