Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
erp5
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Amer
erp5
Commits
d9454299
Commit
d9454299
authored
9 years ago
by
Tatuya Kamada
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Allow restricted python to use HBTreeFolder2 iterators.
Partial commit of
c29f5cda
parent
d2efa928
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
67 additions
and
0 deletions
+67
-0
product/HBTreeFolder2/HBTreeFolder2.py
product/HBTreeFolder2/HBTreeFolder2.py
+67
-0
No files found.
product/HBTreeFolder2/HBTreeFolder2.py
View file @
d9454299
...
...
@@ -33,6 +33,7 @@ from AccessControl.Permissions import access_contents_information, \
view_management_screens
from
zLOG
import
LOG
,
INFO
,
ERROR
,
WARNING
from
Products.ZCatalog.Lazy
import
LazyMap
,
LazyFilter
,
LazyCat
,
LazyValues
from
AccessControl.SimpleObjectPolicies
import
ContainerAssertions
manage_addHBTreeFolder2Form
=
DTMLFile
(
'folderAdd'
,
globals
())
...
...
@@ -67,6 +68,72 @@ class ExhaustedUniqueIdsError (Exception):
pass
class
HBTreeObjectIds
(
object
):
_index
=
float
(
'inf'
)
def
__init__
(
self
,
tree
,
base_id
=
_marker
):
self
.
_tree
=
tree
if
base_id
is
_marker
:
tree_id_list
=
tree
.
getTreeIdList
()
self
.
_count
=
tree
.
_count
else
:
tree_id_list
=
base_id
,
check
=
tree
.
_checkObjectId
self
.
_keys
=
lambda
:
(
x
for
base_id
in
tree_id_list
for
x
in
(
tree
.
_htree
if
base_id
is
None
else
tree
.
_getTree
(
base_id
)).
keys
()
if
check
((
base_id
,
x
)))
def
_count
(
self
):
count
=
sum
(
1
for
x
in
self
.
_keys
())
self
.
_count
=
lambda
:
count
return
count
def
__len__
(
self
):
return
self
.
_count
()
def
__iter__
(
self
):
return
self
.
_keys
()
def
__getitem__
(
self
,
item
):
if
item
<
0
:
item
+=
self
.
_count
()
i
=
self
.
_index
self
.
_index
=
item
+
1
i
=
item
-
i
try
:
if
i
<
0
:
self
.
_ikeys
=
keys
=
self
.
_keys
()
return
islice
(
keys
,
item
,
None
).
next
()
return
(
islice
(
self
.
_ikeys
,
i
,
None
)
if
i
else
self
.
_ikeys
).
next
()
except
StopIteration
:
del
self
.
_index
,
self
.
_ikeys
raise
IndexError
ContainerAssertions
[
HBTreeObjectIds
]
=
1
class
HBTreeObjectItems
(
HBTreeObjectIds
):
def
__iter__
(
self
):
getOb
=
self
.
_tree
.
_getOb
return
((
x
,
getOb
(
x
))
for
x
in
self
.
_keys
())
def
__getitem__
(
self
,
item
):
object_id
=
HBTreeObjectIds
.
__getitem__
(
self
,
item
)
return
object_id
,
self
.
_tree
.
_getOb
(
object_id
)
ContainerAssertions
[
HBTreeObjectItems
]
=
1
class
HBTreeObjectValues
(
HBTreeObjectIds
):
def
__iter__
(
self
):
getOb
=
self
.
_tree
.
_getOb
return
(
getOb
(
x
)
for
x
in
self
.
_keys
())
def
__getitem__
(
self
,
item
):
return
self
.
_tree
.
_getOb
(
HBTreeObjectIds
.
__getitem__
(
self
,
item
))
ContainerAssertions
[
HBTreeObjectValues
]
=
1
class
HBTreeFolder2Base
(
Persistent
):
"""Base for BTree-based folders.
"""
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment