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
Labels
Merge Requests
140
Merge Requests
140
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
Jobs
Commits
Open sidebar
nexedi
erp5
Commits
c71a47c8
Commit
c71a47c8
authored
Sep 24, 2022
by
Jérome Perrin
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'upstream/master' into zope4py2
parents
5252fde2
e9531ee8
Pipeline
#23745
failed with stage
in 0 seconds
Changes
20
Pipelines
1
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
70 additions
and
80 deletions
+70
-80
bt5/erp5_core_test/TestTemplateItem/portal_components/test.erp5.testBusinessTemplate.py
...eItem/portal_components/test.erp5.testBusinessTemplate.py
+7
-7
bt5/erp5_crm/TestTemplateItem/portal_components/test.erp5.testCRM.py
...m/TestTemplateItem/portal_components/test.erp5.testCRM.py
+1
-1
bt5/erp5_syncml/ModuleComponentTemplateItem/portal_components/module.erp5.SyncMLTransportFile.py
...Item/portal_components/module.erp5.SyncMLTransportFile.py
+1
-1
bt5/erp5_syncml/ToolComponentTemplateItem/portal_components/tool.erp5.SynchronizationTool.py
...teItem/portal_components/tool.erp5.SynchronizationTool.py
+1
-1
product/ERP5/Document/BusinessTemplate.py
product/ERP5/Document/BusinessTemplate.py
+26
-30
product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Base_callDialogMethod.py
...plateItem/portal_skins/erp5_core/Base_callDialogMethod.py
+3
-3
product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/BusinessTemplate_getDiffObjectList.py
...tal_skins/erp5_core/BusinessTemplate_getDiffObjectList.py
+2
-6
product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/BusinessTemplate_getModifiedObject.py
...tal_skins/erp5_core/BusinessTemplate_getModifiedObject.py
+3
-5
product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/ListBox_initializeFastInput.py
...tem/portal_skins/erp5_core/ListBox_initializeFastInput.py
+1
-1
product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/TemplateTool_getModifiedObjectList.py
...tal_skins/erp5_core/TemplateTool_getModifiedObjectList.py
+2
-2
product/ERP5/tests/erp5_url_checker.py
product/ERP5/tests/erp5_url_checker.py
+1
-1
product/ERP5/tests/extractMessageCatalog.py
product/ERP5/tests/extractMessageCatalog.py
+1
-1
product/ERP5/tests/utils.py
product/ERP5/tests/utils.py
+1
-1
product/ERP5Type/XMLExportImport/__init__.py
product/ERP5Type/XMLExportImport/__init__.py
+5
-7
product/ERP5Type/patches/DA.py
product/ERP5Type/patches/DA.py
+1
-1
product/ERP5Type/tests/ProcessingNodeTestCase.py
product/ERP5Type/tests/ProcessingNodeTestCase.py
+1
-1
product/ERP5Type/tests/Python3StyleTest.py
product/ERP5Type/tests/Python3StyleTest.py
+10
-5
product/Formulator/tests/testFormValidator.py
product/Formulator/tests/testFormValidator.py
+1
-1
product/Localizer/MessageCatalog.py
product/Localizer/MessageCatalog.py
+1
-3
product/MailTemplates/BaseMailTemplate.py
product/MailTemplates/BaseMailTemplate.py
+1
-2
No files found.
bt5/erp5_core_test/TestTemplateItem/portal_components/test.erp5.testBusinessTemplate.py
View file @
c71a47c8
...
...
@@ -224,7 +224,7 @@ class BusinessTemplateMixin(ERP5TypeTestCase, LogInterceptor):
file_path
=
os
.
path
.
join
(
cfg
.
instancehome
,
'tests'
,
test_title
+
'.py'
)
if
os
.
path
.
exists
(
file_path
):
os
.
remove
(
file_path
)
f
=
file
(
file_path
,
'w'
)
f
=
open
(
file_path
,
'w'
)
f
.
write
(
test_data
)
f
.
close
()
self
.
assertTrue
(
os
.
path
.
exists
(
file_path
))
...
...
@@ -2371,7 +2371,7 @@ class BusinessTemplateMixin(ERP5TypeTestCase, LogInterceptor):
file_path
=
os
.
path
.
join
(
cfg
.
instancehome
,
'PropertySheet'
,
ps_title
+
'.py'
)
if
os
.
path
.
exists
(
file_path
):
os
.
remove
(
file_path
)
f
=
file
(
file_path
,
'w'
)
f
=
open
(
file_path
,
'w'
)
f
.
write
(
ps_data
)
f
.
close
()
self
.
assertTrue
(
os
.
path
.
exists
(
file_path
))
...
...
@@ -2463,7 +2463,7 @@ class BusinessTemplateMixin(ERP5TypeTestCase, LogInterceptor):
file_path
=
os
.
path
.
join
(
cfg
.
instancehome
,
'PropertySheet'
,
ps_title
+
'.py'
)
if
os
.
path
.
exists
(
file_path
):
os
.
remove
(
file_path
)
f
=
file
(
file_path
,
'w'
)
f
=
open
(
file_path
,
'w'
)
f
.
write
(
ps_data
)
f
.
close
()
self
.
assertTrue
(
os
.
path
.
exists
(
file_path
))
...
...
@@ -8036,7 +8036,7 @@ class _LocalTemplateItemMixin:
file_path
=
os
.
path
.
join
(
self
.
document_base_path
,
self
.
document_title
+
'.py'
)
if
os
.
path
.
exists
(
file_path
):
os
.
remove
(
file_path
)
f
=
file
(
file_path
,
'w'
)
f
=
open
(
file_path
,
'w'
)
f
.
write
(
self
.
document_data
)
f
.
close
()
self
.
assertTrue
(
os
.
path
.
exists
(
file_path
))
...
...
@@ -8048,7 +8048,7 @@ class _LocalTemplateItemMixin:
file_path
=
os
.
path
.
join
(
self
.
document_base_path
,
self
.
document_title
+
'.py'
)
if
os
.
path
.
exists
(
file_path
):
os
.
remove
(
file_path
)
f
=
file
(
file_path
,
'w'
)
f
=
open
(
file_path
,
'w'
)
f
.
write
(
self
.
document_data_updated
)
f
.
close
()
self
.
assertTrue
(
os
.
path
.
exists
(
file_path
))
...
...
@@ -8070,12 +8070,12 @@ class _LocalTemplateItemMixin:
def
stepCheckDocumentExists
(
self
,
sequence
=
None
,
**
kw
):
self
.
assertFalse
(
not
os
.
path
.
exists
(
sequence
[
'document_path'
]))
self
.
assertEqual
(
file
(
sequence
[
'document_path'
]).
read
(),
self
.
assertEqual
(
open
(
sequence
[
'document_path'
]).
read
(),
sequence
[
'document_data'
])
def
stepCheckUpdatedDocumentExists
(
self
,
sequence
=
None
,
**
kw
):
self
.
assertFalse
(
not
os
.
path
.
exists
(
sequence
[
'document_path'
]))
self
.
assertEqual
(
file
(
sequence
[
'document_path'
]).
read
(),
self
.
assertEqual
(
open
(
sequence
[
'document_path'
]).
read
(),
sequence
[
'document_data_updated'
])
def
stepCheckDocumentRemoved
(
self
,
sequence
=
None
,
**
kw
):
...
...
bt5/erp5_crm/TestTemplateItem/portal_components/test.erp5.testCRM.py
View file @
c71a47c8
...
...
@@ -693,7 +693,7 @@ class TestCRMMailIngestion(BaseTestCRM):
def
_readTestData
(
self
,
filename
):
"""read test data from data directory."""
return
file
(
makeFilePath
(
filename
)).
read
()
return
open
(
makeFilePath
(
filename
)).
read
()
def
_ingestMail
(
self
,
filename
=
None
,
data
=
None
):
"""ingest an email from the mail in data dir named `filename`"""
...
...
bt5/erp5_syncml/ModuleComponentTemplateItem/portal_components/module.erp5.SyncMLTransportFile.py
View file @
c71a47c8
...
...
@@ -32,7 +32,7 @@ class FileTransport:
def
send
(
self
,
to_url
,
data
,
sync_id
,
content_type
):
filename
=
to_url
[
len
(
'file:/'
):]
try
:
stream
=
file
(
filename
,
'w'
)
stream
=
open
(
filename
,
'w'
)
stream
.
write
(
data
)
stream
.
close
()
except
IOError
:
...
...
bt5/erp5_syncml/ToolComponentTemplateItem/portal_components/tool.erp5.SynchronizationTool.py
View file @
c71a47c8
...
...
@@ -262,7 +262,7 @@ class SynchronizationTool(BaseTool):
filename
=
from_url
[
len
(
'file:'
):]
xml
=
None
try
:
stream
=
file
(
filename
,
'r'
)
stream
=
open
(
filename
,
'r'
)
except
IOError
:
# XXX-Aurel : Why raising here make unit tests to fail ?
# raise ValueError("Impossible to read file %s, error is %s"
...
...
product/ERP5/Document/BusinessTemplate.py
View file @
c71a47c8
This diff is collapsed.
Click to expand it.
product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Base_callDialogMethod.py
View file @
c71a47c8
...
...
@@ -2,6 +2,7 @@
Generic method called when submitting a form in dialog mode.
Responsible for validating form data and redirecting to the form action.
"""
import
six
# XXX We should not use meta_type properly,
# XXX We need to discuss this problem.(yusei)
...
...
@@ -131,9 +132,8 @@ if len(listbox_id_list):
for
listbox_id
in
listbox_id_list
:
listbox_line_list
=
[]
listbox
=
kw
[
listbox_id
]
listbox_keys
=
listbox
.
keys
()
for
key
in
sorted
(
listbox_keys
):
listbox_line
=
listbox
[
key
]
for
key
,
value
in
sorted
(
six
.
iteritems
(
listbox
)):
listbox_line
=
value
listbox_line
[
'listbox_key'
]
=
key
listbox_line_list
.
append
(
listbox_line
)
listbox_line_list
=
tuple
(
listbox_line_list
)
...
...
product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/BusinessTemplate_getDiffObjectList.py
View file @
c71a47c8
...
...
@@ -35,16 +35,12 @@ if p.portal_templates.compareVersions(bt1.getVersion(), bt2.getVersion()) < 0:
else
:
modified_object_list
=
getModifiedObjectList
(
bt1
,
bt2
)
keys
=
modified_object_list
.
keys
()
i
=
0
object_list
=
[]
for
object_id
in
sorted
(
keys
):
object_state
,
object_class
=
modified_object_list
[
object_id
]
for
i
,
(
object_id
,
value
)
in
enumerate
(
sorted
(
six
.
iteritems
(
modified_object_list
))
):
object_state
,
object_class
=
value
line
=
newTempBase
(
context
,
'tmp_install_%s'
%
(
str
(
i
)))
line
.
edit
(
object_id
=
object_id
,
object_state
=
object_state
,
object_class
=
object_class
,
bt1
=
bt1
.
getId
(),
bt2
=
bt2
.
getId
())
line
.
setUid
(
'new_%s'
%
object_id
)
object_list
.
append
(
line
)
i
+=
1
return
object_list
product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/BusinessTemplate_getModifiedObject.py
View file @
c71a47c8
from
Products.ERP5Type.Document
import
newTempBase
from
Products.ERP5Type.Cache
import
CachingMethod
from
Products.ERP5Type.Utils
import
ensure_list
import
six
Base_translateString
=
context
.
Base_translateString
def
getModifiedObjectList
(
context
):
...
...
@@ -21,7 +22,6 @@ getModifiedObjectList = CachingMethod(getModifiedObjectList,
cache_id_generator
=
cache_id_generator
)
modified_object_list
=
getModifiedObjectList
(
context
)
keys
=
ensure_list
(
modified_object_list
.
keys
())
no_backup_list
=
[
'Action'
,
'SiteProperty'
,
'Module'
,
'Document'
,
'PropertySheet'
,
'Extension'
,
'Test'
,
'Product'
,
'Role'
,
...
...
@@ -40,10 +40,9 @@ backup_title = Base_translateString('Backup And Upgrade')
remove_title
=
Base_translateString
(
'Remove'
)
save_and_remove_title
=
Base_translateString
(
'Backup And Remove'
)
i
=
0
object_list
=
[]
for
object_id
in
sorted
(
keys
):
object_state
,
object_class
=
modified_object_list
[
object_id
]
for
i
,
(
object_id
,
value
)
in
enumerate
(
sorted
(
six
.
iteritems
(
modified_object_list
))
):
object_state
,
object_class
=
value
line
=
newTempBase
(
context
,
'tmp_install_%s'
%
(
str
(
i
)))
if
object_state
==
'New'
:
choice_item_list
=
[[
install_title
,
'install'
]]
...
...
@@ -66,7 +65,6 @@ for object_id in sorted(keys):
choice_item_list
=
choice_item_list
)
line
.
setUid
(
'new_%s'
%
str
(
object_id
))
object_list
.
append
(
line
)
i
+=
1
object_list
.
sort
(
key
=
lambda
x
:(
x
.
object_class
,
x
.
object_state
))
return
object_list
product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/ListBox_initializeFastInput.py
View file @
c71a47c8
...
...
@@ -19,7 +19,7 @@ if hasattr(request, listbox_id):
# initialize the listbox
listbox
=
request
[
listbox_id
]
keys_list
=
sorted
(
listbox
.
keys
()
,
key
=
int
)
keys_list
=
sorted
(
listbox
,
key
=
int
)
if
keys_list
!=
[]:
first_empty_line_id
=
int
(
keys_list
[
-
1
])
+
1
...
...
product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/TemplateTool_getModifiedObjectList.py
View file @
c71a47c8
import
six
REQUEST
=
container
.
REQUEST
Base_translateString
=
context
.
Base_translateString
...
...
@@ -45,8 +46,7 @@ save_and_remove_title = Base_translateString('Backup And Remove')
for
bt
in
bt_id_list
:
bt_title
,
modified_object_list
=
bt_object_dict
[
bt
]
keys
=
modified_object_list
.
keys
()
for
i
,
object_id
in
enumerate
(
sorted
(
keys
)):
for
i
,
(
object_id
,
value
)
in
enumerate
(
sorted
(
six
.
iteritems
(
modified_object_list
))):
object_state
,
object_class
=
modified_object_list
[
object_id
]
object_id
=
bt
+
'|'
+
object_id
line
=
newTempBase
(
context
,
'tmp_install_%s'
%
i
)
...
...
product/ERP5/tests/erp5_url_checker.py
View file @
c71a47c8
...
...
@@ -116,7 +116,7 @@ class URLOpener(FancyURLopener):
if
auth
:
h
.
putheader
(
'Authorization'
,
'Basic %s'
%
auth
)
if
realhost
:
h
.
putheader
(
'Host'
,
realhost
)
for
args
in
self
.
addheaders
:
apply
(
h
.
putheader
,
args
)
for
args
in
self
.
addheaders
:
h
.
putheader
(
*
args
)
h
.
endheaders
()
if
data
is
not
None
:
h
.
send
(
data
+
'
\
r
\
n
'
)
...
...
product/ERP5/tests/extractMessageCatalog.py
View file @
c71a47c8
...
...
@@ -63,7 +63,7 @@ class ExtractMessageCatalog(TestXHTML):
messages
=
dict
(
getattr
(
self
.
portal
.
Localizer
,
i
).
_messages
)
result
[
i
].
update
(
messages
)
f
=
file
(
'%s.pot'
%
i
,
'w'
)
f
=
open
(
'%s.pot'
%
i
,
'w'
)
for
msgid
in
result
[
i
].
keys
():
f
.
write
(
'msgid "%s"
\
n
msgstr ""
\
n
\
n
'
%
msgid
)
...
...
product/ERP5/tests/utils.py
View file @
c71a47c8
...
...
@@ -186,4 +186,4 @@ class BusinessTemplateInfoDir(BusinessTemplateInfoBase):
return
fileinfo
def
readFileInfo
(
self
,
fileinfo
):
return
file
(
fileinfo
).
read
()
return
open
(
fileinfo
).
read
()
product/ERP5Type/XMLExportImport/__init__.py
View file @
c71a47c8
...
...
@@ -143,26 +143,24 @@ def Base_asXML(object, root=None):
# We have to describe the workflow history
if
getattr
(
self
,
'workflow_history'
,
None
)
is
not
None
:
workflow_list
=
self
.
workflow_history
workflow_list_keys
=
workflow_list
.
keys
()
for
workflow_id
in
sorted
(
workflow_list_keys
):
# Make sure it is sorted
for
workflow_action
in
workflow_
list
[
workflow_id
]
:
for
workflow_id
,
workflow_action_list
in
sorted
(
six
.
iteritems
(
workflow_list
)
):
# Make sure it is sorted
for
workflow_action
in
workflow_
action_list
:
workflow_node
=
SubElement
(
object
,
'workflow_action'
,
attrib
=
dict
(
workflow_id
=
workflow_id
))
workflow_variable_list
=
workflow_action
.
keys
()
for
workflow_variable
in
sorted
(
workflow_variable_list
):
for
workflow_variable
,
variable_node_text
in
sorted
(
six
.
iteritems
(
workflow_action
)
):
variable_type
=
"string"
# Somewhat bad, should find a better way
if
workflow_variable
.
find
(
'time'
)
>=
0
:
variable_type
=
"date"
if
workflow_variable
.
find
(
'language_revs'
)
>=
0
:
# XXX specific to cps
variable_type
=
"dict"
if
workflow_action
[
workflow_variable
]
is
None
:
if
variable_node_text
is
None
:
variable_type
=
'None'
variable_node
=
SubElement
(
workflow_node
,
workflow_variable
,
attrib
=
dict
(
type
=
variable_type
))
if
variable_type
!=
'None'
:
variable_node_text
=
str
(
workflow_action
[
workflow_variable
])
variable_node
.
text
=
six
.
text_type
(
variable_node_text
,
'utf-8'
)
variable_node
.
text
=
six
.
text_type
(
str
(
variable_node_text
),
'utf-8'
)
if
workflow_variable
==
'time'
:
time
=
variable_node
.
text
...
...
product/ERP5Type/patches/DA.py
View file @
c71a47c8
...
...
@@ -35,7 +35,7 @@ def DA_fromFile(self, filename):
"""
Read the file and update self
"""
f
=
file
(
filename
)
f
=
open
(
filename
)
s
=
f
.
read
()
f
.
close
()
self
.
fromText
(
s
)
...
...
product/ERP5Type/tests/ProcessingNodeTestCase.py
View file @
c71a47c8
...
...
@@ -113,7 +113,7 @@ def Application_resolveConflict(self, old_state, saved_state, new_state):
new_state
[
'test_distributing_node'
]
=
test_distributing_node_set
.
pop
()
old
,
saved
,
new
=
[
set
(
state
.
pop
(
'test_processing_nodes'
,
{}).
items
())
for
state
in
old_state
,
saved_state
,
new_state
]
for
state
in
(
old_state
,
saved_state
,
new_state
)
]
# The value of these attributes don't have proper __eq__ implementation.
for
attr
in
'__before_traverse__'
,
'__before_publishing_traverse__'
:
del
old_state
[
attr
],
saved_state
[
attr
]
...
...
product/ERP5Type/tests/Python3StyleTest.py
View file @
c71a47c8
...
...
@@ -75,18 +75,23 @@ class Python3StyleTest(ERP5TypeTestCase):
if
error
:
self
.
fail
(
error
)
def
test_raiseFixApplied
(
self
):
self
.
_testFixer
(
'raise'
)
def
test_importFixApplied
(
self
):
self
.
_testFixer
(
'import'
)
def
test_applyFixApplied
(
self
):
self
.
_testFixer
(
'apply'
)
def
test_hasKeyFixApplied
(
self
):
self
.
_testFixer
(
'has_key'
)
def
test_importFixApplied
(
self
):
self
.
_testFixer
(
'import'
)
def
test_numliteralsFixApplied
(
self
):
self
.
_testFixer
(
'numliterals'
)
def
test_numliteralsFixApplied
(
self
):
self
.
_testFixer
(
'paren'
)
def
test_raiseFixApplied
(
self
):
self
.
_testFixer
(
'raise'
)
def
test_suite
():
suite
=
unittest
.
TestSuite
()
...
...
product/Formulator/tests/testFormValidator.py
View file @
c71a47c8
...
...
@@ -27,7 +27,7 @@ class TestField:
class
ValidatorTestCase
(
unittest
.
TestCase
):
def
assertValidatorRaises
(
self
,
exception
,
error_key
,
f
,
*
args
,
**
kw
):
try
:
apply
(
f
,
args
,
kw
)
f
(
*
args
,
**
kw
)
except
exception
as
e
:
if
hasattr
(
e
,
'error_key'
)
and
e
.
error_key
!=
error_key
:
self
.
fail
(
'Got wrong error. Expected %s received %s'
%
...
...
product/Localizer/MessageCatalog.py
View file @
c71a47c8
...
...
@@ -646,10 +646,8 @@ class MessageCatalog(LanguageManager, ObjectManager, SimpleItem):
return
x
# Generate sorted msgids to simplify diffs
dkeys
=
d
.
keys
()
for
k
in
sorted
(
dkeys
):
for
k
,
v
in
sorted
(
six
.
iteritems
(
d
)):
r
.
append
(
'msgid "%s"'
%
backslashescape
(
k
))
v
=
d
[
k
]
r
.
append
(
'msgstr "%s"'
%
backslashescape
(
v
))
r
.
append
(
''
)
...
...
product/MailTemplates/BaseMailTemplate.py
View file @
c71a47c8
...
...
@@ -118,8 +118,7 @@ class BaseMailTemplate:
# we want to have it stored in ERP5, for mail threading
headers
[
'Message-ID'
]
=
make_msgid
()
# turn headers into an ordered list for predictable header order
keys
=
headers
.
keys
()
return
msg
,
values
,[(
key
,
headers
[
key
])
for
key
in
sorted
(
keys
)]
return
msg
,
values
,
[(
key
,
value
)
for
key
,
value
in
sorted
(
six
.
iteritems
(
headers
))]
security
.
declarePrivate
(
'_send'
)
def
_send
(
self
,
mfrom
,
mto
,
msg
):
...
...
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