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
0cdd3ddf
Commit
0cdd3ddf
authored
Jul 17, 2016
by
Hanno Schlichting
Committed by
GitHub
Jul 17, 2016
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #55 from zopefoundation/apply-hotfix-20160419-master
Apply hotfix 20160419 [master]
parents
cdce8d52
aa3ae549
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
71 additions
and
91 deletions
+71
-91
CHANGES.rst
CHANGES.rst
+3
-0
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/SimpleItem.py
src/OFS/SimpleItem.py
+7
-7
src/OFS/Traversable.py
src/OFS/Traversable.py
+9
-10
No files found.
CHANGES.rst
View file @
0cdd3ddf
...
...
@@ -11,6 +11,9 @@ http://docs.zope.org/zope2/
Bugs Fixed
++++++++++
- Removed docstrings from some methods to avoid publishing them. From
Products.PloneHotfix20160419. [maurits]
- bobo_traverse of ProductDispatcher did not correctly invalidate cache
when a product was not initializes after first access of the cache. Types
that were added in test-profiles were not useable.
...
...
src/OFS/Application.py
View file @
0cdd3ddf
...
...
@@ -174,13 +174,13 @@ class Application(ApplicationDefaultPermissions,
return
self
def
getPhysicalPath
(
self
):
"""
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.
"""
#
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.
#
# We're at the base of the path.
return
(
''
,
)
...
...
src/OFS/Cache.py
View file @
0cdd3ddf
...
...
@@ -144,9 +144,7 @@ class Cacheable:
security
.
declarePrivate
(
'ZCacheable_getObAndView'
)
def
ZCacheable_getObAndView
(
self
,
view_name
):
"""
Returns self and view_name unchanged.
"""
# Returns self and view_name unchanged.
return
self
,
view_name
security
.
declarePrivate
(
'ZCacheable_get'
)
...
...
src/OFS/DTMLMethod.py
View file @
0cdd3ddf
...
...
@@ -91,7 +91,7 @@ class DTMLMethod(RestrictedDTML,
security
.
declareProtected
(
View
,
'__call__'
)
def
__call__
(
self
,
client
=
None
,
REQUEST
=
{},
RESPONSE
=
None
,
**
kw
):
"""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.
...
...
@@ -199,14 +199,12 @@ class DTMLMethod(RestrictedDTML,
security
.
declareProtected
(
change_dtml_methods
,
'getCacheNamespaceKeys'
)
def
getCacheNamespaceKeys
(
self
):
""" Return the cacheNamespaceKeys.
"""
# Return the cacheNamespaceKeys.
return
self
.
_cache_namespace_keys
security
.
declareProtected
(
change_dtml_methods
,
'setCacheNamespaceKeys'
)
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
=
[]
for
key
in
keys
:
key
=
str
(
key
).
strip
()
...
...
@@ -354,14 +352,12 @@ class DTMLMethod(RestrictedDTML,
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
()
...
...
src/OFS/Image.py
View file @
0cdd3ddf
...
...
@@ -65,23 +65,23 @@ def manage_addFile(self, id, file='', title='', precondition='',
precondition
=
str
(
precondition
)
id
,
title
=
cookId
(
id
,
title
,
file
)
self
=
self
.
this
()
# First, we create the file without data:
self
.
_setObject
(
id
,
File
(
id
,
title
,
''
,
content_type
,
precondition
))
newFile
=
self
.
_getOb
(
id
)
# Now we "upload" the data. By doing this in two steps, we
# can use a database trick to make the upload more efficient.
if
file
:
newFile
.
manage_upload
(
file
)
if
content_type
:
newFile
.
content_type
=
content_type
notify
(
ObjectCreatedEvent
(
newFile
))
if
REQUEST
is
not
None
:
REQUEST
[
'RESPONSE'
].
redirect
(
self
.
absolute_url
()
+
'/manage_main'
)
...
...
@@ -433,8 +433,7 @@ class File(Persistent, Implicit, PropertyManager,
security
.
declareProtected
(
View
,
'PrincipiaSearchSource'
)
def
PrincipiaSearchSource
(
self
):
""" Allow file objects to be searched.
"""
# Allow file objects to be searched.
if
self
.
content_type
.
startswith
(
'text/'
):
return
str
(
self
.
data
)
return
''
...
...
@@ -470,9 +469,9 @@ class File(Persistent, Implicit, PropertyManager,
self
.
update_data
(
filedata
,
content_type
,
len
(
filedata
))
else
:
self
.
ZCacheable_invalidate
()
notify
(
ObjectModifiedEvent
(
self
))
if
REQUEST
:
message
=
"Saved changes."
return
self
.
manage_main
(
self
,
REQUEST
,
manage_tabs_message
=
message
)
...
...
@@ -491,9 +490,9 @@ class File(Persistent, Implicit, PropertyManager,
content_type
=
self
.
_get_content_type
(
file
,
data
,
self
.
__name__
,
'application/octet-stream'
)
self
.
update_data
(
data
,
content_type
,
size
)
notify
(
ObjectModifiedEvent
(
self
))
if
REQUEST
:
message
=
"Saved changes."
return
self
.
manage_main
(
self
,
REQUEST
,
manage_tabs_message
=
message
)
...
...
@@ -597,10 +596,8 @@ class File(Persistent, Implicit, PropertyManager,
security
.
declareProtected
(
View
,
'get_size'
)
def
get_size
(
self
):
"""Get the size of a file or image.
Returns the size of the file or image.
"""
# Get the size of a file or image.
# Returns the size of the file or image.
size
=
self
.
size
if
size
is
None
:
size
=
len
(
self
.
data
)
return
size
...
...
@@ -610,10 +607,8 @@ class File(Persistent, Implicit, PropertyManager,
security
.
declareProtected
(
View
,
'getContentType'
)
def
getContentType
(
self
):
"""Get the content type of a file or image.
Returns the content type (MIME 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.
return
self
.
content_type
...
...
@@ -674,18 +669,18 @@ def manage_addImage(self, id, file, title='', precondition='', content_type='',
# First, we create the image without data:
self
.
_setObject
(
id
,
Image
(
id
,
title
,
''
,
content_type
,
precondition
))
newFile
=
self
.
_getOb
(
id
)
# Now we "upload" the data. By doing this in two steps, we
# can use a database trick to make the upload more efficient.
if
file
:
newFile
.
manage_upload
(
file
)
if
content_type
:
newFile
.
content_type
=
content_type
notify
(
ObjectCreatedEvent
(
newFile
))
if
REQUEST
is
not
None
:
try
:
url
=
self
.
DestinationURL
()
except
:
url
=
REQUEST
[
'URL1'
]
...
...
@@ -809,7 +804,7 @@ class Image(File):
if
isinstance
(
data
,
unicode
):
raise
TypeError
(
'Data can only be str or file-like. '
'Unicode objects are expressly forbidden.'
)
if
size
is
None
:
size
=
len
(
data
)
self
.
size
=
size
...
...
src/OFS/ObjectManager.py
View file @
0cdd3ddf
...
...
@@ -295,12 +295,11 @@ class ObjectManager(CopyContainer,
security
.
declareProtected
(
access_contents_information
,
'hasObject'
)
def
hasObject
(
self
,
id
):
"""Indicate whether the folder has an item by ID.
This doesn't try to be more intelligent than _getOb, and doesn't
consult _objects (for performance reasons). The common use case
is to check that an object does *not* exist.
"""
# Indicate whether the folder has an item by ID.
#
# This doesn't try to be more intelligent than _getOb, and doesn't
# consult _objects (for performance reasons). The common use case
# is to check that an object does *not* exist.
if
(
id
in
(
'.'
,
'..'
)
or
id
.
startswith
(
'_'
)
or
id
.
startswith
(
'aq_'
)
or
...
...
src/OFS/OrderSupport.py
View file @
0cdd3ddf
...
...
@@ -132,8 +132,7 @@ class OrderSupport(object):
security
.
declareProtected
(
manage_properties
,
'moveObjectsByDelta'
)
def
moveObjectsByDelta
(
self
,
ids
,
delta
,
subset_ids
=
None
,
suppress_events
=
False
):
""" Move specified sub-objects by delta.
"""
# Move specified sub-objects by delta.
if
isinstance
(
ids
,
basestring
):
ids
=
(
ids
,)
min_position
=
0
...
...
@@ -183,32 +182,27 @@ class OrderSupport(object):
security
.
declareProtected
(
manage_properties
,
'moveObjectsUp'
)
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
)
security
.
declareProtected
(
manage_properties
,
'moveObjectsDown'
)
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
)
security
.
declareProtected
(
manage_properties
,
'moveObjectsToTop'
)
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
)
security
.
declareProtected
(
manage_properties
,
'moveObjectsToBottom'
)
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
)
security
.
declareProtected
(
manage_properties
,
'orderObjects'
)
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
(),
(
(
key
,
'cmp'
,
'asc'
),
)
)
]
if
reverse
:
...
...
@@ -218,8 +212,7 @@ class OrderSupport(object):
security
.
declareProtected
(
access_contents_information
,
'getObjectPosition'
)
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
()
if
id
in
ids
:
return
ids
.
index
(
id
)
...
...
@@ -227,22 +220,19 @@ class OrderSupport(object):
security
.
declareProtected
(
manage_properties
,
'moveObjectToPosition'
)
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
)
return
self
.
moveObjectsByDelta
(
id
,
delta
,
suppress_events
=
suppress_events
)
security
.
declareProtected
(
access_contents_information
,
'getDefaultSorting'
)
def
getDefaultSorting
(
self
):
""" Get default sorting key and direction.
"""
# Get default sorting key and direction.
return
self
.
_default_sort_key
,
self
.
_default_sort_reverse
security
.
declareProtected
(
manage_properties
,
'setDefaultSorting'
)
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_reverse
=
reverse
and
1
or
0
...
...
src/OFS/PropertySheets.py
View file @
0cdd3ddf
...
...
@@ -112,8 +112,8 @@ class PropertySheet(Traversable, Persistent, Implicit):
__reserved_ids
=
(
'values'
,
'items'
)
def
property_extensible_schema__
(
self
):
"""
Return a flag indicating whether new properties may be
added or removed."""
#
Return a flag indicating whether new properties may be
# added or removed.
return
self
.
_extensible
def
__init__
(
self
,
id
,
md
=
None
):
...
...
@@ -169,8 +169,8 @@ class PropertySheet(Traversable, Persistent, Implicit):
security
.
declareProtected
(
access_contents_information
,
'getPropertyType'
)
def
getPropertyType
(
self
,
id
):
"""
Get the type of property 'id', returning None if no
such property exists"""
#
Get the type of property 'id', returning None if no
# such property exists.
pself
=
self
.
p_self
()
for
md
in
pself
.
_properties
:
if
md
[
'id'
]
==
id
:
...
...
@@ -705,7 +705,7 @@ class PropertySheets(Traversable, Implicit, Tabs):
raise
BadRequest
(
'attempt to delete undeletable property sheet: '
+
id
)
self
.
delPropertySheet
(
id
)
if
REQUEST
is
not
None
:
if
REQUEST
is
not
None
:
REQUEST
.
RESPONSE
.
redirect
(
'%s/manage'
%
self
.
absolute_url
())
def
__len__
(
self
):
...
...
src/OFS/SimpleItem.py
View file @
0cdd3ddf
...
...
@@ -241,7 +241,7 @@ class Item(Base,
try
:
strv
=
repr
(
error_value
)
# quotes tainted strings
except
:
strv
=
(
'<unprintable %s object>'
%
strv
=
(
'<unprintable %s object>'
%
str
(
type
(
error_value
).
__name__
))
v
=
strv
+
(
(
" (Also, the following error occurred while attempting "
...
...
@@ -406,13 +406,13 @@ class Item_w__name__(Item):
self
.
__name__
=
id
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
.
__name__
,
)
p
=
aq_parent
(
aq_inner
(
self
))
if
p
is
not
None
:
...
...
src/OFS/Traversable.py
View file @
0cdd3ddf
...
...
@@ -108,16 +108,15 @@ class Traversable:
security
.
declarePublic
(
'getPhysicalPath'
)
def
getPhysicalPath
(
self
):
"""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.
This implementation is optimized to avoid excessive amounts of function
calls while walking up from an object on a deep level.
"""
# 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.
# This implementation is optimized to avoid excessive amounts of
# function calls while walking up from an object on a deep level.
try
:
id
=
self
.
id
or
self
.
getId
()
except
AttributeError
:
...
...
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