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
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/
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
least amount of work necessary.
2.13.24 (2016-02-29)
--------------------
...
...
src/OFS/Application.py
View file @
547be401
...
...
@@ -202,13 +202,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 @
547be401
...
...
@@ -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 @
547be401
...
...
@@ -93,7 +93,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.
...
...
@@ -201,14 +201,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
()
...
...
@@ -356,14 +354,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 @
547be401
...
...
@@ -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'
)
...
...
@@ -436,8 +436,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
''
...
...
@@ -473,9 +472,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
)
...
...
@@ -494,9 +493,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
)
...
...
@@ -600,10 +599,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
...
...
@@ -613,10 +610,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
...
...
@@ -677,18 +672,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'
]
...
...
@@ -812,7 +807,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 @
547be401
...
...
@@ -303,12 +303,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 @
547be401
...
...
@@ -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 @
547be401
...
...
@@ -114,8 +114,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
):
...
...
@@ -171,8 +171,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
:
...
...
@@ -707,7 +707,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/Traversable.py
View file @
547be401
...
...
@@ -108,13 +108,13 @@ class Traversable:
security
.
declarePublic
(
'getPhysicalPath'
)
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
(),)
p
=
aq_parent
(
aq_inner
(
self
))
...
...
src/OFS/ZDOM.py
View file @
547be401
...
...
@@ -95,61 +95,61 @@ class Node:
security
.
declareProtected
(
access_contents_information
,
'getNodeName'
)
def
getNodeName
(
self
):
"""The name of this node, depending on its type"""
# The name of this node, depending on its type.
return
None
security
.
declareProtected
(
access_contents_information
,
'getNodeValue'
)
def
getNodeValue
(
self
):
"""The value of this node, depending on its type"""
# The value of this node, depending on its type.
return
None
security
.
declareProtected
(
access_contents_information
,
'getParentNode'
)
def
getParentNode
(
self
):
"""The parent of this node. All nodes except Document
DocumentFragment and Attr may have a parent"""
# The parent of this node. All nodes except Document,
# DocumentFragment and Attr may have a parent.
return
None
security
.
declareProtected
(
access_contents_information
,
'getChildNodes'
)
def
getChildNodes
(
self
):
"""
Returns a NodeList that contains all children of this node.
If there are no children, this is a empty NodeList"""
#
Returns a NodeList that contains all children of this node.
# If there are no children, this is a empty NodeList
return
NodeList
()
security
.
declareProtected
(
access_contents_information
,
'getFirstChild'
)
def
getFirstChild
(
self
):
"""
The first child of this node. If there is no such node
this returns None."""
#
The first child of this node. If there is no such node
# this returns None.
return
None
security
.
declareProtected
(
access_contents_information
,
'getLastChild'
)
def
getLastChild
(
self
):
"""
The last child of this node. If there is no such node
this returns None."""
#
The last child of this node. If there is no such node
# this returns None.
return
None
security
.
declareProtected
(
access_contents_information
,
'getPreviousSibling'
)
def
getPreviousSibling
(
self
):
"""The node immediately preceding this node. If
there is no such node, this returns None."""
# The node immediately preceding this node.
# If there is no such node, this returns None.
return
None
security
.
declareProtected
(
access_contents_information
,
'getNextSibling'
)
def
getNextSibling
(
self
):
"""The node immediately preceding this node. If
there is no such node, this returns None."""
# The node immediately preceding this node.
# If there is no such node, this returns None.
return
None
security
.
declareProtected
(
access_contents_information
,
'getAttributes'
)
def
getAttributes
(
self
):
"""
Returns a NamedNodeMap containing the attributes
of this node (if it is an element) or None otherwise."""
#
Returns a NamedNodeMap containing the attributes
# of this node (if it is an element) or None otherwise.
return
None
security
.
declareProtected
(
access_contents_information
,
'getOwnerDocument'
)
def
getOwnerDocument
(
self
):
"""
The Document object associated with this node.
When this is a document this is None"""
#
The Document object associated with this node.
# When this is a document this is None.
node
=
self
if
hasattr
(
node
,
'aq_parent'
):
node
=
aq_parent
(
self
)
...
...
@@ -161,8 +161,8 @@ class Node:
security
.
declareProtected
(
access_contents_information
,
'hasChildNodes'
)
def
hasChildNodes
(
self
):
"""
Returns true if the node has any children, false
if it doesn't. """
#
Returns true if the node has any children, false
# if it doesn't.
return
len
(
self
.
objectIds
())
InitializeClass
(
Node
)
...
...
@@ -180,63 +180,57 @@ class Document(Explicit, Node):
security
.
declareProtected
(
access_contents_information
,
'getImplementation'
)
def
getImplementation
(
self
):
"""
The DOMImplementation object that handles this document.
"""
# The DOMImplementation object that handles this document.
return
DOMImplementation
()
security
.
declareProtected
(
access_contents_information
,
'getDoctype'
)
def
getDoctype
(
self
):
"""
The Document Type Declaration associated with this document.
For HTML documents as well as XML documents without
a document type declaration this returns null.
"""
# The Document Type Declaration associated with this document.
# For HTML documents as well as XML documents without
# a document type declaration this returns null.
return
None
security
.
declareProtected
(
access_contents_information
,
'getDocumentElement'
)
def
getDocumentElement
(
self
):
"""
This is a convenience attribute that allows direct access to
the child node that is the root element of the document.
"""
# This is a convenience attribute that allows direct access to
# the child node that is the root element of the document.
return
aq_parent
(
self
)
# Node Methods
# ------------
def
getNodeName
(
self
):
"""The name of this node, depending on its type"""
# The name of this node, depending on its type.
return
'#document'
def
getNodeType
(
self
):
"""A code representing the type of the node."""
# A code representing the type of the node.
return
DOCUMENT_NODE
def
getOwnerDocument
(
self
):
"""
The Document object associated with this node.
When this is a document this is None"""
#
The Document object associated with this node.
# When this is a document this is None.
return
self
def
getChildNodes
(
self
):
"""
Returns a NodeList that contains all children of this node.
If there are no children, this is a empty NodeList"""
#
Returns a NodeList that contains all children of this node.
# If there are no children, this is a empty NodeList.
return
NodeList
([
aq_parent
(
self
)])
def
getFirstChild
(
self
):
"""
The first child of this node. If there is no such node
this returns None."""
#
The first child of this node. If there is no such node
# this returns None.
return
aq_parent
(
self
)
def
getLastChild
(
self
):
"""
The last child of this node. If there is no such node
this returns None."""
#
The last child of this node. If there is no such node
# this returns None.
return
aq_parent
(
self
)
def
hasChildNodes
(
self
):
"""
Returns true if the node has any children, false
if it doesn't. """
#
Returns true if the node has any children, false
# if it doesn't.
return
1
InitializeClass
(
Document
)
...
...
@@ -283,49 +277,49 @@ class Element(Node):
security
.
declareProtected
(
access_contents_information
,
'getTagName'
)
def
getTagName
(
self
):
"""The name of the element"""
# The name of the element.
return
self
.
__class__
.
__name__
# Node Attributes
# ---------------
def
getNodeName
(
self
):
"""The name of this node, depending on its type"""
# The name of this node, depending on its type.
return
self
.
getTagName
()
def
getNodeType
(
self
):
"""A code representing the type of the node."""
# A code representing the type of the node.
return
ELEMENT_NODE
def
getParentNode
(
self
):
"""The parent of this node. All nodes except Document
DocumentFragment and Attr may have a parent"""
# The parent of this node. All nodes except Document,
# DocumentFragment and Attr may have a parent.
return
getattr
(
self
,
'aq_parent'
,
None
)
def
getChildNodes
(
self
):
"""
Returns a NodeList that contains all children of this node.
If there are no children, this is a empty NodeList"""
#
Returns a NodeList that contains all children of this node.
# If there are no children, this is a empty NodeList.
return
NodeList
(
self
.
objectValues
())
def
getFirstChild
(
self
):
"""
The first child of this node. If there is no such node
this returns None"""
#
The first child of this node. If there is no such node
# this returns None
children
=
self
.
getChildNodes
()
if
children
:
return
children
.
_data
[
0
]
return
None
def
getLastChild
(
self
):
"""
The last child of this node. If there is no such node
this returns None."""
#
The last child of this node. If there is no such node
# this returns None.
children
=
self
.
getChildNodes
()
if
children
:
return
children
.
_data
[
-
1
]
return
None
def
getPreviousSibling
(
self
):
"""The node immediately preceding this node. If
there is no such node, this returns None."""
# The node immediately preceding this node.
# If there is no such node, this returns None.
if
hasattr
(
self
,
'aq_parent'
):
parent
=
aq_parent
(
self
)
ids
=
list
(
parent
.
objectIds
())
...
...
@@ -338,8 +332,8 @@ class Element(Node):
return
None
def
getNextSibling
(
self
):
"""The node immediately preceding this node. If
there is no such node, this returns None."""
# The node immediately preceding this node.
# If there is no such node, this returns None.
if
hasattr
(
self
,
'aq_parent'
):
parent
=
aq_parent
(
self
)
ids
=
list
(
parent
.
objectIds
())
...
...
@@ -356,24 +350,23 @@ class Element(Node):
security
.
declareProtected
(
access_contents_information
,
'getAttribute'
)
def
getAttribute
(
self
,
name
):
"""Retrieves an attribute value by name."""
# Retrieves an attribute value by name.
return
None
security
.
declareProtected
(
access_contents_information
,
'getAttributeNode'
)
def
getAttributeNode
(
self
,
name
):
"""
Retrieves an Attr node by name or None if
there is no such attribute. """
#
Retrieves an Attr node by name or None if
# there is no such attribute.
return
None
security
.
declareProtected
(
access_contents_information
,
'getElementsByTagName'
)
def
getElementsByTagName
(
self
,
tagname
):
""" Returns a NodeList of all the Elements with a given tag
name in the order in which they would be encountered in a
preorder traversal of the Document tree. Parameter: tagname
The name of the tag to match (* = all tags). Return Value: A new
NodeList object containing all the matched Elements.
"""
# Returns a NodeList of all the Elements with a given tag
# name in the order in which they would be encountered in a
# preorder traversal of the Document tree. Parameter: tagname
# The name of the tag to match (* = all tags). Return Value: A new
# NodeList object containing all the matched Elements.
nodeList
=
[]
for
child
in
self
.
objectValues
():
if
(
child
.
getNodeType
()
==
ELEMENT_NODE
and
\
...
...
@@ -395,8 +388,8 @@ class ElementWithAttributes(Element):
"""
def
getAttributes
(
self
):
"""
Returns a NamedNodeMap containing the attributes
of this node (if it is an element) or None otherwise."""
#
Returns a NamedNodeMap containing the attributes
# of this node (if it is an element) or None otherwise.
attribs
=
{}
for
p
in
self
.
_properties
:
if
p
[
'type'
]
==
'string'
:
...
...
@@ -406,13 +399,13 @@ class ElementWithAttributes(Element):
return
NamedNodeMap
(
attribs
)
def
getAttribute
(
self
,
name
):
"""Retrieves an attribute value by name."""
# Retrieves an attribute value by name.
if
self
.
getPropertyType
(
name
)
==
'string'
:
return
self
.
getProperty
(
name
,
''
)
def
getAttributeNode
(
self
,
name
):
"""
Retrieves an Attr node by name or None if
there is no such attribute. """
#
Retrieves an Attr node by name or None if
# there is no such attribute.
if
self
.
getPropertyType
(
name
)
==
'string'
:
return
Attr
(
name
,
self
.
getProperty
(
name
,
''
)).
__of__
(
self
)
return
None
...
...
@@ -426,22 +419,22 @@ class ElementWithTitle(Element):
"""
def
getAttributes
(
self
):
"""
Returns a NamedNodeMap containing the attributes
of this node (if it is an element) or None otherwise."""
#
Returns a NamedNodeMap containing the attributes
# of this node (if it is an element) or None otherwise.
title
=
self
.
getAttributeNode
(
'title'
)
if
title
is
not
None
:
return
NamedNodeMap
({
'title'
:
title
})
return
NamedNodeMap
()
def
getAttribute
(
self
,
name
):
"""Retrieves an attribute value by name."""
# Retrieves an attribute value by name.
if
name
==
'title'
and
hasattr
(
aq_base
(
self
),
'title'
):
return
self
.
title
return
''
def
getAttributeNode
(
self
,
name
):
"""
Retrieves an Attr node by name or None if
there is no such attribute. """
#
Retrieves an Attr node by name or None if
# there is no such attribute.
value
=
self
.
getAttribute
(
name
)
if
value
:
return
Attr
(
name
,
value
).
__of__
(
self
)
...
...
@@ -454,8 +447,6 @@ class Root(ElementWithAttributes):
"""
def
getOwnerDocument
(
self
):
"""
"""
return
Document
().
__of__
(
self
)
...
...
@@ -479,12 +470,12 @@ class NodeList:
return
self
.
_data
[
index
]
def
item
(
self
,
index
):
"""Returns the index-th item in the collection"""
# Returns the index-th item in the collection.
try
:
return
self
.
_data
[
index
]
except
IndexError
:
return
None
def
getLength
(
self
):
"""The length of the NodeList"""
# The length of the NodeList.
return
len
(
self
.
_data
)
__len__
=
getLength
...
...
@@ -508,7 +499,7 @@ class NamedNodeMap:
self
.
_data
=
data
def
item
(
self
,
index
):
"""Returns the index-th item in the map"""
# Returns the index-th item in the map.
try
:
return
self
.
_data
.
values
()[
index
]
except
IndexError
:
return
None
...
...
@@ -519,17 +510,16 @@ class NamedNodeMap:
return
self
.
_data
[
key
]
def
getLength
(
self
):
"""The length of the NodeList"""
# The length of the NodeList.
return
len
(
self
.
_data
)
__len__
=
getLength
def
getNamedItem
(
self
,
name
):
"""Retrieves a node specified by name. Parameters:
name Name of a node to retrieve. Return Value A Node (of any
type) with the specified name, or None if the specified name
did not identify any node in the map.
"""
# Retrieves a node specified by name. Parameters:
# name Name of a node to retrieve. Return Value A Node (of any
# type) with the specified name, or None if the specified name
# did not identify any node in the map.
if
self
.
_data
.
has_key
(
name
):
return
self
.
_data
[
name
]
return
None
...
...
@@ -547,22 +537,22 @@ class Attr(Implicit, Node):
self
.
specified
=
1
def
getNodeName
(
self
):
"""The name of this node, depending on its type"""
# The name of this node, depending on its type.
return
self
.
name
def
getName
(
self
):
"""Returns the name of this attribute."""
# Returns the name of this attribute.
return
self
.
name
def
getNodeValue
(
self
):
"""The value of this node, depending on its type"""
# The value of this node, depending on its type.
return
self
.
value
def
getNodeType
(
self
):
"""A code representing the type of the node."""
# A code representing the type of the node.
return
ATTRIBUTE_NODE
def
getSpecified
(
self
):
"""
If this attribute was explicitly given a value in the
original document, this is true; otherwise, it is false."""
#
If this attribute was explicitly given a value in the
# original document, this is true; otherwise, it is false.
return
self
.
specified
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