Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
E
erp5_rtl_support
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
Romain Courteaud
erp5_rtl_support
Commits
3b5f78ff
Commit
3b5f78ff
authored
Mar 29, 2017
by
Ayush Tiwari
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bt5_config: Resolve path for sub-objects in Business Manager path
parent
a51d7342
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
50 additions
and
5 deletions
+50
-5
product/ERP5/Document/BusinessManager.py
product/ERP5/Document/BusinessManager.py
+50
-5
No files found.
product/ERP5/Document/BusinessManager.py
View file @
3b5f78ff
...
@@ -354,16 +354,55 @@ class BusinessManager(XMLObject):
...
@@ -354,16 +354,55 @@ class BusinessManager(XMLObject):
"""
"""
Store data for objects in the ERP5
Store data for objects in the ERP5
"""
"""
portal
=
self
.
getPortalObject
()
LOG
(
'Business Manager'
,
INFO
,
'Storing Manager Data'
)
LOG
(
'Business Manager'
,
INFO
,
'Storing Manager Data'
)
self
.
_path_item_list
=
[]
self
.
_path_item_list
=
[]
path_item_list
=
self
.
getTemplatePathList
()
path_item_list
=
self
.
getTemplatePathList
()
if
path_item_list
:
if
path_item_list
:
path_item_list
=
[
l
.
split
(
' | '
)
for
l
in
path_item_list
]
path_item_list
=
[
l
.
split
(
' | '
)
for
l
in
path_item_list
]
for
path_item
in
path_item_list
:
for
path_item
in
path_item_list
:
try
:
# Here we check for the path which also add sub-objects, in that case,
self
.
_path_item_list
.
append
(
BusinessItem
(
path_item
[
0
],
path_item
[
1
],
path_item
[
2
]))
# we create separate BusinessItem objects for each sub-object with
except
IndexError
:
# same layer and sign
pass
# XXX: Not very effective as it tries to get all the objects which makes
# it vey slow
path_list
=
self
.
_resolvePath
(
portal
,
[],
path_item
[
0
].
split
(
'/'
))
for
path
in
path_list
:
try
:
self
.
_path_item_list
.
append
(
BusinessItem
(
path
,
path_item
[
1
],
path_item
[
2
]))
except
IndexError
:
pass
def
_resolvePath
(
self
,
folder
,
relative_url_list
,
id_list
):
"""
For Business Manager, we expect to resolve the path incase we face
paths which expect to include sub-objects.
For example: 'portal_catalog/erp5_mysql_innodb/**' should only consider
the sub-objects of the object mentioned, and create separate BusinessItem
objects for all of them.
This method calls itself recursively.
The folder is the current object which contains sub-objects.
The list of ids are path components. If the list is empty,
the current folder is valid.
"""
if
len
(
id_list
)
==
0
:
return
[
'/'
.
join
(
relative_url_list
)]
id
=
id_list
[
0
]
if
re
.
search
(
'[
\
*
\
?
\
[
\
]]'
,
id
)
is
None
:
# If the id has no meta character, do not have to check all objects.
obj
=
folder
.
_getOb
(
id
,
None
)
if
obj
is
None
:
raise
AttributeError
,
"Could not resolve '%s' during business template processing."
%
id
return
self
.
_resolvePath
(
obj
,
relative_url_list
+
[
id
],
id_list
[
1
:])
path_list
=
[]
for
object_id
in
fnmatch
.
filter
(
folder
.
objectIds
(),
id
):
if
object_id
!=
""
:
path_list
.
extend
(
self
.
_resolvePath
(
folder
.
_getOb
(
object_id
),
relative_url_list
+
[
object_id
],
id_list
[
1
:]))
return
path_list
def
getPathList
(
self
):
def
getPathList
(
self
):
path_list
=
[]
path_list
=
[]
...
@@ -656,6 +695,12 @@ class BusinessItem(Implicit, Persistent):
...
@@ -656,6 +695,12 @@ class BusinessItem(Implicit, Persistent):
self
.
_generateHash
()
self
.
_generateHash
()
else
:
else
:
try
:
try
:
# XXX: After we apply _resolve path list while storing Data for the
# Business Manager, this should be of no use as there will be no path
# where we are going to achieve something different for relative_path
# from the result of _resolvePath on a given path.
# TODO: Remove this after checking successfull implementation of
# _resolve path in Business Manager in storeTemplateData
for
relative_url
in
self
.
_resolvePath
(
p
,
[],
path
.
split
(
'/'
)):
for
relative_url
in
self
.
_resolvePath
(
p
,
[],
path
.
split
(
'/'
)):
obj
=
p
.
unrestrictedTraverse
(
relative_url
)
obj
=
p
.
unrestrictedTraverse
(
relative_url
)
obj
=
obj
.
_getCopy
(
context
)
obj
=
obj
.
_getCopy
(
context
)
...
@@ -872,7 +917,7 @@ class BusinessItem(Implicit, Persistent):
...
@@ -872,7 +917,7 @@ class BusinessItem(Implicit, Persistent):
# 2. In case 2 maximum values are created at same time, prefer one with
# 2. In case 2 maximum values are created at same time, prefer one with
# higher priority layer
# higher priority layer
merged_value
=
max
([
max
(
value
,
key
=
attrgetter
(
'creation_date'
))
merged_value
=
max
([
max
(
value
,
key
=
attrgetter
(
'creation_date'
))
for
value
in
value_list
],
for
value
in
value_list
],
key
=
attrgetter
(
'creation_date'
))
key
=
attrgetter
(
'creation_date'
))
return
merged_value
return
merged_value
...
...
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