Commit e8a039b6 authored by Arnaud Fontaine's avatar Arnaud Fontaine

Cosmetic changes and remove unused imports.

parent 46f94fb5
...@@ -440,7 +440,7 @@ class BalanceTransaction(AccountingTransaction, Inventory): ...@@ -440,7 +440,7 @@ class BalanceTransaction(AccountingTransaction, Inventory):
return factory return factory
def _immediateReindexObject(self, **kw): def _immediateReindexObject(self, *args, **kw):
"""Reindexes the object. """Reindexes the object.
This is different indexing that the default Inventory indexing, because This is different indexing that the default Inventory indexing, because
we want to take into account that lines in this balance transaction to we want to take into account that lines in this balance transaction to
......
...@@ -26,7 +26,7 @@ section_region = section.getRegion() ...@@ -26,7 +26,7 @@ section_region = section.getRegion()
ledger = request.get("ledger", None) ledger = request.get("ledger", None)
if ledger is not None: if ledger is not None:
portal_categories = context.getPortalObject().portal_categories portal_categories = context.getPortalObject().portal_categories
if isinstance(ledger, list) or isinstance(ledger, tuple): if isinstance(ledger, (tuple, list)):
ledger_uid = [portal_categories.ledger.restrictedTraverse(item).getUid() for item in ledger] ledger_uid = [portal_categories.ledger.restrictedTraverse(item).getUid() for item in ledger]
else: else:
ledger_uid = portal_categories.ledger.restrictedTraverse(ledger).getUid() ledger_uid = portal_categories.ledger.restrictedTraverse(ledger).getUid()
......
...@@ -23,7 +23,7 @@ kw['where_expression'] = " section.portal_type = 'Organisation' " ...@@ -23,7 +23,7 @@ kw['where_expression'] = " section.portal_type = 'Organisation' "
ledger = kw.get('ledger', request.get("ledger", None)) ledger = kw.get('ledger', request.get("ledger", None))
if ledger is not None: if ledger is not None:
portal_categories = context.getPortalObject().portal_categories portal_categories = context.getPortalObject().portal_categories
if isinstance(ledger, list) or isinstance(ledger, tuple): if isinstance(ledger, (tuple, list)):
kw['ledger_uid'] = [portal_categories.ledger.restrictedTraverse(item).getUid() for item in ledger] kw['ledger_uid'] = [portal_categories.ledger.restrictedTraverse(item).getUid() for item in ledger]
else: else:
kw['ledger_uid'] = portal_categories.ledger.restrictedTraverse(ledger).getUid() kw['ledger_uid'] = portal_categories.ledger.restrictedTraverse(ledger).getUid()
......
...@@ -22,7 +22,7 @@ kw['where_expression'] = " section.portal_type = 'Organisation' " ...@@ -22,7 +22,7 @@ kw['where_expression'] = " section.portal_type = 'Organisation' "
ledger = kwd.get('ledger', request.get("ledger", None)) ledger = kwd.get('ledger', request.get("ledger", None))
if ledger is not None: if ledger is not None:
portal_categories = context.getPortalObject().portal_categories portal_categories = context.getPortalObject().portal_categories
if isinstance(ledger, list) or isinstance(ledger, tuple): if isinstance(ledger, (tuple, list)):
kw['ledger_uid'] = [portal_categories.ledger.restrictedTraverse(item).getUid() for item in ledger] kw['ledger_uid'] = [portal_categories.ledger.restrictedTraverse(item).getUid() for item in ledger]
else: else:
kw['ledger_uid'] = portal_categories.ledger.restrictedTraverse(ledger).getUid() kw['ledger_uid'] = portal_categories.ledger.restrictedTraverse(ledger).getUid()
......
...@@ -27,7 +27,7 @@ kw['where_expression'] = " section.portal_type = 'Organisation' " ...@@ -27,7 +27,7 @@ kw['where_expression'] = " section.portal_type = 'Organisation' "
ledger = kwd.get('ledger', request.get("ledger", None)) ledger = kwd.get('ledger', request.get("ledger", None))
if ledger is not None: if ledger is not None:
portal_categories = context.getPortalObject().portal_categories portal_categories = context.getPortalObject().portal_categories
if isinstance(ledger, list) or isinstance(ledger, tuple): if isinstance(ledger, (tuple, list)):
kw['ledger_uid'] = [portal_categories.ledger.restrictedTraverse(item).getUid() for item in ledger] kw['ledger_uid'] = [portal_categories.ledger.restrictedTraverse(item).getUid() for item in ledger]
else: else:
kw['ledger_uid'] = portal_categories.ledger.restrictedTraverse(ledger).getUid() kw['ledger_uid'] = portal_categories.ledger.restrictedTraverse(ledger).getUid()
...@@ -47,7 +47,7 @@ accounts_to_expand_by_tp = rec_cat.getAccountTypeRelatedValueList(**params) + \ ...@@ -47,7 +47,7 @@ accounts_to_expand_by_tp = rec_cat.getAccountTypeRelatedValueList(**params) + \
total_balance = 0.0 total_balance = 0.0
for account_gap_number in accounts: for account_gap_number in accounts:
# We get all acounts strict member of this GAP category # We get all accounts strict member of this GAP category
gap = context.restrictedTraverse('portal_categories/' + getURL(account_gap_number)) gap = context.restrictedTraverse('portal_categories/' + getURL(account_gap_number))
for account in gap.getGapRelatedValueList(portal_type='Account'): for account in gap.getGapRelatedValueList(portal_type='Account'):
......
...@@ -207,7 +207,7 @@ class CategoryBudgetVariation(BudgetVariation): ...@@ -207,7 +207,7 @@ class CategoryBudgetVariation(BudgetVariation):
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'getBudgetVariationRangeCategoryList') 'getBudgetVariationRangeCategoryList')
def getBudgetVariationRangeCategoryList(self, context): def getBudgetVariationRangeCategoryList(self, _):
"""Returns the Variation Range Category List that can be applied to this """Returns the Variation Range Category List that can be applied to this
budget. budget.
""" """
......
...@@ -15,6 +15,6 @@ for inventory in stool.getInventoryList( ...@@ -15,6 +15,6 @@ for inventory in stool.getInventoryList(
resource_list.append( resource_list.append(
(inventory.resource_relative_url, (inventory.resource_relative_url,
portal.portal_categories.restrictedTraverse( portal.portal_categories.restrictedTraverse(
inventory.resource_relative_url).getTitle())) inventory.resource_relative_url).getTranslatedTitle()))
return resource_list return resource_list
...@@ -103,7 +103,8 @@ class CertificateAuthorityTool(BaseTool): ...@@ -103,7 +103,8 @@ class CertificateAuthorityTool(BaseTool):
Raises CertificateAuthorityBusy""" Raises CertificateAuthorityBusy"""
if os.path.exists(self.lock): if os.path.exists(self.lock):
raise CertificateAuthorityBusy raise CertificateAuthorityBusy
open(self.lock, 'w').write('locked') with open(self.lock, 'w') as f:
f.write('locked')
def _unlockCertificateAuthority(self): def _unlockCertificateAuthority(self):
"""Checks lock and locks Certificate Authority tool""" """Checks lock and locks Certificate Authority tool"""
...@@ -192,7 +193,8 @@ class CertificateAuthorityTool(BaseTool): ...@@ -192,7 +193,8 @@ class CertificateAuthorityTool(BaseTool):
self._checkCertificateAuthority() self._checkCertificateAuthority()
self._lockCertificateAuthority() self._lockCertificateAuthority()
index = open(self.index).read().splitlines() with open(self.index) as f:
index = f.read().splitlines()
valid_line_list = [q for q in index if q.startswith('V') and valid_line_list = [q for q in index if q.startswith('V') and
('CN=%s/' % common_name in q)] ('CN=%s/' % common_name in q)]
if len(valid_line_list) >= 1: if len(valid_line_list) >= 1:
...@@ -201,7 +203,8 @@ class CertificateAuthorityTool(BaseTool): ...@@ -201,7 +203,8 @@ class CertificateAuthorityTool(BaseTool):
'please revoke it before request a new one..' % common_name) 'please revoke it before request a new one..' % common_name)
try: try:
new_id = open(self.serial, 'r').read().strip().lower() with open(self.serial, 'r') as f:
new_id = f.read().strip().lower()
key = os.path.join(self.certificate_authority_path, 'private', key = os.path.join(self.certificate_authority_path, 'private',
new_id+'.key') new_id+'.key')
csr = os.path.join(self.certificate_authority_path, new_id + '.csr') csr = os.path.join(self.certificate_authority_path, new_id + '.csr')
...@@ -216,9 +219,13 @@ class CertificateAuthorityTool(BaseTool): ...@@ -216,9 +219,13 @@ class CertificateAuthorityTool(BaseTool):
'-batch', '-config', self.openssl_config, '-out', cert, '-infiles', '-batch', '-config', self.openssl_config, '-out', cert, '-infiles',
csr]) csr])
os.unlink(csr) os.unlink(csr)
with open(key) as f:
key = f.read()
with open(cert) as f:
cert = f.read()
return dict( return dict(
key=open(key).read(), key=key,
certificate=open(cert).read(), certificate=cert,
id=new_id, id=new_id,
common_name=common_name) common_name=common_name)
except Exception: except Exception:
...@@ -242,7 +249,8 @@ class CertificateAuthorityTool(BaseTool): ...@@ -242,7 +249,8 @@ class CertificateAuthorityTool(BaseTool):
self._checkCertificateAuthority() self._checkCertificateAuthority()
self._lockCertificateAuthority() self._lockCertificateAuthority()
try: try:
new_id = open(self.crl, 'r').read().strip().lower() with open(self.crl, 'r') as f:
new_id = f.read().strip().lower()
crl_path = os.path.join(self.certificate_authority_path, 'crl') crl_path = os.path.join(self.certificate_authority_path, 'crl')
crl = os.path.join(crl_path, new_id + '.crl') crl = os.path.join(crl_path, new_id + '.crl')
cert = os.path.join(self.certificate_authority_path, 'certs', cert = os.path.join(self.certificate_authority_path, 'certs',
...@@ -260,7 +268,9 @@ class CertificateAuthorityTool(BaseTool): ...@@ -260,7 +268,9 @@ class CertificateAuthorityTool(BaseTool):
alias += str(len(glob.glob(alias + '*'))) alias += str(len(glob.glob(alias + '*')))
created.append(alias) created.append(alias)
os.symlink(os.path.basename(crl), alias) os.symlink(os.path.basename(crl), alias)
return dict(crl=open(crl).read()) with open(crl) as f:
crl = f.read()
return dict(crl=crl)
except Exception: except Exception:
e = sys.exc_info() e = sys.exc_info()
try: try:
...@@ -278,7 +288,8 @@ class CertificateAuthorityTool(BaseTool): ...@@ -278,7 +288,8 @@ class CertificateAuthorityTool(BaseTool):
self._unlockCertificateAuthority() self._unlockCertificateAuthority()
def _getValidSerial(self, common_name): def _getValidSerial(self, common_name):
index = open(self.index).read().splitlines() with open(self.index) as f:
index = f.read().splitlines()
valid_line_list = [q for q in index if q.startswith('V') and valid_line_list = [q for q in index if q.startswith('V') and
('CN=%s/' % common_name in q)] ('CN=%s/' % common_name in q)]
if len(valid_line_list) < 1: if len(valid_line_list) < 1:
......
...@@ -347,8 +347,8 @@ class BusinessConfiguration(Item): ...@@ -347,8 +347,8 @@ class BusinessConfiguration(Item):
## we have already created configuration save for this state ## we have already created configuration save for this state
## so remove from it already existing configuration items ## so remove from it already existing configuration items
if configuration_save != self: # don't delete ourselves if configuration_save != self: # don't delete ourselves
existing_conf_items = configuration_save.objectIds() existing_conf_items = list(configuration_save.objectIds())
existing_conf_items = map(None, existing_conf_items) if existing_conf_items:
configuration_save.manage_delObjects(existing_conf_items) configuration_save.manage_delObjects(existing_conf_items)
modified_form_kw = {} modified_form_kw = {}
......
############################################################################## ##############################################################################
# coding: utf-8
# Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved. # Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved.
# Rafael Monnerat <rafael@nexedi.com> # Rafael Monnerat <rafael@nexedi.com>
# Ivan Tyagov <ivan@nexedi.com> # Ivan Tyagov <ivan@nexedi.com>
......
password_confirm = request.get('field_your_password_confirm', None) password_confirm = request.get('field_your_password_confirm', None)
if editor.encode('ascii', 'ignore') != editor:
return False
return password_confirm == editor return password_confirm == editor
...@@ -348,7 +348,7 @@ def test_suite(): ...@@ -348,7 +348,7 @@ def test_suite():
suite.addTest(unittest.makeSuite(TestTimeZoneContext)) suite.addTest(unittest.makeSuite(TestTimeZoneContext))
suite.addTest(unittest.makeSuite(TestDateTimePatch)) suite.addTest(unittest.makeSuite(TestDateTimePatch))
# also run original tests from DateTime module # also run original tests from DateTime module BBB ZOPE2
# pylint:disable=no-name-in-module # pylint:disable=no-name-in-module
try: try:
import DateTime.tests.testDateTime as test_datetime import DateTime.tests.testDateTime as test_datetime
......
...@@ -4074,7 +4074,8 @@ VALUES ...@@ -4074,7 +4074,8 @@ VALUES
def doSomething(self, message_list): def doSomething(self, message_list):
r = [] r = []
for m in message_list: for m in message_list:
m.result = r.append(m.object.getPath()) r.append(m.object.getPath())
m.result = None
r.sort() r.sort()
group_method_call_list.append(r) group_method_call_list.append(r)
self.portal.portal_activities.__class__.doSomething = doSomething self.portal.portal_activities.__class__.doSomething = doSomething
......
...@@ -37,7 +37,7 @@ import email ...@@ -37,7 +37,7 @@ import email
from email.header import decode_header, make_header from email.header import decode_header, make_header
from email.utils import parseaddr from email.utils import parseaddr
# Copied from ERP5Type/patches/CMFMailIn.py # Copied from bt5/erp5_egov/TestTemplateItem/testEGovMixin.py
def decode_email(file_): def decode_email(file_):
# Prepare result # Prepare result
theMail = { theMail = {
...@@ -77,7 +77,7 @@ def decode_email(file_): ...@@ -77,7 +77,7 @@ def decode_email(file_):
elif content_type == 'message/rfc822': elif content_type == 'message/rfc822':
continue continue
elif content_type in ("text/plain", "text/html"): elif content_type in ("text/plain", "text/html"):
charset = part.get_content_charset() charset = part.get_content_charset() or 'utf-8'
payload = part.get_payload(decode=True) payload = part.get_payload(decode=True)
#LOG('CMFMailIn -> ',0,'charset: %s, payload: %s' % (charset,payload)) #LOG('CMFMailIn -> ',0,'charset: %s, payload: %s' % (charset,payload))
if charset: if charset:
......
...@@ -15,7 +15,7 @@ import re ...@@ -15,7 +15,7 @@ import re
from Products.PythonScripts.standard import html_quote from Products.PythonScripts.standard import html_quote
blank = "" blank = ""
header_current = 1 header_current = '0'
header_initial = None header_initial = None
table_of_content = blank table_of_content = blank
index = 0 index = 0
......
...@@ -1097,15 +1097,14 @@ class TestERP5Credential(ERP5TypeTestCase): ...@@ -1097,15 +1097,14 @@ class TestERP5Credential(ERP5TypeTestCase):
default_follow_up_uid=credential_request.getUid()) default_follow_up_uid=credential_request.getUid())
last_message = self.portal.MailHost._last_message last_message = self.portal.MailHost._last_message
self.assertNotEqual((), last_message) self.assertNotEqual((), last_message)
mfrom, mto, message_text = last_message mfrom, mto, _ = last_message
self.assertEqual(mfrom, 'Portal Administrator <postmaster@localhost>') self.assertEqual(mfrom, 'Portal Administrator <postmaster@localhost>')
self.assertEqual(['Vifib Test <barney@duff.com>'], mto) self.assertEqual(['Vifib Test <barney@duff.com>'], mto)
self.assertNotEqual(re.search(r"Subject\:.*Welcome", message_text), None)
self.assertNotEqual(re.search(r"Hello\ Vifib\ Test\,", message_text), None)
decoded_message = self.decode_email(last_message[2]) decoded_message = self.decode_email(last_message[2])
self.assertEqual(decoded_message["headers"]["subject"], "Welcome")
body_message = decoded_message['body'] body_message = decoded_message['body']
self.assertNotEqual(re.search("key=%s" % mail_message.getReference(), self.assertRegex(body_message, r"Hello\ Vifib\ Test\,")
body_message), None) self.assertRegex(body_message, "key=%s" % mail_message.getReference())
def testAssignmentCreationUsingSystemPreferenceProperty(self): def testAssignmentCreationUsingSystemPreferenceProperty(self):
""" """
......
text = context.asText() text = context.asText()
LENGTH = 25 LENGTH = 25
#TODO: Think about the display length of multibyte characters. # TODO: Think about the display length of multibyte characters.
try: try:
return unicode(text, 'utf-8')[:LENGTH].encode('utf-8') return unicode(text, 'utf-8')[:LENGTH].encode('utf-8')
except UnicodeDecodeError: except UnicodeDecodeError:
......
...@@ -1603,7 +1603,7 @@ class TestCRMMailSend(BaseTestCRM): ...@@ -1603,7 +1603,7 @@ class TestCRMMailSend(BaseTestCRM):
def test_testValidatorForAttachmentField(self): def test_testValidatorForAttachmentField(self):
""" """
If an Event Type doesn't allow Emebedded Files in its sub portal types, If an Event Type doesn't allow Embedded Files in its sub portal types,
then the dialog should tell the user that attachment can't be uploaded then the dialog should tell the user that attachment can't be uploaded
""" """
# Add a document which will be attached. # Add a document which will be attached.
...@@ -1792,7 +1792,7 @@ class TestCRMMailSend(BaseTestCRM): ...@@ -1792,7 +1792,7 @@ class TestCRMMailSend(BaseTestCRM):
def test_cloneEvent(self): def test_cloneEvent(self):
""" """
All events uses after script and interaciton All events uses after script and interaction
workflow add a test for clone workflow add a test for clone
""" """
# XXX in the case of title, getTitle ignores the title attribute, # XXX in the case of title, getTitle ignores the title attribute,
...@@ -1825,7 +1825,7 @@ class TestCRMMailSend(BaseTestCRM): ...@@ -1825,7 +1825,7 @@ class TestCRMMailSend(BaseTestCRM):
def test_cloneTicketAndEventList(self): def test_cloneTicketAndEventList(self):
""" """
All events uses after script and interaciton All events uses after script and interaction
workflow add a test for clone workflow add a test for clone
""" """
portal = self.portal portal = self.portal
......
...@@ -150,12 +150,10 @@ class TestEditorField(ERP5TypeTestCase, ZopeTestCase.Functional): ...@@ -150,12 +150,10 @@ class TestEditorField(ERP5TypeTestCase, ZopeTestCase.Functional):
if html_text.find(match_string1) == -1: if html_text.find(match_string1) == -1:
print(html_text) print(html_text)
print(match_string1) print(match_string1)
import pdb; pdb.set_trace()
return False return False
if html_text.find(match_string2) == -1: if html_text.find(match_string2) == -1:
print(html_text) print(html_text)
print(match_string2) print(match_string2)
import pdb; pdb.set_trace()
return False return False
return True return True
......
...@@ -767,7 +767,7 @@ class Environment(object): ...@@ -767,7 +767,7 @@ class Environment(object):
class ImportFixer(ast.NodeTransformer): class ImportFixer(ast.NodeTransformer):
""" """
The ImportFixer class is responsivle for fixing "normal" imports that users The ImportFixer class is responsible for fixing "normal" imports that users
might try to execute. might try to execute.
It will automatically replace them with the proper usage of the environment It will automatically replace them with the proper usage of the environment
...@@ -780,7 +780,7 @@ class ImportFixer(ast.NodeTransformer): ...@@ -780,7 +780,7 @@ class ImportFixer(ast.NodeTransformer):
def visit_FunctionDef(self, node): def visit_FunctionDef(self, node):
""" """
Processes funcion definition nodes. We want to store a list of all the Processes function definition nodes. We want to store a list of all the
import that are inside functions, because they do not affect the outter import that are inside functions, because they do not affect the outter
user context, thus do not imply in any un-pickleable variable being added user context, thus do not imply in any un-pickleable variable being added
there. there.
...@@ -876,7 +876,7 @@ class ImportFixer(ast.NodeTransformer): ...@@ -876,7 +876,7 @@ class ImportFixer(ast.NodeTransformer):
else: else:
# case when "import <module_name>" # case when "import <module_name>"
module_names = [(node.names[0].name), ] module_names = [(node.names[0].name), ]
test_import_string = "import %s" %node.names[0].name test_import_string = "import %s" % node.names[0].name
result_name = node.names[0].name result_name = node.names[0].name
root_module_name = node.names[0].name root_module_name = node.names[0].name
......
...@@ -2064,6 +2064,7 @@ document.write('<sc'+'ript type="text/javascript" src="http://somosite.bg/utb.ph ...@@ -2064,6 +2064,7 @@ document.write('<sc'+'ript type="text/javascript" src="http://somosite.bg/utb.ph
web_page = module.newContent(portal_type=web_page_portal_type, web_page = module.newContent(portal_type=web_page_portal_type,
file=upload_file) file=upload_file)
self.tic() self.tic()
self.assertEqual(web_page.getContentType(), 'text/plain')
text_content = web_page.getTextContent() text_content = web_page.getTextContent()
my_utf_eight_token = 'ùééàçèîà' my_utf_eight_token = 'ùééàçèîà'
text_content = text_content.replace('\n', '\n%s\n' % my_utf_eight_token) text_content = text_content.replace('\n', '\n%s\n' % my_utf_eight_token)
......
...@@ -104,8 +104,6 @@ def customScript(script_id, script_param, script_code): ...@@ -104,8 +104,6 @@ def customScript(script_id, script_param, script_code):
class TestERP5WebWithDms(ERP5TypeTestCase, ZopeTestCase.Functional): class TestERP5WebWithDms(ERP5TypeTestCase, ZopeTestCase.Functional):
"""Test for erp5_web business template. """Test for erp5_web business template.
""" """
run_all_test = 1
quiet = 0
website_id = 'test' website_id = 'test'
def getTitle(self): def getTitle(self):
...@@ -213,28 +211,24 @@ class TestERP5WebWithDms(ERP5TypeTestCase, ZopeTestCase.Functional): ...@@ -213,28 +211,24 @@ class TestERP5WebWithDms(ERP5TypeTestCase, ZopeTestCase.Functional):
return webpage_list return webpage_list
def test_01_WebPageVersioning(self, quiet=quiet, run=run_all_test): def test_01_WebPageVersioning(self):
""" """
Simple Case of showing the proper most recent public Web Page based on Simple Case of showing the proper most recent public Web Page based on
(language, version) (language, version)
""" """
if not run: return
if not quiet:
message = '\ntest_01_WebPageVersioning'
ZopeTestCase._print(message)
portal = self.getPortal() portal = self.getPortal()
self.setupWebSite() self.setupWebSite()
websection = self.setupWebSection() websection = self.setupWebSection()
page_reference = 'default-webpage-versionning' page_reference = 'default-webpage-versionning'
self.setupWebSitePages(prefix = page_reference) self.setupWebSitePages(prefix=page_reference)
# set default web page for section # set default web page for section
found_by_reference = portal.portal_catalog(reference = page_reference, found_by_reference = portal.portal_catalog(reference=page_reference,
language = 'en', language='en',
portal_type = 'Web Page') portal_type='Web Page')
en_01 = found_by_reference[0].getObject() en_01 = found_by_reference[0].getObject()
# set it as default web page for section # set it as default web page for section
websection.edit(categories_list = ['aggregate/%s' %en_01.getRelativeUrl(),]) websection.edit(categories_list=['aggregate/%s' % en_01.getRelativeUrl(),])
self.assertEqual([en_01.getReference(),], self.assertEqual([en_01.getReference(),],
websection.getAggregateReferenceList()) websection.getAggregateReferenceList())
...@@ -259,15 +253,11 @@ class TestERP5WebWithDms(ERP5TypeTestCase, ZopeTestCase.Functional): ...@@ -259,15 +253,11 @@ class TestERP5WebWithDms(ERP5TypeTestCase, ZopeTestCase.Functional):
self.assertEqual('0.2', default_document.getVersion()) self.assertEqual('0.2', default_document.getVersion())
self.assertEqual('published', default_document.getValidationState()) self.assertEqual('published', default_document.getValidationState())
def test_02_WebSectionAuthorizationForced(self, quiet=quiet, run=run_all_test): def test_02_WebSectionAuthorizationForced(self):
""" Check that when a document is requested within a Web Section we have a chance to """ Check that when a document is requested within a Web Section we have a chance to
require user to login. require user to login.
Whether or not an user will login is controlled by a property on Web Section (authorization_forced). Whether or not an user will login is controlled by a property on Web Section (authorization_forced).
""" """
if not run: return
if not quiet:
message = '\ntest_02_WebSectionAuthorizationForced'
ZopeTestCase._print(message)
request = self.app.REQUEST request = self.app.REQUEST
website = self.setupWebSite() website = self.setupWebSite()
websection = self.setupWebSection() websection = self.setupWebSection()
...@@ -303,25 +293,19 @@ class TestERP5WebWithDms(ERP5TypeTestCase, ZopeTestCase.Functional): ...@@ -303,25 +293,19 @@ class TestERP5WebWithDms(ERP5TypeTestCase, ZopeTestCase.Functional):
self.logout() self.logout()
self.assertRaises(Unauthorized, websection._getExtensibleContent, request, document_reference) self.assertRaises(Unauthorized, websection._getExtensibleContent, request, document_reference)
def test_03_LatestContent(self, quiet=quiet, run=run_all_test): def test_03_LatestContent(self):
""" Test latest content for a Web Section. Test different use case like languaeg, workflow state. """ Test latest content for a Web Section. Test different use case like languaeg, workflow state.
""" """
if not run: return
if not quiet:
message = '\ntest_03_LatestContent'
ZopeTestCase._print(message)
portal = self.getPortal() portal = self.getPortal()
self.setupWebSite() self.setupWebSite()
websection = self.setupWebSection() websection = self.setupWebSection()
portal_categories = portal.portal_categories portal_categories = portal.portal_categories
publication_section_category_id_list = ['documentation', 'administration'] publication_section_category_id_list = ['documentation', 'administration']
for category_id in publication_section_category_id_list: for category_id in publication_section_category_id_list:
portal_categories.publication_section.newContent(portal_type = 'Category', portal_categories.publication_section.newContent(portal_type='Category', id=category_id)
id = category_id) # set predicate on web section using 'publication_section'
#set predicate on web section using 'publication_section' websection.edit(membership_criterion_base_category=['publication_section'],
websection.edit(membership_criterion_base_category = ['publication_section'], membership_criterion_category=['publication_section/%s' % publication_section_category_id_list[0]])
membership_criterion_category=['publication_section/%s'
%publication_section_category_id_list[0]])
self.tic() self.tic()
self.assertEqual(0, len(websection.getDocumentValueList())) self.assertEqual(0, len(websection.getDocumentValueList()))
...@@ -354,15 +338,11 @@ class TestERP5WebWithDms(ERP5TypeTestCase, ZopeTestCase.Functional): ...@@ -354,15 +338,11 @@ class TestERP5WebWithDms(ERP5TypeTestCase, ZopeTestCase.Functional):
self.assertEqual(1, len(websection.getDocumentValueList())) self.assertEqual(1, len(websection.getDocumentValueList()))
self.assertEqual(web_page_en, websection.getDocumentValueList()[0].getObject()) self.assertEqual(web_page_en, websection.getDocumentValueList()[0].getObject())
def test_04_WebSectionAuthorizationForcedForDefaultDocument(self, quiet=quiet, run=run_all_test): def test_04_WebSectionAuthorizationForcedForDefaultDocument(self):
""" Check that when a Web Section contains a default document not accessible by user we have a chance to """ Check that when a Web Section contains a default document not accessible by user we have a chance to
require user to login. require user to login.
Whether or not an user will login is controlled by a property on Web Section (authorization_forced). Whether or not an user will login is controlled by a property on Web Section (authorization_forced).
""" """
if not run: return
if not quiet:
message = '\ntest_04_WebSectionAuthorizationForcedForDefaultDocument'
ZopeTestCase._print(message)
self.setupWebSite() self.setupWebSite()
websection = self.setupWebSection() websection = self.setupWebSection()
web_page_reference = 'default-document-reference' web_page_reference = 'default-document-reference'
...@@ -413,15 +393,11 @@ class TestERP5WebWithDms(ERP5TypeTestCase, ZopeTestCase.Functional): ...@@ -413,15 +393,11 @@ class TestERP5WebWithDms(ERP5TypeTestCase, ZopeTestCase.Functional):
self.commit() self.commit()
self.assertEqual(5, len(websection.getDocumentValueList(limit=5))) self.assertEqual(5, len(websection.getDocumentValueList(limit=5)))
def test_05_deadProxyFields(self, quiet=quiet, run=run_all_test): def test_05_deadProxyFields(self):
""" """
check that all proxy fields defined in business templates have a valid check that all proxy fields defined in business templates have a valid
target target
""" """
if not run: return
if not quiet:
message = '\ntest_05_deadProxyFields'
ZopeTestCase._print(message)
skins_tool = self.portal.portal_skins skins_tool = self.portal.portal_skins
for field_path, field in skins_tool.ZopeFind( for field_path, field in skins_tool.ZopeFind(
skins_tool, obj_metatypes=['ProxyField'], search_sub=1): skins_tool, obj_metatypes=['ProxyField'], search_sub=1):
...@@ -936,11 +912,9 @@ return True ...@@ -936,11 +912,9 @@ return True
url at the url of the image tag. ie: url at the url of the image tag. ie:
<image xlink:href="http://www.erp5.com/user-XXX-XXX" <image xlink:href="http://www.erp5.com/user-XXX-XXX"
""" """
portal = self.portal background_image = self.portal.image_module.newContent(
module = portal.getDefaultModule(portal_type=portal_type) portal_type='Image',
upload_file = self.makeFileUpload('user-TESTSVG-BACKGROUND-IMAGE.png') file=self.makeFileUpload('user-TESTSVG-BACKGROUND-IMAGE.png'),
background_image = module.newContent(portal_type=portal_type,
file=upload_file,
reference="NXD-BACKGROUND") reference="NXD-BACKGROUND")
background_image.publish() background_image.publish()
self.tic() self.tic()
...@@ -1671,7 +1645,7 @@ return True ...@@ -1671,7 +1645,7 @@ return True
break break
else: else:
raise LookupError("No action with reference 'web_view' found") raise LookupError("No action with reference 'web_view' found")
assert action.getVisible() is 1 self.assertTrue(action.getVisible())
# check when the file is empty # check when the file is empty
document_object = portal[module_id].newContent(portal_type=portal_type) document_object = portal[module_id].newContent(portal_type=portal_type)
......
...@@ -190,7 +190,7 @@ class TestWebDavSupport(ERP5TypeTestCase): ...@@ -190,7 +190,7 @@ class TestWebDavSupport(ERP5TypeTestCase):
self.assertEqual(web_page_module[filename].getData(), iso_text_content) self.assertEqual(web_page_module[filename].getData(), iso_text_content)
# Convert to base format and run conversion into utf-8 # Convert to base format and run conversion into utf-8
self.tic() self.tic()
# Content-Type header is replaced if sonversion encoding succeed # Content-Type header is replaced if conversion encoding succeed
new_text_content = text_content.replace('charset=iso-8859-1', 'charset=utf-8') new_text_content = text_content.replace('charset=iso-8859-1', 'charset=utf-8')
self.assertEqual(web_page_module[filename].getTextContent(), new_text_content) self.assertEqual(web_page_module[filename].getTextContent(), new_text_content)
...@@ -214,7 +214,7 @@ class TestWebDavSupport(ERP5TypeTestCase): ...@@ -214,7 +214,7 @@ class TestWebDavSupport(ERP5TypeTestCase):
# This is HTTPServer.zhttp_server not HTTPServer.zwebdav_server # This is HTTPServer.zhttp_server not HTTPServer.zwebdav_server
# force usage of manage_FTPget like zwebdav_server does # force usage of manage_FTPget like zwebdav_server does
response = self.publish(document.getPath()+'/manage_FTPget', response = self.publish(document.getPath() + '/manage_FTPget',
request_method='GET', request_method='GET',
stdin=StringIO(), stdin=StringIO(),
basic=self.authentication) basic=self.authentication)
......
...@@ -865,7 +865,7 @@ class TestTemplateTool(ERP5TypeTestCase): ...@@ -865,7 +865,7 @@ class TestTemplateTool(ERP5TypeTestCase):
erp5_test = self.portal.portal_skins['erp5_test'] erp5_test = self.portal.portal_skins['erp5_test']
self.assertTrue(erp5_test.hasObject('test_file')) self.assertTrue(erp5_test.hasObject('test_file'))
def test_ownerhsip(self): def test_ownership(self):
self.assertEqual( self.assertEqual(
self.portal.portal_skins.erp5_core.getOwnerTuple(), self.portal.portal_skins.erp5_core.getOwnerTuple(),
([self.portal.getId(), 'acl_users'], 'System Processes'), ([self.portal.getId(), 'acl_users'], 'System Processes'),
......
...@@ -1726,7 +1726,7 @@ return context.getPortalObject().foo_module.contentValues() ...@@ -1726,7 +1726,7 @@ return context.getPortalObject().foo_module.contentValues()
form_relative_url='portal_skins/erp5_ui_test/FooModule_viewFooList/listbox' form_relative_url='portal_skins/erp5_ui_test/FooModule_viewFooList/listbox'
) )
result_dict = json.loads(result) result_dict = json.loads(result)
#editalble creation date is defined at proxy form # editable creation date is defined at proxy form
# Test the listbox_uid parameter # Test the listbox_uid parameter
self.assertEqual(result_dict['_embedded']['contents'][0]['listbox_uid:list']['key'], 'listbox_uid:list') self.assertEqual(result_dict['_embedded']['contents'][0]['listbox_uid:list']['key'], 'listbox_uid:list')
self.assertEqual(result_dict['_embedded']['contents'][0]['id']['field_gadget_param']['type'], 'StringField') self.assertEqual(result_dict['_embedded']['contents'][0]['id']['field_gadget_param']['type'], 'StringField')
...@@ -3259,11 +3259,11 @@ class TestERP5ODS(ERP5HALJSONStyleSkinsMixin): ...@@ -3259,11 +3259,11 @@ class TestERP5ODS(ERP5HALJSONStyleSkinsMixin):
self.assertEqual(fake_request.RESPONSE.getHeader('Content-Type'), 'text/csv') self.assertEqual(fake_request.RESPONSE.getHeader('Content-Type'), 'text/csv')
else: else:
self.assertEqual(fake_request.RESPONSE.getHeader('Content-Type'), 'text/csv; charset=utf-8') self.assertEqual(fake_request.RESPONSE.getHeader('Content-Type'), 'text/csv; charset=utf-8')
self.assertTrue('foook1' in result, result) self.assertIn('foook1', result)
self.assertTrue('foook2' in result, result) self.assertIn('foook2', result)
self.assertTrue('foonotok' not in result, result) self.assertNotIn('foonotok', result)
# Check one of the field name # Check one of the field name
self.assertTrue('Read-Only Quantity' in result, result) self.assertIn('Read-Only Quantity', result)
# Ensure it is not the list mode rendering # Ensure it is not the list mode rendering
self.assertTrue(len(result.split('\n')) > 50, result) self.assertTrue(len(result.split('\n')) > 50, result)
......
...@@ -603,11 +603,11 @@ class TestKM(TestKMMixIn): ...@@ -603,11 +603,11 @@ class TestKM(TestKMMixIn):
# add some documents to this web section # add some documents to this web section
presentation = portal.document_module.newContent( presentation = portal.document_module.newContent(
title='My presentation', title='My presentation',
portal_type = 'Presentation', portal_type='Presentation',
reference = 'Presentation-12456_', reference='Presentation-12456_',
version='001', version='001',
language='en', language='en',
publication_section_list = publication_section_category_id_list[:1]) publication_section_list=publication_section_category_id_list[:1])
presentation.publish() presentation.publish()
self.tic() self.tic()
self.changeSkin('KM') self.changeSkin('KM')
...@@ -742,7 +742,7 @@ class TestKM(TestKMMixIn): ...@@ -742,7 +742,7 @@ class TestKM(TestKMMixIn):
portal = self.getPortal() portal = self.getPortal()
portal_gadgets = portal.portal_gadgets portal_gadgets = portal.portal_gadgets
url = '%s/ERP5Site_viewHomeAreaRenderer?gadget_mode=web_front' %self.web_site_url url = '%s/ERP5Site_viewHomeAreaRenderer?gadget_mode=web_front' % self.web_site_url
response = self.publish(url, self.auth) response = self.publish(url, self.auth)
self.assertIn(self.web_front_knowledge_pad.getTitle(), response.getBody()) self.assertIn(self.web_front_knowledge_pad.getTitle(), response.getBody())
......
...@@ -416,8 +416,8 @@ class testMailevaSOAPConnector(ERP5TypeTestCase): ...@@ -416,8 +416,8 @@ class testMailevaSOAPConnector(ERP5TypeTestCase):
def test_maileva_request_validation(self): def test_maileva_request_validation(self):
xml = self.maileva_connector.generateRequestXML(self.recipient, self.sender, self.document, 'test_track_id', 'maileva_connection_for_test') xml = self.maileva_connector.generateRequestXML(self.recipient, self.sender, self.document, 'test_track_id', 'maileva_connection_for_test')
# lxml doesn't support https in schemaLocation, download locally # lxml doesn't support https in schemaLocation, download locally
src = open(os.path.join(os.path.dirname(Products.ERP5.tests.__file__), 'test_data', "MailevaPJSSchema.xsd")) with open(os.path.join(os.path.dirname(Products.ERP5.tests.__file__), 'test_data', "MailevaPJSSchema.xsd")) as f:
xsd = etree.parse(src) xsd = etree.parse(f)
schema_validator = etree.XMLSchema(xsd) schema_validator = etree.XMLSchema(xsd)
schema_validator.assertValid(etree.fromstring(xml.encode("UTF-8"))) schema_validator.assertValid(etree.fromstring(xml.encode("UTF-8")))
......
...@@ -69,13 +69,16 @@ class PALOETLConnection(XMLObject): ...@@ -69,13 +69,16 @@ class PALOETLConnection(XMLObject):
security = ClassSecurityInfo() security = ClassSecurityInfo()
security.declareObjectProtected(Permissions.AccessContentsInformation) security.declareObjectProtected(Permissions.AccessContentsInformation)
_ignore_ssl_certificate_check = True
_fix_service_location = True
def _getSudsClient(self): def _getSudsClient(self):
# maybe client can be cached as a _v_ attribute. For now, we do not care about performance. # maybe client can be cached as a _v_ attribute. For now, we do not care about performance.
if "ignore ssl certificate check": if self._ignore_ssl_certificate_check:
client = suds.client.Client(self.getUrlString(), transport=HTTPAuthenticatedUnverifiedSSL()) client = suds.client.Client(self.getUrlString(), transport=HTTPAuthenticatedUnverifiedSSL())
else: else:
client = suds.client.Client(self.getUrlString()) client = suds.client.Client(self.getUrlString())
if "fix service location": if self._fix_service_location:
# XXX The axis2 generated webservice only supports http on port 8080. # XXX The axis2 generated webservice only supports http on port 8080.
# It seems to be using an old and buggy version of axis2. # It seems to be using an old and buggy version of axis2.
# Easiest workaround is to force the port (in WSDL terminology) location. # Easiest workaround is to force the port (in WSDL terminology) location.
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
import zope import zope
from urllib import urlencode from urllib import urlencode
from urllib2 import urlopen, Request from urllib2 import urlopen, Request
import contextlib
from zLOG import LOG, DEBUG from zLOG import LOG, DEBUG
from AccessControl import ClassSecurityInfo from AccessControl import ClassSecurityInfo
from Products.ERP5Type import Permissions, PropertySheet from Products.ERP5Type import Permissions, PropertySheet
...@@ -100,7 +101,7 @@ class PaypalService(XMLObject): ...@@ -100,7 +101,7 @@ class PaypalService(XMLObject):
paypal_url = self.getLinkUrlString() paypal_url = self.getLinkUrlString()
request = Request(paypal_url, param_list) request = Request(paypal_url, param_list)
request.add_header("Content-type", "application/x-www-form-urlencoded") request.add_header("Content-type", "application/x-www-form-urlencoded")
response = urlopen(request) with contextlib.closing(urlopen(request)) as response:
status = response.read() status = response.read()
LOG("PaypalService status", DEBUG, status) LOG("PaypalService status", DEBUG, status)
method_id = self._getTypeBasedMethod("reportPaymentStatus").id method_id = self._getTypeBasedMethod("reportPaymentStatus").id
......
...@@ -38,10 +38,10 @@ inventory_param_dict = { ...@@ -38,10 +38,10 @@ inventory_param_dict = {
} }
employee_param_dict = inventory_param_dict.copy() employee_param_dict = inventory_param_dict.copy()
employee_param_dict['contribution_share_uid'] = context.portal_categories.contribution_share.employee.getUid() employee_param_dict['contribution_share_uid'] = portal.portal_categories.contribution_share.employee.getUid()
employer_param_dict = inventory_param_dict.copy() employer_param_dict = inventory_param_dict.copy()
employer_param_dict['contribution_share_uid'] = context.portal_categories.contribution_share.employer.getUid() employer_param_dict['contribution_share_uid'] = portal.portal_categories.contribution_share.employer.getUid()
if request.get('mirror_section'): if request.get('mirror_section'):
mirror_section = request['mirror_section'] mirror_section = request['mirror_section']
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
############################################################################## ##############################################################################
from __future__ import print_function
import os, sys, shutil, tempfile import os, sys, shutil, tempfile
from cStringIO import StringIO from cStringIO import StringIO
from zLOG import LOG,ERROR,INFO,WARNING from zLOG import LOG,ERROR,INFO,WARNING
...@@ -28,7 +27,6 @@ try: ...@@ -28,7 +27,6 @@ try:
except ImportError: # BBB Zope2 except ImportError: # BBB Zope2
from Globals import package_home from Globals import package_home
import PIL.Image as PIL_Image import PIL.Image as PIL_Image
import thread
import random import random
import base64 import base64
from OFS.Folder import Folder from OFS.Folder import Folder
...@@ -176,15 +174,12 @@ class ZoomifyBase: ...@@ -176,15 +174,12 @@ class ZoomifyBase:
lr_y = ul_y + self.tileSize lr_y = ul_y + self.tileSize
else: else:
lr_y = self.originalHeight lr_y = self.originalHeight
print("Going to open image")
imageRow = image.crop([0, ul_y, self.originalWidth, lr_y]) imageRow = image.crop([0, ul_y, self.originalWidth, lr_y])
saveFilename = root + str(tier) + '-' + str(row) + ext saveFilename = root + str(tier) + '-' + str(row) + ext
if imageRow.mode != 'RGB': if imageRow.mode != 'RGB':
imageRow = imageRow.convert('RGB') imageRow = imageRow.convert('RGB')
imageRow.save(os.path.join(tempfile.gettempdir(), saveFilename), imageRow.save(os.path.join(tempfile.gettempdir(), saveFilename),
'JPEG', quality=100) 'JPEG', quality=100)
print("os path exist : %r" % os.path.exists(os.path.join(
tempfile.gettempdir(), saveFilename)))
if os.path.exists(os.path.join(tempfile.gettempdir(), saveFilename)): if os.path.exists(os.path.join(tempfile.gettempdir(), saveFilename)):
self.processRowImage(tier=tier, row=row) self.processRowImage(tier=tier, row=row)
row += 1 row += 1
...@@ -192,7 +187,6 @@ class ZoomifyBase: ...@@ -192,7 +187,6 @@ class ZoomifyBase:
def processRowImage(self, tier=0, row=0): def processRowImage(self, tier=0, row=0):
""" for an image, create and save tiles """ """ for an image, create and save tiles """
print('*** processing tier: ' + str(tier) + ' row: ' + str(row))
tierWidth, tierHeight = self._v_scaleInfo[tier] tierWidth, tierHeight = self._v_scaleInfo[tier]
rowsForTier = tierHeight/self.tileSize rowsForTier = tierHeight/self.tileSize
if tierHeight % self.tileSize > 0: if tierHeight % self.tileSize > 0:
...@@ -335,7 +329,7 @@ class ZoomifyZopeProcessor(ZoomifyBase): ...@@ -335,7 +329,7 @@ class ZoomifyZopeProcessor(ZoomifyBase):
def openImage(self): def openImage(self):
""" load the image data """ """ load the image data """
return PIL_Image.open(self._v_imageObject.name) return PIL_Image.open(self._v_imageObject)
def createDefaultViewer(self): def createDefaultViewer(self):
""" add the default Zoomify viewer to the Zoomify metadata """ """ add the default Zoomify viewer to the Zoomify metadata """
......
#from Products.ERP5.Document.TileImageTransformed import TileImageTransformed
#from cStringIO import StringIO
portal = context.getPortalObject() portal = context.getPortalObject()
data = portal.restrictedTraverse("portal_skins/erp5_safeimage/img/image_test.jpg") data = portal.restrictedTraverse("portal_skins/erp5_safeimage/img/image_test.jpg")
print(data.data) print(data.data)
return printed return printed
...@@ -415,6 +415,7 @@ class TestTradeModelLine(TestTradeModelLineMixin): ...@@ -415,6 +415,7 @@ class TestTradeModelLine(TestTradeModelLineMixin):
expected_result_dict = self[delivery.getPath()] expected_result_dict = self[delivery.getPath()]
for line in delivery.getMovementList(): for line in delivery.getMovementList():
currency_precision = line.getPricePrecision()
simulation_movement_list_list = self.getTradeModelSimulationMovementList(line) simulation_movement_list_list = self.getTradeModelSimulationMovementList(line)
self.assertEqual(len(simulation_movement_list_list), 1) self.assertEqual(len(simulation_movement_list_list), 1)
simulation_movement_list = simulation_movement_list_list[0] simulation_movement_list = simulation_movement_list_list[0]
...@@ -426,7 +427,8 @@ class TestTradeModelLine(TestTradeModelLineMixin): ...@@ -426,7 +427,8 @@ class TestTradeModelLine(TestTradeModelLineMixin):
total_price = expected_result_dict[use].get(line.getId()) or 0.0 total_price = expected_result_dict[use].get(line.getId()) or 0.0
if True: if True:
sm = result_dict.pop(use) sm = result_dict.pop(use)
self.assertEqual(str(sm.getTotalPrice() or 0.0), str(total_price)) self.assertEqual(round(sm.getTotalPrice() or 0.0, currency_precision),
round(total_price, currency_precision))
self.assertEqual(3, len(sm.getCausalityValueList())) self.assertEqual(3, len(sm.getCausalityValueList()))
self.assertEqual(1, len(sm.getCausalityValueList( self.assertEqual(1, len(sm.getCausalityValueList(
portal_type=self.business_link_portal_type))) portal_type=self.business_link_portal_type)))
...@@ -466,12 +468,12 @@ class TestTradeModelLine(TestTradeModelLineMixin): ...@@ -466,12 +468,12 @@ class TestTradeModelLine(TestTradeModelLineMixin):
rounded_total_price = round(line_dict['normal'], currency_precision) rounded_total_price = round(line_dict['normal'], currency_precision)
rounded_tax_price = round(line_dict['tax'], currency_precision) rounded_tax_price = round(line_dict['tax'], currency_precision)
rounded_discount_price = round(line_dict['discount'], currency_precision) rounded_discount_price = round(line_dict['discount'], currency_precision)
self.assertEqual(str(abs(line_dict['payable_receivable'])), self.assertEqual(round(abs(line_dict['payable_receivable']), currency_precision),
str(rounded_total_price + rounded_tax_price + rounded_discount_price)) round(rounded_total_price + rounded_tax_price + rounded_discount_price, currency_precision))
self.assertEqual(str(abs(line_dict['vat'])), self.assertEqual(round(abs(line_dict['vat']), currency_precision),
str(rounded_tax_price)) rounded_tax_price)
self.assertEqual(str(abs(line_dict['income_expense'])), self.assertEqual(round(abs(line_dict['income_expense']), currency_precision),
str(rounded_total_price + rounded_discount_price)) round(rounded_total_price + rounded_discount_price, currency_precision))
def buildPackingLists(self): def buildPackingLists(self):
self.portal.portal_alarms.packing_list_builder_alarm.activeSense() self.portal.portal_alarms.packing_list_builder_alarm.activeSense()
......
...@@ -70,7 +70,6 @@ with ImmediateReindexContextManager() as immediate_reindex_context_manager: ...@@ -70,7 +70,6 @@ with ImmediateReindexContextManager() as immediate_reindex_context_manager:
line_variation_base_category_list = line_variation_base_category_dict.keys() line_variation_base_category_list = line_variation_base_category_dict.keys()
# construct new content (container_line) # construct new content (container_line)
resource_url = resource_url
new_container_line_id = str(container.generateNewId()) new_container_line_id = str(container.generateNewId())
container_line = container.newContent( container_line = container.newContent(
immediate_reindex=immediate_reindex_context_manager, immediate_reindex=immediate_reindex_context_manager,
......
...@@ -2838,11 +2838,11 @@ class TestOrder(TestOrderMixin, ERP5TypeTestCase): ...@@ -2838,11 +2838,11 @@ class TestOrder(TestOrderMixin, ERP5TypeTestCase):
portal_type='Organisation', title='Client', portal_type='Organisation', title='Client',
default_image_file=image) default_image_file=image)
from OFS.Image import Pdata from OFS.Image import Pdata
self.assertTrue(isinstance(client.getDefaultImageValue().data, Pdata)) self.assertIsInstance(client.getDefaultImageValue().data, Pdata)
vendor = self.portal.organisation_module.newContent( vendor = self.portal.organisation_module.newContent(
portal_type='Organisation', title='Vendor', portal_type='Organisation', title='Vendor',
default_image_file=image) default_image_file=image)
self.assertTrue(isinstance(vendor.getDefaultImageValue().data, Pdata)) self.assertIsInstance(vendor.getDefaultImageValue().data, Pdata)
order = self.portal.getDefaultModule(self.order_portal_type).newContent( order = self.portal.getDefaultModule(self.order_portal_type).newContent(
portal_type=self.order_portal_type, portal_type=self.order_portal_type,
specialise=self.business_process, specialise=self.business_process,
......
...@@ -1799,7 +1799,7 @@ class TestPackingList(TestPackingListMixin, ERP5TypeTestCase) : ...@@ -1799,7 +1799,7 @@ class TestPackingList(TestPackingListMixin, ERP5TypeTestCase) :
sale_packing_list2.getUid()))] sale_packing_list2.getUid()))]
self.assertEqual({self.default_quantity-4, self.default_quantity-3}, self.assertEqual({self.default_quantity-4, self.default_quantity-3},
set([x.getQuantity() for x in sale_packing_list1.getMovementList()])) set([x.getQuantity() for x in sale_packing_list1.getMovementList()]))
self.assertEqual({1, 1}, set([x.getQuantity() for x in sale_packing_list3.getMovementList()])) self.assertEqual({1}, set([x.getQuantity() for x in sale_packing_list3.getMovementList()]))
self.assertEqual("solved", sale_packing_list3.getCausalityState()) self.assertEqual("solved", sale_packing_list3.getCausalityState())
self.assertEqual("solved", sale_packing_list1.getCausalityState()) self.assertEqual("solved", sale_packing_list1.getCausalityState())
def getSolverProcessStateList(delivery): def getSolverProcessStateList(delivery):
...@@ -1811,7 +1811,7 @@ class TestPackingList(TestPackingListMixin, ERP5TypeTestCase) : ...@@ -1811,7 +1811,7 @@ class TestPackingList(TestPackingListMixin, ERP5TypeTestCase) :
self.assertEqual({self.default_quantity-4, self.default_quantity-3}, self.assertEqual({self.default_quantity-4, self.default_quantity-3},
set([x.getQuantity() for x in sale_packing_list1.getMovementList()])) set([x.getQuantity() for x in sale_packing_list1.getMovementList()]))
self.assertEqual({1, 2}, set([x.getQuantity() for x in sale_packing_list2.getMovementList()])) self.assertEqual({1, 2}, set([x.getQuantity() for x in sale_packing_list2.getMovementList()]))
self.assertEqual({2, 2}, set([x.getQuantity() for x in sale_packing_list3.getMovementList()])) self.assertEqual({2}, set([x.getQuantity() for x in sale_packing_list3.getMovementList()]))
self.assertEqual("solved", sale_packing_list1.getCausalityState()) self.assertEqual("solved", sale_packing_list1.getCausalityState())
self.assertEqual("solved", sale_packing_list2.getCausalityState()) self.assertEqual("solved", sale_packing_list2.getCausalityState())
self.assertEqual("solved", sale_packing_list3.getCausalityState()) self.assertEqual("solved", sale_packing_list3.getCausalityState())
...@@ -1822,7 +1822,7 @@ class TestPackingList(TestPackingListMixin, ERP5TypeTestCase) : ...@@ -1822,7 +1822,7 @@ class TestPackingList(TestPackingListMixin, ERP5TypeTestCase) :
self.assertEqual({self.default_quantity-5, self.default_quantity-4}, self.assertEqual({self.default_quantity-5, self.default_quantity-4},
set([x.getQuantity() for x in sale_packing_list1.getMovementList()])) set([x.getQuantity() for x in sale_packing_list1.getMovementList()]))
self.assertEqual({2, 3}, set([x.getQuantity() for x in sale_packing_list2.getMovementList()])) self.assertEqual({2, 3}, set([x.getQuantity() for x in sale_packing_list2.getMovementList()]))
self.assertEqual({2, 2}, set([x.getQuantity() for x in sale_packing_list3.getMovementList()])) self.assertEqual({2}, set([x.getQuantity() for x in sale_packing_list3.getMovementList()]))
self.assertEqual("solved", sale_packing_list1.getCausalityState()) self.assertEqual("solved", sale_packing_list1.getCausalityState())
self.assertEqual("solved", sale_packing_list2.getCausalityState()) self.assertEqual("solved", sale_packing_list2.getCausalityState())
self.assertEqual("solved", sale_packing_list3.getCausalityState()) self.assertEqual("solved", sale_packing_list3.getCausalityState())
...@@ -1837,7 +1837,7 @@ class TestPackingList(TestPackingListMixin, ERP5TypeTestCase) : ...@@ -1837,7 +1837,7 @@ class TestPackingList(TestPackingListMixin, ERP5TypeTestCase) :
self.assertEqual({self.default_quantity-6, self.default_quantity-5}, self.assertEqual({self.default_quantity-6, self.default_quantity-5},
set([x.getQuantity() for x in sale_packing_list1.getMovementList()])) set([x.getQuantity() for x in sale_packing_list1.getMovementList()]))
self.assertEqual({2, 3}, set([x.getQuantity() for x in sale_packing_list2.getMovementList()])) self.assertEqual({2, 3}, set([x.getQuantity() for x in sale_packing_list2.getMovementList()]))
self.assertEqual({3, 3}, set([x.getQuantity() for x in sale_packing_list3.getMovementList()])) self.assertEqual({3}, set([x.getQuantity() for x in sale_packing_list3.getMovementList()]))
self.assertEqual("solved", sale_packing_list1.getCausalityState()) self.assertEqual("solved", sale_packing_list1.getCausalityState())
self.assertEqual("solved", sale_packing_list2.getCausalityState()) self.assertEqual("solved", sale_packing_list2.getCausalityState())
self.assertEqual("solved", sale_packing_list3.getCausalityState()) self.assertEqual("solved", sale_packing_list3.getCausalityState())
......
...@@ -1412,6 +1412,7 @@ class TestResource(ERP5TypeTestCase): ...@@ -1412,6 +1412,7 @@ class TestResource(ERP5TypeTestCase):
self.assertEqual(resource.getInternalSupplyLineDestinationReference(), self.assertEqual(resource.getInternalSupplyLineDestinationReference(),
'test_destination_reference_on_internal_supply_line') 'test_destination_reference_on_internal_supply_line')
@expectedFailure
def testQuantityUnitOnMovement(self): def testQuantityUnitOnMovement(self):
"""Make sure that changing default quantity unit on resource does not """Make sure that changing default quantity unit on resource does not
affect to movement. affect to movement.
...@@ -1464,7 +1465,8 @@ class TestResource(ERP5TypeTestCase): ...@@ -1464,7 +1465,8 @@ class TestResource(ERP5TypeTestCase):
# Check existing movement again and make sure that quantity # Check existing movement again and make sure that quantity
# unit is not changed. # unit is not changed.
expectedFailure(self.assertEqual)( # XXX This is the expectedFailure
self.assertEqual(
sale_order_line.getQuantityUnitValue(), sale_order_line.getQuantityUnitValue(),
self.quantity_unit_gram) self.quantity_unit_gram)
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
<tr> <tr>
<td>open</td> <td>open</td>
<td>${base_url}/bar_module/FooModule_createObjects?num:int=1;portal_type=Bar</td> <td>${base_url}/bar_module/FooModule_createObjects?num:int=1&amp;portal_type=Bar</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
<tr> <tr>
<td>open</td> <td>open</td>
<td>${base_url}/bar_module/FooModule_createObjects?num:int=1;portal_type=Bar</td> <td>${base_url}/bar_module/FooModule_createObjects?num:int=1&amp;portal_type=Bar</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
<tr> <tr>
<td>open</td> <td>open</td>
<td>${base_url}/bar_module/FooModule_createObjects?num:int=1;portal_type=Bar</td> <td>${base_url}/bar_module/FooModule_createObjects?num:int=1&amp;portal_type=Bar</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
<tr> <tr>
<td>open</td> <td>open</td>
<td>${base_url}/bar_module/FooModule_createObjects?num:int=1;portal_type=Bar</td> <td>${base_url}/bar_module/FooModule_createObjects?num:int=1&amp;portal_type=Bar</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
<tr> <tr>
<td>open</td> <td>open</td>
<td>${base_url}/bar_module/FooModule_createObjects?num:int=1;portal_type=Bar</td> <td>${base_url}/bar_module/FooModule_createObjects?num:int=1&amp;portal_type=Bar</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
<tr> <tr>
<td>open</td> <td>open</td>
<td>${base_url}/bar_module/FooModule_createObjects?num:int=1;portal_type=Bar</td> <td>${base_url}/bar_module/FooModule_createObjects?num:int=1&amp;portal_type=Bar</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
<tr> <tr>
<td>open</td> <td>open</td>
<td>${base_url}/bar_module/FooModule_createObjects?num:int=1;portal_type=Bar</td> <td>${base_url}/bar_module/FooModule_createObjects?num:int=1&amp;portal_type=Bar</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
......
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
</tr> </tr>
<tr> <tr>
<td>open</td> <td>open</td>
<td>${base_url}/bar_module/FooModule_createObjects?start:int=3;num:int=7;portal_type=Bar</td> <td>${base_url}/bar_module/FooModule_createObjects?start:int=3&amp;num:int=7&amp;portal_type=Bar</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
......
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
</tr> </tr>
<tr> <tr>
<td>open</td> <td>open</td>
<td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_domain_tree=checked;field_domain_root_list=foo_category/foo_big_category%7CFoo%20and%20Big%20Category</td> <td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_domain_tree=checked&amp;field_domain_root_list=foo_category/foo_big_category%7CFoo%20and%20Big%20Category</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
<!-- XXX bug compatibility; all columns must be set explicitly --> <!-- XXX bug compatibility; all columns must be set explicitly -->
<tr> <tr>
<td>open</td> <td>open</td>
<td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_all_columns=id%7CID%0Atitle%7CTitle%0Adelivery.quantity%7CQuantity;field_stat_method=portal_catalog</td> <td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_all_columns=id%7CID%0Atitle%7CTitle%0Adelivery.quantity%7CQuantity&amp;field_stat_method=portal_catalog</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
<!-- XXX bug compatibility; all_columns are used for sortable columns. --> <!-- XXX bug compatibility; all_columns are used for sortable columns. -->
<tr> <tr>
<td>open</td> <td>open</td>
<td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_sort_columns=id%0Atitle;field_all_columns=id%0Atitle</td> <td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_sort_columns=id%0Atitle&amp;field_all_columns=id%0Atitle</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
......
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
</tr> </tr>
<tr> <tr>
<td>open</td> <td>open</td>
<td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_domain_tree=checked;field_domain_root_list=foo_category%7CFoo%20Category</td> <td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_domain_tree=checked&amp;field_domain_root_list=foo_category%7CFoo%20Category</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
...@@ -153,7 +153,7 @@ ...@@ -153,7 +153,7 @@
<!-- Click on report tree --> <!-- Click on report tree -->
<tr> <tr>
<td>open</td> <td>open</td>
<td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_report_tree=checked;field_report_root_list=foo_category%7CFoo%20Category%0Afoo_empty_category%7CFoo%20Empty%20Category</td> <td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_report_tree=checked&amp;field_report_root_list=foo_category%7CFoo%20Category%0Afoo_empty_category%7CFoo%20Empty%20Category</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
......
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
</tr> </tr>
<tr> <tr>
<td>open</td> <td>open</td>
<td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_domain_tree=checked;field_domain_root_list=foo_category%7CFoo%20Category</td> <td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_domain_tree=checked&amp;field_domain_root_list=foo_category%7CFoo%20Category</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
......
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
</tr> </tr>
<tr> <tr>
<td>open</td> <td>open</td>
<td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_domain_tree=checked;field_domain_root_list=parent_domain%7CParent</td> <td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_domain_tree=checked&amp;field_domain_root_list=parent_domain%7CParent</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
......
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
</tr> </tr>
<tr> <tr>
<td>open</td> <td>open</td>
<td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_domain_tree=checked;field_domain_root_list=foo_domain%7CFoo%20Domain</td> <td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_domain_tree=checked&amp;field_domain_root_list=foo_domain%7CFoo%20Domain</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
......
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
</tr> </tr>
<tr> <tr>
<td>open</td> <td>open</td>
<td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_report_tree=checked;field_report_root_list=foo_domain%7CFoo%20Domain</td> <td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_report_tree=checked&amp;field_report_root_list=foo_domain%7CFoo%20Domain</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
<tal:block metal:use-macro="here/ListBoxZuite_CommonTemplate/macros/init" /> <tal:block metal:use-macro="here/ListBoxZuite_CommonTemplate/macros/init" />
<tr> <tr>
<td>open</td> <td>open</td>
<td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_meta_types=ERP5%20Delivery;field_portal_types=</td> <td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_meta_types=ERP5%20Delivery&amp;field_portal_types=</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
...@@ -157,7 +157,7 @@ ...@@ -157,7 +157,7 @@
<tr> <tr>
<td>open</td> <td>open</td>
<td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_meta_types=ERP5%20Toto;field_portal_types=</td> <td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_meta_types=ERP5%20Toto&amp;field_portal_types=</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
<tal:block metal:use-macro="here/ListBoxZuite_CommonTemplate/macros/init" /> <tal:block metal:use-macro="here/ListBoxZuite_CommonTemplate/macros/init" />
<tr> <tr>
<td>open</td> <td>open</td>
<td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_meta_types=;field_portal_types=Foo</td> <td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_meta_types=&amp;field_portal_types=Foo</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
...@@ -154,7 +154,7 @@ ...@@ -154,7 +154,7 @@
</tal:block> </tal:block>
<tr> <tr>
<td>open</td> <td>open</td>
<td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_meta_types=;field_portal_types=Toto</td> <td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_meta_types=&amp;field_portal_types=Toto</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
......
...@@ -322,7 +322,7 @@ ...@@ -322,7 +322,7 @@
Don't forget to update the code below if listbox_zuite/testDomainTree change. --> Don't forget to update the code below if listbox_zuite/testDomainTree change. -->
<tr> <tr>
<td>open</td> <td>open</td>
<td>${base_url}/foo_module/0/Foo_viewRelationField/listbox/ListBox_setPropertyList?field_domain_tree=checked;field_domain_root_list=foo_category%7CFoo%20Category</td> <td>${base_url}/foo_module/0/Foo_viewRelationField/listbox/ListBox_setPropertyList?field_domain_tree=checked&amp;field_domain_root_list=foo_category%7CFoo%20Category</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
</tr> </tr>
<tr> <tr>
<td>open</td> <td>open</td>
<td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_report_tree=checked;field_report_root_list=foo_category%7CFoo%20Category%0Afoo_empty_category%7CFoo%20Empty%20Category</td> <td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_report_tree=checked&amp;field_report_root_list=foo_category%7CFoo%20Category%0Afoo_empty_category%7CFoo%20Empty%20Category</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
</tr> </tr>
<tr> <tr>
<td>open</td> <td>open</td>
<td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_stat_method=portal_catalog;field_report_tree=checked;field_report_root_list=foo_domain%7CFoo%20Domain</td> <td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_stat_method=portal_catalog&amp;field_report_tree=checked&amp;field_report_root_list=foo_domain%7CFoo%20Domain</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
</tr> </tr>
<tr> <tr>
<td>open</td> <td>open</td>
<td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_stat_columns=id%7CFooModule_statId%0Atitle%7CFooModule_statTitle;field_stat_method=portal_catalog</td> <td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_stat_columns=id%7CFooModule_statId%0Atitle%7CFooModule_statTitle&amp;field_stat_method=portal_catalog</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
</tr> </tr>
<tr> <tr>
<td>open</td> <td>open</td>
<td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_domain_tree=checked;field_domain_root_list=foo_category%7CFoo%20Category</td> <td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_domain_tree=checked&amp;field_domain_root_list=foo_category%7CFoo%20Category</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
......
...@@ -187,7 +187,7 @@ ...@@ -187,7 +187,7 @@
</tr> </tr>
<tr> <tr>
<td>clickAndWait</td> <td>clickAndWait</td>
<td tal:content="python: '//div[@id=\'group_lane_%s\']//a' % (str((DateTime().day()/3)+1)) " ></td> <td tal:content="python: '//div[@id=\'group_lane_%s\']//a' % (str((DateTime().day() // 3) + 1)) " ></td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
...@@ -202,7 +202,7 @@ ...@@ -202,7 +202,7 @@
</tr> </tr>
<tr> <tr>
<td>clickAndWait</td> <td>clickAndWait</td>
<td tal:content="python: '//div[@id=\'group_lane_%s\']//a' % (str(DateTime().dow()+1)) " ></td> <td tal:content="python: '//div[@id=\'group_lane_%s\']//a' % (str(DateTime().dow() + 1)) " ></td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
......
...@@ -211,7 +211,7 @@ ...@@ -211,7 +211,7 @@
</tr> </tr>
<tr> <tr>
<td>clickAndWait</td> <td>clickAndWait</td>
<td tal:content="python: '//div[@id=\'group_lane_%s\']//a' % (str(DateTime().dow()+1)) " ></td> <td tal:content="python: '//div[@id=\'group_lane_%s\']//a' % (str(DateTime().dow() + 1))"></td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
<tal:block metal:use-macro="here/ListBoxZuite_CommonTemplate/macros/init" /> <tal:block metal:use-macro="here/ListBoxZuite_CommonTemplate/macros/init" />
<tr> <tr>
<td>open</td> <td>open</td>
<td>${base_url}/bar_module/FooModule_createObjects?num:int=1;portal_type=Bar</td> <td>${base_url}/bar_module/FooModule_createObjects?num:int=1&amp;portal_type=Bar</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
</tr> </tr>
<tr> <tr>
<td>open</td> <td>open</td>
<td>${base_url}/bar_module/FooModule_createObjects?num:int=3;portal_type=Bar</td> <td>${base_url}/bar_module/FooModule_createObjects?num:int=3&amp;portal_type=Bar</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
......
...@@ -9,7 +9,7 @@ wtool = getToolByName(context, 'portal_workflow') ...@@ -9,7 +9,7 @@ wtool = getToolByName(context, 'portal_workflow')
result = 'OK' result = 'OK'
error_list = [] error_list = []
def assertEquals(a, b, msg=''): def assertEqual(a, b, msg=''):
if a != b: if a != b:
if msg: if msg:
error_list.append(msg) error_list.append(msg)
...@@ -17,25 +17,25 @@ def assertEquals(a, b, msg=''): ...@@ -17,25 +17,25 @@ def assertEquals(a, b, msg=''):
error_list.append('%r != %r' % (a, b)) error_list.append('%r != %r' % (a, b))
foo_2 = foo_module['2'] foo_2 = foo_module['2']
assertEquals(foo_2.getSimulationState(), 'validated', assertEqual(foo_2.getSimulationState(), 'validated',
'Foo 2 state is %s' % foo_2.getSimulationState()) 'Foo 2 state is %s' % foo_2.getSimulationState())
if not error_list: if not error_list:
assertEquals( assertEqual(
wtool.getInfoFor(foo_2, 'history', wf_id='foo_workflow')[-2]['comment'], wtool.getInfoFor(foo_2, 'history', wf_id='foo_workflow')[-2]['comment'],
'Comment !') 'Comment !')
assertEquals( assertEqual(
wtool.getInfoFor(foo_2, 'history', wf_id='foo_workflow')[-2]['custom_workflow_variable'], wtool.getInfoFor(foo_2, 'history', wf_id='foo_workflow')[-2]['custom_workflow_variable'],
'Custom Workflow Variable') 'Custom Workflow Variable')
foo_3 = foo_module['3'] foo_3 = foo_module['3']
assertEquals(foo_3.getSimulationState(), 'validated', assertEqual(foo_3.getSimulationState(), 'validated',
'Foo 3 state is %s' % foo_3.getSimulationState()) 'Foo 3 state is %s' % foo_3.getSimulationState())
if not error_list: if not error_list:
assertEquals( assertEqual(
wtool.getInfoFor(foo_3, 'history', wf_id='foo_workflow')[-2]['comment'], wtool.getInfoFor(foo_3, 'history', wf_id='foo_workflow')[-2]['comment'],
'Comment !') 'Comment !')
assertEquals( assertEqual(
wtool.getInfoFor(foo_2, 'history', wf_id='foo_workflow')[-2]['custom_workflow_variable'], wtool.getInfoFor(foo_2, 'history', wf_id='foo_workflow')[-2]['custom_workflow_variable'],
'Custom Workflow Variable') 'Custom Workflow Variable')
......
...@@ -9,7 +9,7 @@ wtool = getToolByName(context, 'portal_workflow') ...@@ -9,7 +9,7 @@ wtool = getToolByName(context, 'portal_workflow')
result = 'OK' result = 'OK'
error_list = [] error_list = []
def assertEquals(a, b, msg=''): def assertEqual(a, b, msg=''):
if a != b: if a != b:
if msg: if msg:
error_list.append(msg) error_list.append(msg)
...@@ -17,18 +17,18 @@ def assertEquals(a, b, msg=''): ...@@ -17,18 +17,18 @@ def assertEquals(a, b, msg=''):
error_list.append('%r != %r' % (a, b)) error_list.append('%r != %r' % (a, b))
foo_2 = foo_module['2'] foo_2 = foo_module['2']
assertEquals(foo_2.getSimulationState(), 'validated', assertEqual(foo_2.getSimulationState(), 'validated',
'Foo 2 state is %s' % foo_2.getSimulationState()) 'Foo 2 state is %s' % foo_2.getSimulationState())
if not error_list: if not error_list:
assertEquals( assertEqual(
wtool.getInfoFor(foo_2, 'history', wf_id='foo_workflow')[-2]['comment'], wtool.getInfoFor(foo_2, 'history', wf_id='foo_workflow')[-2]['comment'],
'Comment !') 'Comment !')
foo_3 = foo_module['3'] foo_3 = foo_module['3']
assertEquals(foo_3.getSimulationState(), 'validated', assertEqual(foo_3.getSimulationState(), 'validated',
'Foo 3 state is %s' % foo_3.getSimulationState()) 'Foo 3 state is %s' % foo_3.getSimulationState())
if not error_list: if not error_list:
assertEquals( assertEqual(
wtool.getInfoFor(foo_3, 'history', wf_id='foo_workflow')[-2]['comment'], wtool.getInfoFor(foo_3, 'history', wf_id='foo_workflow')[-2]['comment'],
'Comment !') 'Comment !')
......
...@@ -10,7 +10,7 @@ wtool = getToolByName(context, 'portal_workflow') ...@@ -10,7 +10,7 @@ wtool = getToolByName(context, 'portal_workflow')
result = 'OK' result = 'OK'
error_list = [] error_list = []
def assertEquals(a, b, msg=''): def assertEqual(a, b, msg=''):
if a != b: if a != b:
if msg: if msg:
error_list.append(msg) error_list.append(msg)
...@@ -18,15 +18,15 @@ def assertEquals(a, b, msg=''): ...@@ -18,15 +18,15 @@ def assertEquals(a, b, msg=''):
error_list.append('%r != %r' % (a, b)) error_list.append('%r != %r' % (a, b))
foo_2 = foo_module['2'] foo_2 = foo_module['2']
assertEquals(foo_2.getSimulationState(), 'draft', assertEqual(foo_2.getSimulationState(), 'draft',
'Foo 2 state is %s' % foo_2.getSimulationState()) 'Foo 2 state is %s' % foo_2.getSimulationState())
foo_3 = foo_module['3'] foo_3 = foo_module['3']
assertEquals(foo_3.getSimulationState(), 'validated', assertEqual(foo_3.getSimulationState(), 'validated',
'Foo 3 state is %s' % foo_3.getSimulationState()) 'Foo 3 state is %s' % foo_3.getSimulationState())
if not error_list: if not error_list:
assertEquals( assertEqual(
wtool.getInfoFor(foo_3, 'history', wf_id='foo_workflow')[-2]['comment'], wtool.getInfoFor(foo_3, 'history', wf_id='foo_workflow')[-2]['comment'],
'Comment !') 'Comment !')
......
...@@ -259,6 +259,7 @@ class TestERP5Web(ERP5TypeTestCase): ...@@ -259,6 +259,7 @@ class TestERP5Web(ERP5TypeTestCase):
page.edit(text_content='<p>Hé Hé Hé!</p>', content_type='text/html') page.edit(text_content='<p>Hé Hé Hé!</p>', content_type='text/html')
self.tic() self.tic()
self.assertEqual('Hé Hé Hé!', page.asText().strip()) self.assertEqual('Hé Hé Hé!', page.asText().strip())
self.assertIn('Hé Hé Hé!', page.getSearchableText())
def test_WebPageAsTextHTMLEntities(self): def test_WebPageAsTextHTMLEntities(self):
"""Check if Web Page's asText() converts html entities properly """Check if Web Page's asText() converts html entities properly
......
...@@ -15,7 +15,7 @@ portal = context.getPortalObject() ...@@ -15,7 +15,7 @@ portal = context.getPortalObject()
default_language = web_section.getLayoutProperty("default_available_language", default='en') default_language = web_section.getLayoutProperty("default_available_language", default='en')
website_url_set = {} website_url_set = {}
#simplify code of Base_doLanguage, can't ues Base_doLanguage directly # simplify code of Base_doLanguage, can't use Base_doLanguage directly
root_website_url = web_section.getOriginalDocument().absolute_url() root_website_url = web_section.getOriginalDocument().absolute_url()
website_url_pattern = r'^%s(?:%s)*(/|$)' % ( website_url_pattern = r'^%s(?:%s)*(/|$)' % (
re.escape(root_website_url), re.escape(root_website_url),
......
...@@ -48,7 +48,7 @@ ...@@ -48,7 +48,7 @@
<tr> <tr>
<td>open</td> <td>open</td>
<td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_columns=modification_date%7CModification%20Date;field_editable=checked</td> <td>${base_url}/foo_module/FooModule_viewFooList/listbox/ListBox_setPropertyList?field_columns=modification_date%7CModification%20Date&amp;field_editable=checked</td>
<td></td> <td></td>
</tr> </tr>
......
...@@ -45,7 +45,6 @@ class ShaDirMixin(object): ...@@ -45,7 +45,6 @@ class ShaDirMixin(object):
Initialize the ERP5 site. Initialize the ERP5 site.
""" """
self.login() self.login()
self.portal = self.getPortal()
self.key = 'mykey' + str(random.random()) self.key = 'mykey' + str(random.random())
self.file_content = 'This is the content.' self.file_content = 'This is the content.'
......
...@@ -366,8 +366,7 @@ class TextDocument(CachedConvertableMixin, BaseConvertableFileMixin, TextContent ...@@ -366,8 +366,7 @@ class TextDocument(CachedConvertableMixin, BaseConvertableFileMixin, TextContent
security.declareProtected(Permissions.AccessContentsInformation, 'getTextContent') security.declareProtected(Permissions.AccessContentsInformation, 'getTextContent')
def getTextContent(self, default=_MARKER): def getTextContent(self, default=_MARKER):
"""Overriden method to check """Overridden method to check permission to access content in raw format
permission to access content in raw format
""" """
self._checkConversionFormatPermission(None) self._checkConversionFormatPermission(None)
if default is _MARKER: if default is _MARKER:
......
...@@ -111,9 +111,6 @@ class MailMessageMixin: ...@@ -111,9 +111,6 @@ class MailMessageMixin:
""" """
Returns the content information from the header information. Returns the content information from the header information.
This is used by the metadata discovery system. This is used by the metadata discovery system.
Header information is converted in UTF-8 since this is the standard
way of representing strings in ERP5.
""" """
result = {} result = {}
for (name, value) in self._getMessage().items(): for (name, value) in self._getMessage().items():
......
...@@ -46,8 +46,8 @@ class TextConvertableMixin: ...@@ -46,8 +46,8 @@ class TextConvertableMixin:
""" """
Converts the current document to plain text Converts the current document to plain text
""" """
kw.pop('format', None) kw['format'] = 'txt'
_, data = self.convert(format='txt', **kw) _, data = self.convert(**kw)
return str(data) return str(data)
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
...@@ -56,9 +56,8 @@ class TextConvertableMixin: ...@@ -56,9 +56,8 @@ class TextConvertableMixin:
""" """
Converts the current document to plain text without substitution Converts the current document to plain text without substitution
""" """
kw.pop('format', None) kw['substitute'] = False
_, data = self.convert(format='txt', substitute=False, **kw) return self.asText(**kw)
return str(data)
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
'asTextContent') 'asTextContent')
......
...@@ -186,4 +186,5 @@ class BusinessTemplateInfoDir(BusinessTemplateInfoBase): ...@@ -186,4 +186,5 @@ class BusinessTemplateInfoDir(BusinessTemplateInfoBase):
return fileinfo return fileinfo
def readFileInfo(self, fileinfo): def readFileInfo(self, fileinfo):
return open(fileinfo).read() with open(fileinfo) as f:
return f.read()
...@@ -32,7 +32,6 @@ ...@@ -32,7 +32,6 @@
from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
from AccessControl.SecurityManagement import newSecurityManager from AccessControl.SecurityManagement import newSecurityManager
from six import StringIO
class TestFormPrintoutMixin(ERP5TypeTestCase): class TestFormPrintoutMixin(ERP5TypeTestCase):
run_all_test = 1 run_all_test = 1
......
...@@ -792,10 +792,10 @@ class TestIngestion(IngestionTestCase): ...@@ -792,10 +792,10 @@ class TestIngestion(IngestionTestCase):
document.edit(file=f) document.edit(file=f)
mime, text = document.convert('text') mime, text = document.convert('text')
self.assertIn('magic', text) self.assertIn('magic', text)
self.assertTrue(mime == 'text/plain') self.assertEqual(mime, 'text/plain')
mime, html = document.convert('html') mime, html = document.convert('html')
self.assertIn('magic', html) self.assertIn('magic', html)
self.assertTrue(mime == 'text/html') self.assertEqual(mime, 'text/html')
def stepExportImage(self, sequence=None, sequence_list=None, **kw): def stepExportImage(self, sequence=None, sequence_list=None, **kw):
""" """
......
...@@ -37,7 +37,6 @@ from .BaseCache import BaseCache ...@@ -37,7 +37,6 @@ from .BaseCache import BaseCache
from .BaseCache import CacheEntry from .BaseCache import CacheEntry
from Products.ERP5Type import interfaces from Products.ERP5Type import interfaces
import zope.interface import zope.interface
from base64 import encodestring
try: try:
from Products.ERP5Type.Tool.MemcachedTool import MemcachedDict, SharedDict from Products.ERP5Type.Tool.MemcachedTool import MemcachedDict, SharedDict
......
...@@ -130,7 +130,7 @@ def patch_linecache(): ...@@ -130,7 +130,7 @@ def patch_linecache():
properly without requiring to create a temporary file on the filesystem properly without requiring to create a temporary file on the filesystem
The filename is is always '<portal_components/*>' for ZODB Components, The filename is is always '<portal_components/*>' for ZODB Components,
'(FILENAME)?Script \(Python\)' for Zope Python Scripts and 'Python '(FILENAME)?Script \\(Python\\)' for Zope Python Scripts and 'Python
Expression "CODE"' for TALES expressions. Expression "CODE"' for TALES expressions.
linecache.cache filled by linecache.updatecache() called by the original linecache.cache filled by linecache.updatecache() called by the original
......
...@@ -9,7 +9,6 @@ __version__ = '0.3.0' ...@@ -9,7 +9,6 @@ __version__ = '0.3.0'
import base64 import base64
import errno import errno
import httplib
import os import os
import random import random
import re import re
...@@ -18,7 +17,6 @@ import string ...@@ -18,7 +17,6 @@ import string
import sys import sys
import time import time
import traceback import traceback
import urllib
import ConfigParser import ConfigParser
from contextlib import contextmanager from contextlib import contextmanager
from io import BytesIO from io import BytesIO
...@@ -32,7 +30,6 @@ from DateTime import DateTime ...@@ -32,7 +30,6 @@ from DateTime import DateTime
import mock import mock
import Products.ZMySQLDA.DA import Products.ZMySQLDA.DA
from Products.ZMySQLDA.DA import Connection as ZMySQLDA_Connection from Products.ZMySQLDA.DA import Connection as ZMySQLDA_Connection
from zope.globalrequest import clearRequest
from zope.globalrequest import getRequest from zope.globalrequest import getRequest
from zope.globalrequest import setRequest from zope.globalrequest import setRequest
import six import six
...@@ -171,7 +168,8 @@ def _createTestPromiseConfigurationFile(promise_path, bt5_repository_path_list=N ...@@ -171,7 +168,8 @@ def _createTestPromiseConfigurationFile(promise_path, bt5_repository_path_list=N
promise_config.set('portal_certificate_authority', 'certificate_authority_path', promise_config.set('portal_certificate_authority', 'certificate_authority_path',
os.environ['TEST_CA_PATH']) os.environ['TEST_CA_PATH'])
promise_config.write(open(promise_path, 'w')) with open(promise_path, 'w') as f:
promise_config.write(f)
def profile_if_environ(environment_var_name): def profile_if_environ(environment_var_name):
if int(os.environ.get(environment_var_name, 0)): if int(os.environ.get(environment_var_name, 0)):
......
...@@ -3651,6 +3651,8 @@ class TestZodbDocumentComponentReload(ERP5TypeTestCase): ...@@ -3651,6 +3651,8 @@ class TestZodbDocumentComponentReload(ERP5TypeTestCase):
component = self.portal.portal_components['document.erp5.BusinessProcess'] component = self.portal.portal_components['document.erp5.BusinessProcess']
component.setTextContent(value) component.setTextContent(value)
self.tic() self.tic()
self.assertEqual(component.checkConsistency(), [])
self.assertEqual(component.getValidationState(), 'validated')
def testAsComposedDocumentCacheIsCorrectlyFlushed(self): def testAsComposedDocumentCacheIsCorrectlyFlushed(self):
component = self.portal.portal_components['document.erp5.BusinessProcess'] component = self.portal.portal_components['document.erp5.BusinessProcess']
......
...@@ -34,7 +34,8 @@ class commandtransform: ...@@ -34,7 +34,8 @@ class commandtransform:
os.mkdir(tmpdir) os.mkdir(tmpdir)
filename = kwargs.get("filename", '') filename = kwargs.get("filename", '')
fullname = join(tmpdir, basename(filename)) fullname = join(tmpdir, basename(filename))
filedest = open(fullname , "wb").write(data) with open(fullname , "wb") as f:
f.write(data)
return tmpdir, fullname return tmpdir, fullname
def subObjects(self, tmpdir): def subObjects(self, tmpdir):
...@@ -50,7 +51,8 @@ class commandtransform: ...@@ -50,7 +51,8 @@ class commandtransform:
def fixImages(self, path, images, objects): def fixImages(self, path, images, objects):
for image in images: for image in images:
objects[image] = open(join(path, image), 'rb').read() with open(join(path, image), 'rb') as f:
objects[image] = f.read()
def cleanDir(self, tmpdir): def cleanDir(self, tmpdir):
shutil.rmtree(tmpdir) shutil.rmtree(tmpdir)
...@@ -151,7 +153,7 @@ class subprocesstransform: ...@@ -151,7 +153,7 @@ class subprocesstransform:
try: try:
if not self.useStdin: if not self.useStdin:
stdin_file = tempfile.NamedTemporaryFile() stdin_file = tempfile.NamedTemporaryFile()
stdin_file.write( data) stdin_file.write(data)
stdin_file.seek(0) stdin_file.seek(0)
command = command % {'infile': stdin_file.name} # apply tmp name to command command = command % {'infile': stdin_file.name} # apply tmp name to command
data = None data = None
......
...@@ -21,7 +21,6 @@ from __future__ import print_function ...@@ -21,7 +21,6 @@ from __future__ import print_function
import BaseHTTPServer import BaseHTTPServer
import CGIHTTPServer import CGIHTTPServer
import time import time
import httplib
import sys import sys
PORT = 8000 PORT = 8000
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment