Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Z
Zope
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
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
Zope
Commits
547be401
Commit
547be401
authored
Jul 17, 2016
by
Hanno Schlichting
Committed by
GitHub
Jul 17, 2016
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #63 from zopefoundation/apply-hotfix-20160419-rebased
Apply hotfix 20160419 rebased
parents
0b382a60
cc6c0ee9
Changes
10
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
146 additions
and
176 deletions
+146
-176
doc/CHANGES.rst
doc/CHANGES.rst
+3
-1
src/OFS/Application.py
src/OFS/Application.py
+7
-7
src/OFS/Cache.py
src/OFS/Cache.py
+1
-3
src/OFS/DTMLMethod.py
src/OFS/DTMLMethod.py
+5
-9
src/OFS/Image.py
src/OFS/Image.py
+19
-24
src/OFS/ObjectManager.py
src/OFS/ObjectManager.py
+5
-6
src/OFS/OrderSupport.py
src/OFS/OrderSupport.py
+10
-20
src/OFS/PropertySheets.py
src/OFS/PropertySheets.py
+5
-5
src/OFS/Traversable.py
src/OFS/Traversable.py
+6
-6
src/OFS/ZDOM.py
src/OFS/ZDOM.py
+85
-95
No files found.
doc/CHANGES.rst
View file @
547be401
...
@@ -8,10 +8,12 @@ http://docs.zope.org/zope2/
...
@@ -8,10 +8,12 @@ http://docs.zope.org/zope2/
2.13.25 (unreleased)
2.13.25 (unreleased)
--------------------
--------------------
- Removed docstrings from some methods to avoid publishing them. From
Products.PloneHotfix20160419. [maurits]
- Optimized the `OFS.ObjectManager.__contains__` method to do the
- Optimized the `OFS.ObjectManager.__contains__` method to do the
least amount of work necessary.
least amount of work necessary.
2.13.24 (2016-02-29)
2.13.24 (2016-02-29)
--------------------
--------------------
...
...
src/OFS/Application.py
View file @
547be401
...
@@ -202,13 +202,13 @@ class Application(ApplicationDefaultPermissions,
...
@@ -202,13 +202,13 @@ class Application(ApplicationDefaultPermissions,
return
self
return
self
def
getPhysicalPath
(
self
):
def
getPhysicalPath
(
self
):
"""
Get the physical path of the object.
#
Get the physical path of the object.
#
Returns a path (an immutable sequence of strings) that can be used to
#
Returns a path (an immutable sequence of strings) that can be used to
access this object again later, for example in a copy/paste operation.
# access this object again later, for example in a copy/paste
getPhysicalRoot() and getPhysicalPath() are designed to operate
# operation. getPhysicalRoot() and getPhysicalPath() are designed to
together.
# operate
together.
"""
#
# We're at the base of the path.
# We're at the base of the path.
return
(
''
,)
return
(
''
,)
...
...
src/OFS/Cache.py
View file @
547be401
...
@@ -144,9 +144,7 @@ class Cacheable:
...
@@ -144,9 +144,7 @@ class Cacheable:
security
.
declarePrivate
(
'ZCacheable_getObAndView'
)
security
.
declarePrivate
(
'ZCacheable_getObAndView'
)
def
ZCacheable_getObAndView
(
self
,
view_name
):
def
ZCacheable_getObAndView
(
self
,
view_name
):
"""
# Returns self and view_name unchanged.
Returns self and view_name unchanged.
"""
return
self
,
view_name
return
self
,
view_name
security
.
declarePrivate
(
'ZCacheable_get'
)
security
.
declarePrivate
(
'ZCacheable_get'
)
...
...
src/OFS/DTMLMethod.py
View file @
547be401
...
@@ -93,7 +93,7 @@ class DTMLMethod(RestrictedDTML,
...
@@ -93,7 +93,7 @@ class DTMLMethod(RestrictedDTML,
security
.
declareProtected
(
View
,
'__call__'
)
security
.
declareProtected
(
View
,
'__call__'
)
def
__call__
(
self
,
client
=
None
,
REQUEST
=
{},
RESPONSE
=
None
,
**
kw
):
def
__call__
(
self
,
client
=
None
,
REQUEST
=
{},
RESPONSE
=
None
,
**
kw
):
"""Render using the given client object
"""Render using the given client object
o If client is not passed, we are being called as a sub-template:
o If client is not passed, we are being called as a sub-template:
don't do any error propagation.
don't do any error propagation.
...
@@ -201,14 +201,12 @@ class DTMLMethod(RestrictedDTML,
...
@@ -201,14 +201,12 @@ class DTMLMethod(RestrictedDTML,
security
.
declareProtected
(
change_dtml_methods
,
'getCacheNamespaceKeys'
)
security
.
declareProtected
(
change_dtml_methods
,
'getCacheNamespaceKeys'
)
def
getCacheNamespaceKeys
(
self
):
def
getCacheNamespaceKeys
(
self
):
""" Return the cacheNamespaceKeys.
# Return the cacheNamespaceKeys.
"""
return
self
.
_cache_namespace_keys
return
self
.
_cache_namespace_keys
security
.
declareProtected
(
change_dtml_methods
,
'setCacheNamespaceKeys'
)
security
.
declareProtected
(
change_dtml_methods
,
'setCacheNamespaceKeys'
)
def
setCacheNamespaceKeys
(
self
,
keys
,
REQUEST
=
None
):
def
setCacheNamespaceKeys
(
self
,
keys
,
REQUEST
=
None
):
""" Set the list of names looked up to provide a cache key.
# Set the list of names looked up to provide a cache key.
"""
ks
=
[]
ks
=
[]
for
key
in
keys
:
for
key
in
keys
:
key
=
str
(
key
).
strip
()
key
=
str
(
key
).
strip
()
...
@@ -356,14 +354,12 @@ class DTMLMethod(RestrictedDTML,
...
@@ -356,14 +354,12 @@ class DTMLMethod(RestrictedDTML,
security
.
declareProtected
(
view_management_screens
,
'PrincipiaSearchSource'
)
security
.
declareProtected
(
view_management_screens
,
'PrincipiaSearchSource'
)
def
PrincipiaSearchSource
(
self
):
def
PrincipiaSearchSource
(
self
):
""" Support for searching - the document's contents are searched.
# Support for searching - the document's contents are searched.
"""
return
self
.
read
()
return
self
.
read
()
security
.
declareProtected
(
view_management_screens
,
'document_src'
)
security
.
declareProtected
(
view_management_screens
,
'document_src'
)
def
document_src
(
self
,
REQUEST
=
None
,
RESPONSE
=
None
):
def
document_src
(
self
,
REQUEST
=
None
,
RESPONSE
=
None
):
""" Return unprocessed document source.
# Return unprocessed document source.
"""
if
RESPONSE
is
not
None
:
if
RESPONSE
is
not
None
:
RESPONSE
.
setHeader
(
'Content-Type'
,
'text/plain'
)
RESPONSE
.
setHeader
(
'Content-Type'
,
'text/plain'
)
return
self
.
read
()
return
self
.
read
()
...
...
src/OFS/Image.py
View file @
547be401
...
@@ -65,23 +65,23 @@ def manage_addFile(self, id, file='', title='', precondition='',
...
@@ -65,23 +65,23 @@ def manage_addFile(self, id, file='', title='', precondition='',
precondition
=
str
(
precondition
)
precondition
=
str
(
precondition
)
id
,
title
=
cookId
(
id
,
title
,
file
)
id
,
title
=
cookId
(
id
,
title
,
file
)
self
=
self
.
this
()
self
=
self
.
this
()
# First, we create the file without data:
# First, we create the file without data:
self
.
_setObject
(
id
,
File
(
id
,
title
,
''
,
content_type
,
precondition
))
self
.
_setObject
(
id
,
File
(
id
,
title
,
''
,
content_type
,
precondition
))
newFile
=
self
.
_getOb
(
id
)
newFile
=
self
.
_getOb
(
id
)
# Now we "upload" the data. By doing this in two steps, we
# Now we "upload" the data. By doing this in two steps, we
# can use a database trick to make the upload more efficient.
# can use a database trick to make the upload more efficient.
if
file
:
if
file
:
newFile
.
manage_upload
(
file
)
newFile
.
manage_upload
(
file
)
if
content_type
:
if
content_type
:
newFile
.
content_type
=
content_type
newFile
.
content_type
=
content_type
notify
(
ObjectCreatedEvent
(
newFile
))
notify
(
ObjectCreatedEvent
(
newFile
))
if
REQUEST
is
not
None
:
if
REQUEST
is
not
None
:
REQUEST
[
'RESPONSE'
].
redirect
(
self
.
absolute_url
()
+
'/manage_main'
)
REQUEST
[
'RESPONSE'
].
redirect
(
self
.
absolute_url
()
+
'/manage_main'
)
...
@@ -436,8 +436,7 @@ class File(Persistent, Implicit, PropertyManager,
...
@@ -436,8 +436,7 @@ class File(Persistent, Implicit, PropertyManager,
security
.
declareProtected
(
View
,
'PrincipiaSearchSource'
)
security
.
declareProtected
(
View
,
'PrincipiaSearchSource'
)
def
PrincipiaSearchSource
(
self
):
def
PrincipiaSearchSource
(
self
):
""" Allow file objects to be searched.
# Allow file objects to be searched.
"""
if
self
.
content_type
.
startswith
(
'text/'
):
if
self
.
content_type
.
startswith
(
'text/'
):
return
str
(
self
.
data
)
return
str
(
self
.
data
)
return
''
return
''
...
@@ -473,9 +472,9 @@ class File(Persistent, Implicit, PropertyManager,
...
@@ -473,9 +472,9 @@ class File(Persistent, Implicit, PropertyManager,
self
.
update_data
(
filedata
,
content_type
,
len
(
filedata
))
self
.
update_data
(
filedata
,
content_type
,
len
(
filedata
))
else
:
else
:
self
.
ZCacheable_invalidate
()
self
.
ZCacheable_invalidate
()
notify
(
ObjectModifiedEvent
(
self
))
notify
(
ObjectModifiedEvent
(
self
))
if
REQUEST
:
if
REQUEST
:
message
=
"Saved changes."
message
=
"Saved changes."
return
self
.
manage_main
(
self
,
REQUEST
,
manage_tabs_message
=
message
)
return
self
.
manage_main
(
self
,
REQUEST
,
manage_tabs_message
=
message
)
...
@@ -494,9 +493,9 @@ class File(Persistent, Implicit, PropertyManager,
...
@@ -494,9 +493,9 @@ class File(Persistent, Implicit, PropertyManager,
content_type
=
self
.
_get_content_type
(
file
,
data
,
self
.
__name__
,
content_type
=
self
.
_get_content_type
(
file
,
data
,
self
.
__name__
,
'application/octet-stream'
)
'application/octet-stream'
)
self
.
update_data
(
data
,
content_type
,
size
)
self
.
update_data
(
data
,
content_type
,
size
)
notify
(
ObjectModifiedEvent
(
self
))
notify
(
ObjectModifiedEvent
(
self
))
if
REQUEST
:
if
REQUEST
:
message
=
"Saved changes."
message
=
"Saved changes."
return
self
.
manage_main
(
self
,
REQUEST
,
manage_tabs_message
=
message
)
return
self
.
manage_main
(
self
,
REQUEST
,
manage_tabs_message
=
message
)
...
@@ -600,10 +599,8 @@ class File(Persistent, Implicit, PropertyManager,
...
@@ -600,10 +599,8 @@ class File(Persistent, Implicit, PropertyManager,
security
.
declareProtected
(
View
,
'get_size'
)
security
.
declareProtected
(
View
,
'get_size'
)
def
get_size
(
self
):
def
get_size
(
self
):
"""Get the size of a file or image.
# Get the size of a file or image.
# Returns the size of the file or image.
Returns the size of the file or image.
"""
size
=
self
.
size
size
=
self
.
size
if
size
is
None
:
size
=
len
(
self
.
data
)
if
size
is
None
:
size
=
len
(
self
.
data
)
return
size
return
size
...
@@ -613,10 +610,8 @@ class File(Persistent, Implicit, PropertyManager,
...
@@ -613,10 +610,8 @@ class File(Persistent, Implicit, PropertyManager,
security
.
declareProtected
(
View
,
'getContentType'
)
security
.
declareProtected
(
View
,
'getContentType'
)
def
getContentType
(
self
):
def
getContentType
(
self
):
"""Get the content type of a file or image.
# Get the content type of a file or image.
# Returns the content type (MIME type) of a file or image.
Returns the content type (MIME type) of a file or image.
"""
return
self
.
content_type
return
self
.
content_type
...
@@ -677,18 +672,18 @@ def manage_addImage(self, id, file, title='', precondition='', content_type='',
...
@@ -677,18 +672,18 @@ def manage_addImage(self, id, file, title='', precondition='', content_type='',
# First, we create the image without data:
# First, we create the image without data:
self
.
_setObject
(
id
,
Image
(
id
,
title
,
''
,
content_type
,
precondition
))
self
.
_setObject
(
id
,
Image
(
id
,
title
,
''
,
content_type
,
precondition
))
newFile
=
self
.
_getOb
(
id
)
newFile
=
self
.
_getOb
(
id
)
# Now we "upload" the data. By doing this in two steps, we
# Now we "upload" the data. By doing this in two steps, we
# can use a database trick to make the upload more efficient.
# can use a database trick to make the upload more efficient.
if
file
:
if
file
:
newFile
.
manage_upload
(
file
)
newFile
.
manage_upload
(
file
)
if
content_type
:
if
content_type
:
newFile
.
content_type
=
content_type
newFile
.
content_type
=
content_type
notify
(
ObjectCreatedEvent
(
newFile
))
notify
(
ObjectCreatedEvent
(
newFile
))
if
REQUEST
is
not
None
:
if
REQUEST
is
not
None
:
try
:
url
=
self
.
DestinationURL
()
try
:
url
=
self
.
DestinationURL
()
except
:
url
=
REQUEST
[
'URL1'
]
except
:
url
=
REQUEST
[
'URL1'
]
...
@@ -812,7 +807,7 @@ class Image(File):
...
@@ -812,7 +807,7 @@ class Image(File):
if
isinstance
(
data
,
unicode
):
if
isinstance
(
data
,
unicode
):
raise
TypeError
(
'Data can only be str or file-like. '
raise
TypeError
(
'Data can only be str or file-like. '
'Unicode objects are expressly forbidden.'
)
'Unicode objects are expressly forbidden.'
)
if
size
is
None
:
size
=
len
(
data
)
if
size
is
None
:
size
=
len
(
data
)
self
.
size
=
size
self
.
size
=
size
...
...
src/OFS/ObjectManager.py
View file @
547be401
...
@@ -303,12 +303,11 @@ class ObjectManager(CopyContainer,
...
@@ -303,12 +303,11 @@ class ObjectManager(CopyContainer,
security
.
declareProtected
(
access_contents_information
,
'hasObject'
)
security
.
declareProtected
(
access_contents_information
,
'hasObject'
)
def
hasObject
(
self
,
id
):
def
hasObject
(
self
,
id
):
"""Indicate whether the folder has an item by ID.
# Indicate whether the folder has an item by ID.
#
This doesn't try to be more intelligent than _getOb, and doesn't
# This doesn't try to be more intelligent than _getOb, and doesn't
consult _objects (for performance reasons). The common use case
# consult _objects (for performance reasons). The common use case
is to check that an object does *not* exist.
# is to check that an object does *not* exist.
"""
if
(
id
in
(
'.'
,
'..'
)
or
if
(
id
in
(
'.'
,
'..'
)
or
id
.
startswith
(
'_'
)
or
id
.
startswith
(
'_'
)
or
id
.
startswith
(
'aq_'
)
or
id
.
startswith
(
'aq_'
)
or
...
...
src/OFS/OrderSupport.py
View file @
547be401
...
@@ -132,8 +132,7 @@ class OrderSupport(object):
...
@@ -132,8 +132,7 @@ class OrderSupport(object):
security
.
declareProtected
(
manage_properties
,
'moveObjectsByDelta'
)
security
.
declareProtected
(
manage_properties
,
'moveObjectsByDelta'
)
def
moveObjectsByDelta
(
self
,
ids
,
delta
,
subset_ids
=
None
,
def
moveObjectsByDelta
(
self
,
ids
,
delta
,
subset_ids
=
None
,
suppress_events
=
False
):
suppress_events
=
False
):
""" Move specified sub-objects by delta.
# Move specified sub-objects by delta.
"""
if
isinstance
(
ids
,
basestring
):
if
isinstance
(
ids
,
basestring
):
ids
=
(
ids
,)
ids
=
(
ids
,)
min_position
=
0
min_position
=
0
...
@@ -183,32 +182,27 @@ class OrderSupport(object):
...
@@ -183,32 +182,27 @@ class OrderSupport(object):
security
.
declareProtected
(
manage_properties
,
'moveObjectsUp'
)
security
.
declareProtected
(
manage_properties
,
'moveObjectsUp'
)
def
moveObjectsUp
(
self
,
ids
,
delta
=
1
,
subset_ids
=
None
):
def
moveObjectsUp
(
self
,
ids
,
delta
=
1
,
subset_ids
=
None
):
""" Move specified sub-objects up by delta in container.
# Move specified sub-objects up by delta in container.
"""
return
self
.
moveObjectsByDelta
(
ids
,
-
delta
,
subset_ids
)
return
self
.
moveObjectsByDelta
(
ids
,
-
delta
,
subset_ids
)
security
.
declareProtected
(
manage_properties
,
'moveObjectsDown'
)
security
.
declareProtected
(
manage_properties
,
'moveObjectsDown'
)
def
moveObjectsDown
(
self
,
ids
,
delta
=
1
,
subset_ids
=
None
):
def
moveObjectsDown
(
self
,
ids
,
delta
=
1
,
subset_ids
=
None
):
""" Move specified sub-objects down by delta in container.
# Move specified sub-objects down by delta in container.
"""
return
self
.
moveObjectsByDelta
(
ids
,
delta
,
subset_ids
)
return
self
.
moveObjectsByDelta
(
ids
,
delta
,
subset_ids
)
security
.
declareProtected
(
manage_properties
,
'moveObjectsToTop'
)
security
.
declareProtected
(
manage_properties
,
'moveObjectsToTop'
)
def
moveObjectsToTop
(
self
,
ids
,
subset_ids
=
None
):
def
moveObjectsToTop
(
self
,
ids
,
subset_ids
=
None
):
""" Move specified sub-objects to top of container.
# Move specified sub-objects to top of container.
"""
return
self
.
moveObjectsByDelta
(
ids
,
-
len
(
self
.
_objects
),
subset_ids
)
return
self
.
moveObjectsByDelta
(
ids
,
-
len
(
self
.
_objects
),
subset_ids
)
security
.
declareProtected
(
manage_properties
,
'moveObjectsToBottom'
)
security
.
declareProtected
(
manage_properties
,
'moveObjectsToBottom'
)
def
moveObjectsToBottom
(
self
,
ids
,
subset_ids
=
None
):
def
moveObjectsToBottom
(
self
,
ids
,
subset_ids
=
None
):
""" Move specified sub-objects to bottom of container.
# Move specified sub-objects to bottom of container.
"""
return
self
.
moveObjectsByDelta
(
ids
,
len
(
self
.
_objects
),
subset_ids
)
return
self
.
moveObjectsByDelta
(
ids
,
len
(
self
.
_objects
),
subset_ids
)
security
.
declareProtected
(
manage_properties
,
'orderObjects'
)
security
.
declareProtected
(
manage_properties
,
'orderObjects'
)
def
orderObjects
(
self
,
key
,
reverse
=
None
):
def
orderObjects
(
self
,
key
,
reverse
=
None
):
""" Order sub-objects by key and direction.
# Order sub-objects by key and direction.
"""
ids
=
[
id
for
id
,
obj
in
sort
(
self
.
objectItems
(),
ids
=
[
id
for
id
,
obj
in
sort
(
self
.
objectItems
(),
(
(
key
,
'cmp'
,
'asc'
),
)
)
]
(
(
key
,
'cmp'
,
'asc'
),
)
)
]
if
reverse
:
if
reverse
:
...
@@ -218,8 +212,7 @@ class OrderSupport(object):
...
@@ -218,8 +212,7 @@ class OrderSupport(object):
security
.
declareProtected
(
access_contents_information
,
security
.
declareProtected
(
access_contents_information
,
'getObjectPosition'
)
'getObjectPosition'
)
def
getObjectPosition
(
self
,
id
):
def
getObjectPosition
(
self
,
id
):
""" Get the position of an object by its id.
# Get the position of an object by its id.
"""
ids
=
self
.
objectIds
()
ids
=
self
.
objectIds
()
if
id
in
ids
:
if
id
in
ids
:
return
ids
.
index
(
id
)
return
ids
.
index
(
id
)
...
@@ -227,22 +220,19 @@ class OrderSupport(object):
...
@@ -227,22 +220,19 @@ class OrderSupport(object):
security
.
declareProtected
(
manage_properties
,
'moveObjectToPosition'
)
security
.
declareProtected
(
manage_properties
,
'moveObjectToPosition'
)
def
moveObjectToPosition
(
self
,
id
,
position
,
suppress_events
=
False
):
def
moveObjectToPosition
(
self
,
id
,
position
,
suppress_events
=
False
):
""" Move specified object to absolute position.
# Move specified object to absolute position.
"""
delta
=
position
-
self
.
getObjectPosition
(
id
)
delta
=
position
-
self
.
getObjectPosition
(
id
)
return
self
.
moveObjectsByDelta
(
id
,
delta
,
return
self
.
moveObjectsByDelta
(
id
,
delta
,
suppress_events
=
suppress_events
)
suppress_events
=
suppress_events
)
security
.
declareProtected
(
access_contents_information
,
'getDefaultSorting'
)
security
.
declareProtected
(
access_contents_information
,
'getDefaultSorting'
)
def
getDefaultSorting
(
self
):
def
getDefaultSorting
(
self
):
""" Get default sorting key and direction.
# Get default sorting key and direction.
"""
return
self
.
_default_sort_key
,
self
.
_default_sort_reverse
return
self
.
_default_sort_key
,
self
.
_default_sort_reverse
security
.
declareProtected
(
manage_properties
,
'setDefaultSorting'
)
security
.
declareProtected
(
manage_properties
,
'setDefaultSorting'
)
def
setDefaultSorting
(
self
,
key
,
reverse
):
def
setDefaultSorting
(
self
,
key
,
reverse
):
""" Set default sorting key and direction.
# Set default sorting key and direction.
"""
self
.
_default_sort_key
=
key
self
.
_default_sort_key
=
key
self
.
_default_sort_reverse
=
reverse
and
1
or
0
self
.
_default_sort_reverse
=
reverse
and
1
or
0
...
...
src/OFS/PropertySheets.py
View file @
547be401
...
@@ -114,8 +114,8 @@ class PropertySheet(Traversable, Persistent, Implicit):
...
@@ -114,8 +114,8 @@ class PropertySheet(Traversable, Persistent, Implicit):
__reserved_ids
=
(
'values'
,
'items'
)
__reserved_ids
=
(
'values'
,
'items'
)
def
property_extensible_schema__
(
self
):
def
property_extensible_schema__
(
self
):
"""
Return a flag indicating whether new properties may be
#
Return a flag indicating whether new properties may be
added or removed."""
# added or removed.
return
self
.
_extensible
return
self
.
_extensible
def
__init__
(
self
,
id
,
md
=
None
):
def
__init__
(
self
,
id
,
md
=
None
):
...
@@ -171,8 +171,8 @@ class PropertySheet(Traversable, Persistent, Implicit):
...
@@ -171,8 +171,8 @@ class PropertySheet(Traversable, Persistent, Implicit):
security
.
declareProtected
(
access_contents_information
,
'getPropertyType'
)
security
.
declareProtected
(
access_contents_information
,
'getPropertyType'
)
def
getPropertyType
(
self
,
id
):
def
getPropertyType
(
self
,
id
):
"""
Get the type of property 'id', returning None if no
#
Get the type of property 'id', returning None if no
such property exists"""
# such property exists.
pself
=
self
.
p_self
()
pself
=
self
.
p_self
()
for
md
in
pself
.
_properties
:
for
md
in
pself
.
_properties
:
if
md
[
'id'
]
==
id
:
if
md
[
'id'
]
==
id
:
...
@@ -707,7 +707,7 @@ class PropertySheets(Traversable, Implicit, Tabs):
...
@@ -707,7 +707,7 @@ class PropertySheets(Traversable, Implicit, Tabs):
raise
BadRequest
(
raise
BadRequest
(
'attempt to delete undeletable property sheet: '
+
id
)
'attempt to delete undeletable property sheet: '
+
id
)
self
.
delPropertySheet
(
id
)
self
.
delPropertySheet
(
id
)
if
REQUEST
is
not
None
:
if
REQUEST
is
not
None
:
REQUEST
.
RESPONSE
.
redirect
(
'%s/manage'
%
self
.
absolute_url
())
REQUEST
.
RESPONSE
.
redirect
(
'%s/manage'
%
self
.
absolute_url
())
def
__len__
(
self
):
def
__len__
(
self
):
...
...
src/OFS/Traversable.py
View file @
547be401
...
@@ -108,13 +108,13 @@ class Traversable:
...
@@ -108,13 +108,13 @@ class Traversable:
security
.
declarePublic
(
'getPhysicalPath'
)
security
.
declarePublic
(
'getPhysicalPath'
)
def
getPhysicalPath
(
self
):
def
getPhysicalPath
(
self
):
"""Get the physical path of the object.
# Get the physical path of the object.
#
# Returns a path (an immutable sequence of strings) that can be used to
# access this object again later, for example in a copy/paste
# operation. getPhysicalRoot() and getPhysicalPath() are designed to
# operate together.
Returns a path (an immutable sequence of strings) that can be used to
access this object again later, for example in a copy/paste operation.
getPhysicalRoot() and getPhysicalPath() are designed to operate
together.
"""
path
=
(
self
.
getId
(),)
path
=
(
self
.
getId
(),)
p
=
aq_parent
(
aq_inner
(
self
))
p
=
aq_parent
(
aq_inner
(
self
))
...
...
src/OFS/ZDOM.py
View file @
547be401
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