-
-
Notifications
You must be signed in to change notification settings - Fork 187
/
LargePloneFolder.py
67 lines (54 loc) · 2.63 KB
/
LargePloneFolder.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
from Acquisition import aq_base, aq_inner, aq_parent
from ComputedAttribute import ComputedAttribute
from Globals import InitializeClass
from PloneFolder import BasePloneFolder, ReplaceableWrapper
from PloneFolder import factory_type_information as PloneFolder_fti
from Products.BTreeFolder2.BTreeFolder2 import BTreeFolder2Base
# Pure laziness
factory_type_information={}
factory_type_information.update(PloneFolder_fti)
factory_type_information.update( {'id':'Large Plone Folder',
'meta_type':'Large Plone Folder',
'factory':'addLargePloneFolder',
'global_allow':0} )
class LargePloneFolder(BTreeFolder2Base, BasePloneFolder):
""" A large plone folder """
meta_type='Large Plone Folder'
# BTreeFolder2Base has no __implements__
__implements__ = BasePloneFolder.__implements__
def __init__(self, id, title=''):
BTreeFolder2Base.__init__(self, id)
BasePloneFolder.__init__(self, id, title)
self.id=id
self.title=title
# as per CMFBTreeFolder.py
def _checkId(self, id, allow_dup=0):
BasePloneFolder._checkId(self, id, allow_dup)
BTreeFolder2Base._checkId(self, id, allow_dup)
manage_renameObject = BasePloneFolder.inheritedAttribute('manage_renameObject')
manage_delObjects = BasePloneFolder.inheritedAttribute('manage_delObjects')
# this works around a problem that makes empty folders
# evaluate to false in boolean tests, like:
# tal:condition="python: someFolder and someFolder.someMethod(...)"
__len__ = BasePloneFolder.__len__
def index_html(self):
"""
btree folders don't store objects as attributes, the implementation of index_html
method in plone folder assumes this and by virtue of its being invoked looked in
the parent container. we override here to check the btree data structs, and then
perform the same lookup as BasePloneFolder if we don't find it.
"""
_target = self.get('index_html')
if _target is not None:
return _target
_target = aq_parent(aq_inner(self)).aq_acquire('index_html')
return ReplaceableWrapper(aq_base(_target).__of__(self))
index_html = ComputedAttribute(index_html, 1)
InitializeClass(LargePloneFolder)
def addLargePloneFolder(self, id, title='', description='', REQUEST=None):
""" add a BTree-backed Plone Folder """
obj = LargePloneFolder(id, title=title)
obj.setDescription(description)
self._setObject(id, obj)
if REQUEST is not None:
REQUEST['RESPONSE'].redirect( self.absolute_url() + '/manage_main' )