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
7
Merge Requests
7
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Jobs
Commits
Open sidebar
Jérome Perrin
erp5
Commits
ff1b9f1f
Commit
ff1b9f1f
authored
Sep 15, 2022
by
Kazuhiko Shiozaki
Committed by
Jérome Perrin
May 28, 2024
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fixup! py2/py3: Make Products code compatible with both python2 and python3.
parent
133364a5
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
40 additions
and
32 deletions
+40
-32
product/ERP5/Document/BusinessTemplate.py
product/ERP5/Document/BusinessTemplate.py
+9
-7
product/ERP5/Tool/TemplateTool.py
product/ERP5/Tool/TemplateTool.py
+1
-1
product/ERP5/bootstrap/erp5_core/MixinTemplateItem/portal_components/mixin.erp5.CachedConvertableMixin.py
...em/portal_components/mixin.erp5.CachedConvertableMixin.py
+1
-4
product/ERP5/bootstrap/erp5_core/MixinTemplateItem/portal_components/mixin.erp5.SimulableMixin.py
...mplateItem/portal_components/mixin.erp5.SimulableMixin.py
+2
-1
product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Base_translateString.py
...mplateItem/portal_skins/erp5_core/Base_translateString.py
+3
-1
product/ERP5Form/Tool/SelectionTool.py
product/ERP5Form/Tool/SelectionTool.py
+2
-1
product/ERP5Security/ERP5KeyAuthPlugin.py
product/ERP5Security/ERP5KeyAuthPlugin.py
+4
-3
product/ERP5Type/Message.py
product/ERP5Type/Message.py
+6
-6
product/ERP5Type/patches/DA.py
product/ERP5Type/patches/DA.py
+1
-1
product/ERP5Type/tests/ERP5TypeTestCase.py
product/ERP5Type/tests/ERP5TypeTestCase.py
+1
-0
product/ZSQLCatalog/Query/AutoQuery.py
product/ZSQLCatalog/Query/AutoQuery.py
+5
-5
product/ZSQLCatalog/SQLCatalog.py
product/ZSQLCatalog/SQLCatalog.py
+1
-1
product/ZSQLCatalog/SearchText/lexer.py
product/ZSQLCatalog/SearchText/lexer.py
+4
-1
No files found.
product/ERP5/Document/BusinessTemplate.py
View file @
ff1b9f1f
...
@@ -29,7 +29,7 @@
...
@@ -29,7 +29,7 @@
import
six
import
six
from
six
import
string_types
as
basestring
from
six
import
string_types
as
basestring
from
Products.ERP5Type.Utils
import
ensure_list
,
bytes2str
from
Products.ERP5Type.Utils
import
ensure_list
,
bytes2str
,
str2bytes
import
fnmatch
,
gc
,
glob
,
imp
,
os
,
re
,
shutil
,
sys
,
time
,
tarfile
import
fnmatch
,
gc
,
glob
,
imp
,
os
,
re
,
shutil
,
sys
,
time
,
tarfile
from
collections
import
defaultdict
from
collections
import
defaultdict
from
Shared.DC.ZRDB
import
Aqueduct
from
Shared.DC.ZRDB
import
Aqueduct
...
@@ -350,6 +350,8 @@ class BusinessTemplateArchive(object):
...
@@ -350,6 +350,8 @@ class BusinessTemplateArchive(object):
self
.
_writeString
(
obj
,
path
)
self
.
_writeString
(
obj
,
path
)
else
:
else
:
if
isinstance
(
obj
,
str
):
if
isinstance
(
obj
,
str
):
obj
=
str2bytes
(
obj
)
if
isinstance
(
obj
,
bytes
):
self
.
revision
.
hash
(
path
,
obj
)
self
.
revision
.
hash
(
path
,
obj
)
obj
=
BytesIO
(
obj
)
obj
=
BytesIO
(
obj
)
else
:
else
:
...
@@ -825,7 +827,7 @@ class ObjectTemplateItem(BaseTemplateItem):
...
@@ -825,7 +827,7 @@ class ObjectTemplateItem(BaseTemplateItem):
obj
=
obj
.
_getCopy
(
context
)
obj
=
obj
.
_getCopy
(
context
)
data
=
getattr
(
aq_base
(
obj
),
record_id
,
None
)
data
=
getattr
(
aq_base
(
obj
),
record_id
,
None
)
if
unicode_data
:
if
unicode_data
:
if
not
isinstance
(
data
,
six
.
text_type
):
if
not
(
six
.
PY2
and
isinstance
(
data
,
six
.
text_type
)
):
break
break
try
:
try
:
data
=
data
.
encode
(
aq_base
(
obj
).
output_encoding
)
data
=
data
.
encode
(
aq_base
(
obj
).
output_encoding
)
...
@@ -3523,7 +3525,7 @@ class PortalTypeRolesTemplateItem(BaseTemplateItem):
...
@@ -3523,7 +3525,7 @@ class PortalTypeRolesTemplateItem(BaseTemplateItem):
path
=
self
.
__class__
.
__name__
path
=
self
.
__class__
.
__name__
for
key
in
self
.
_objects
:
for
key
in
self
.
_objects
:
xml_data
=
self
.
generateXml
(
key
)
xml_data
=
self
.
generateXml
(
key
)
if
isinstance
(
xml_data
,
six
.
text_type
):
if
six
.
PY2
and
isinstance
(
xml_data
,
six
.
text_type
):
xml_data
=
xml_data
.
encode
(
'utf-8'
)
xml_data
=
xml_data
.
encode
(
'utf-8'
)
name
=
key
.
split
(
'/'
,
1
)[
1
]
name
=
key
.
split
(
'/'
,
1
)[
1
]
bta
.
addObject
(
xml_data
,
name
=
name
,
path
=
path
)
bta
.
addObject
(
xml_data
,
name
=
name
,
path
=
path
)
...
@@ -3537,7 +3539,7 @@ class PortalTypeRolesTemplateItem(BaseTemplateItem):
...
@@ -3537,7 +3539,7 @@ class PortalTypeRolesTemplateItem(BaseTemplateItem):
xml_type_roles_list
=
xml
.
findall
(
'role'
)
xml_type_roles_list
=
xml
.
findall
(
'role'
)
for
role
in
xml_type_roles_list
:
for
role
in
xml_type_roles_list
:
id
=
role
.
get
(
'id'
)
id
=
role
.
get
(
'id'
)
if
isinstance
(
id
,
six
.
text_type
):
if
six
.
PY2
and
isinstance
(
id
,
six
.
text_type
):
id
=
id
.
encode
(
'utf_8'
,
'backslashreplace'
)
id
=
id
.
encode
(
'utf_8'
,
'backslashreplace'
)
type_role_property_dict
=
{
'id'
:
id
}
type_role_property_dict
=
{
'id'
:
id
}
# uniq
# uniq
...
@@ -3546,7 +3548,7 @@ class PortalTypeRolesTemplateItem(BaseTemplateItem):
...
@@ -3546,7 +3548,7 @@ class PortalTypeRolesTemplateItem(BaseTemplateItem):
property_id
=
property_node
.
get
(
'id'
)
property_id
=
property_node
.
get
(
'id'
)
if
property_node
.
text
:
if
property_node
.
text
:
value
=
property_node
.
text
value
=
property_node
.
text
if
isinstance
(
value
,
six
.
text_type
):
if
six
.
PY2
and
isinstance
(
value
,
six
.
text_type
):
value
=
value
.
encode
(
'utf_8'
,
'backslashreplace'
)
value
=
value
.
encode
(
'utf_8'
,
'backslashreplace'
)
type_role_property_dict
[
property_id
]
=
value
type_role_property_dict
[
property_id
]
=
value
# multi
# multi
...
@@ -3555,7 +3557,7 @@ class PortalTypeRolesTemplateItem(BaseTemplateItem):
...
@@ -3555,7 +3557,7 @@ class PortalTypeRolesTemplateItem(BaseTemplateItem):
property_id
=
property_node
.
get
(
'id'
)
property_id
=
property_node
.
get
(
'id'
)
if
property_node
.
text
:
if
property_node
.
text
:
value
=
property_node
.
text
value
=
property_node
.
text
if
isinstance
(
value
,
six
.
text_type
):
if
six
.
PY2
and
isinstance
(
value
,
six
.
text_type
):
value
=
value
.
encode
(
'utf_8'
,
'backslashreplace'
)
value
=
value
.
encode
(
'utf_8'
,
'backslashreplace'
)
type_role_property_dict
.
setdefault
(
property_id
,
[]).
append
(
value
)
type_role_property_dict
.
setdefault
(
property_id
,
[]).
append
(
value
)
type_roles_list
.
append
(
type_role_property_dict
)
type_roles_list
.
append
(
type_role_property_dict
)
...
@@ -4964,7 +4966,7 @@ class LocalRolesTemplateItem(BaseTemplateItem):
...
@@ -4964,7 +4966,7 @@ class LocalRolesTemplateItem(BaseTemplateItem):
xml_data
+=
'
\
n
</local_role_group_ids>'
xml_data
+=
'
\
n
</local_role_group_ids>'
xml_data
+=
'
\
n
</local_roles_item>'
xml_data
+=
'
\
n
</local_roles_item>'
if
isinstance
(
xml_data
,
six
.
text_type
):
if
six
.
PY2
and
isinstance
(
xml_data
,
six
.
text_type
):
xml_data
=
xml_data
.
encode
(
'utf8'
)
xml_data
=
xml_data
.
encode
(
'utf8'
)
return
xml_data
return
xml_data
...
...
product/ERP5/Tool/TemplateTool.py
View file @
ff1b9f1f
...
@@ -1066,7 +1066,7 @@ class TemplateTool (BaseTool):
...
@@ -1066,7 +1066,7 @@ class TemplateTool (BaseTool):
installed_revision=installed_revision,
installed_revision=installed_revision,
repository=repository,
repository=repository,
**property_dict)
**property_dict)
obj.setUid(
uid
)
obj.setUid(
bytes2str(uid)
)
result_list.append(obj)
result_list.append(obj)
result_list.sort(key=lambda x: x.getTitle())
result_list.sort(key=lambda x: x.getTitle())
return result_list
return result_list
...
...
product/ERP5/bootstrap/erp5_core/MixinTemplateItem/portal_components/mixin.erp5.CachedConvertableMixin.py
View file @
ff1b9f1f
...
@@ -53,10 +53,7 @@ def hashPdataObject(pdata_object):
...
@@ -53,10 +53,7 @@ def hashPdataObject(pdata_object):
while
pdata_object
is
not
None
:
while
pdata_object
is
not
None
:
chunk
=
pdata_object
.
aq_base
chunk
=
pdata_object
.
aq_base
md5_hash
.
update
(
chunk
.
data
)
md5_hash
.
update
(
chunk
.
data
)
if
six
.
PY2
:
pdata_object
=
chunk
.
next
pdata_object
=
chunk
.
next
else
:
pdata_object
=
chunk
.
__next__
chunk
.
_p_deactivate
()
chunk
.
_p_deactivate
()
return
md5_hash
.
hexdigest
()
return
md5_hash
.
hexdigest
()
...
...
product/ERP5/bootstrap/erp5_core/MixinTemplateItem/portal_components/mixin.erp5.SimulableMixin.py
View file @
ff1b9f1f
...
@@ -34,6 +34,7 @@ from Products.ERP5Type.Globals import InitializeClass
...
@@ -34,6 +34,7 @@ from Products.ERP5Type.Globals import InitializeClass
from
Products.ERP5Type.Base
import
Base
from
Products.ERP5Type.Base
import
Base
from
Products.ERP5Type.TransactionalVariable
import
getTransactionalVariable
from
Products.ERP5Type.TransactionalVariable
import
getTransactionalVariable
from
Products.ERP5Type.Errors
import
SimulationError
from
Products.ERP5Type.Errors
import
SimulationError
from
Products.ERP5Type.Utils
import
ensure_list
SIMULATION_PRIORITY
=
3
SIMULATION_PRIORITY
=
3
...
@@ -77,7 +78,7 @@ class SimulableMixin(Base):
...
@@ -77,7 +78,7 @@ class SimulableMixin(Base):
ignore
.
update
(
kw
)
ignore
.
update
(
kw
)
tv
[
ignore_key
]
=
ignore
tv
[
ignore_key
]
=
ignore
transaction
.
get
().
addBeforeCommitHook
(
before_commit
)
transaction
.
get
().
addBeforeCommitHook
(
before_commit
)
for
k
,
v
in
item_list
:
for
k
,
v
in
ensure_list
(
item_list
)
:
if
not
v
:
if
not
v
:
ignore
.
add
(
k
)
ignore
.
add
(
k
)
elif
k
not
in
ignore
:
elif
k
not
in
ignore
:
...
...
product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Base_translateString.py
View file @
ff1b9f1f
...
@@ -12,8 +12,10 @@ if translation_service is not None :
...
@@ -12,8 +12,10 @@ if translation_service is not None :
if
not
encoding
:
if
not
encoding
:
return
translation_service
.
translate
(
catalog
,
msg
,
lang
=
lang
,
**
kw
)
return
translation_service
.
translate
(
catalog
,
msg
,
lang
=
lang
,
**
kw
)
msg
=
translation_service
.
translate
(
catalog
,
msg
,
lang
=
lang
,
**
kw
)
msg
=
translation_service
.
translate
(
catalog
,
msg
,
lang
=
lang
,
**
kw
)
if
isinstance
(
msg
,
six
.
text_type
):
if
six
.
PY2
and
isinstance
(
msg
,
six
.
text_type
):
msg
=
msg
.
encode
(
encoding
)
msg
=
msg
.
encode
(
encoding
)
elif
six
.
PY3
and
isinstance
(
msg
,
six
.
binary_type
):
msg
=
msg
.
decode
(
encoding
)
return
msg
return
msg
except
AttributeError
:
# This happens in unit testing, because it is not able to find something with get_context()
except
AttributeError
:
# This happens in unit testing, because it is not able to find something with get_context()
pass
pass
...
...
product/ERP5Form/Tool/SelectionTool.py
View file @
ff1b9f1f
...
@@ -32,6 +32,7 @@
...
@@ -32,6 +32,7 @@
"""
"""
from
OFS.SimpleItem
import
SimpleItem
from
OFS.SimpleItem
import
SimpleItem
from
Products.ERP5Type.Utils
import
ensure_list
from
Products.ERP5Type.Globals
import
InitializeClass
,
DTMLFile
,
PersistentMapping
,
get_request
from
Products.ERP5Type.Globals
import
InitializeClass
,
DTMLFile
,
PersistentMapping
,
get_request
from
AccessControl
import
ClassSecurityInfo
from
AccessControl
import
ClassSecurityInfo
from
ZTUtils
import
make_query
from
ZTUtils
import
make_query
...
@@ -434,7 +435,7 @@ class SelectionTool( BaseTool, SimpleItem ):
...
@@ -434,7 +435,7 @@ class SelectionTool( BaseTool, SimpleItem ):
selection_uid_dict
[
int
(
uid
)]
=
1
selection_uid_dict
[
int
(
uid
)]
=
1
except
(
ValueError
,
TypeError
):
except
(
ValueError
,
TypeError
):
selection_uid_dict
[
uid
]
=
1
selection_uid_dict
[
uid
]
=
1
self
.
setSelectionCheckedUidsFor
(
list_selection_name
,
selection_uid_dict
.
keys
(
),
REQUEST
=
REQUEST
)
self
.
setSelectionCheckedUidsFor
(
list_selection_name
,
ensure_list
(
selection_uid_dict
.
keys
()
),
REQUEST
=
REQUEST
)
if
REQUEST
is
not
None
:
if
REQUEST
is
not
None
:
return
self
.
_redirectToOriginalForm
(
REQUEST
=
REQUEST
,
form_id
=
form_id
,
return
self
.
_redirectToOriginalForm
(
REQUEST
=
REQUEST
,
form_id
=
form_id
,
query_string
=
query_string
,
no_reset
=
True
)
query_string
=
query_string
,
no_reset
=
True
)
...
...
product/ERP5Security/ERP5KeyAuthPlugin.py
View file @
ff1b9f1f
...
@@ -46,6 +46,7 @@ from Products.PluggableAuthService.plugins.CookieAuthHelper import CookieAuthHel
...
@@ -46,6 +46,7 @@ from Products.PluggableAuthService.plugins.CookieAuthHelper import CookieAuthHel
from
Products.ERP5Type.Cache
import
CachingMethod
from
Products.ERP5Type.Cache
import
CachingMethod
from
Products.ERP5Type.UnrestrictedMethod
import
UnrestrictedMethod
from
Products.ERP5Type.UnrestrictedMethod
import
UnrestrictedMethod
from
Products.ERP5Type.Utils
import
bytes2str
from
Products.ERP5Security.ERP5UserManager
import
ERP5UserManager
,
\
from
Products.ERP5Security.ERP5UserManager
import
ERP5UserManager
,
\
_AuthenticationFailure
_AuthenticationFailure
from
Products
import
ERP5Security
from
Products
import
ERP5Security
...
@@ -64,7 +65,7 @@ class AESCipher:
...
@@ -64,7 +65,7 @@ class AESCipher:
def
encrypt
(
self
,
login
):
def
encrypt
(
self
,
login
):
iv
=
Random
.
new
().
read
(
AES
.
block_size
)
iv
=
Random
.
new
().
read
(
AES
.
block_size
)
encryptor
=
AES
.
new
(
self
.
encryption_key
,
self
.
mode
,
IV
=
iv
)
encryptor
=
AES
.
new
(
self
.
encryption_key
,
self
.
mode
,
IV
=
iv
)
return
urlsafe_b64encode
(
iv
+
encryptor
.
encrypt
(
login
.
ljust
(((
len
(
login
)
-
1
)
/
16
+
1
)
*
16
)))
return
urlsafe_b64encode
(
iv
+
encryptor
.
encrypt
(
login
.
ljust
(((
len
(
login
)
-
1
)
/
/
16
+
1
)
*
16
)))
def
decrypt
(
self
,
crypted_login
):
def
decrypt
(
self
,
crypted_login
):
decoded_crypted_login
=
urlsafe_b64decode
(
crypted_login
)
decoded_crypted_login
=
urlsafe_b64decode
(
crypted_login
)
...
@@ -217,13 +218,13 @@ class ERP5KeyAuthPlugin(ERP5UserManager, CookieAuthHelper):
...
@@ -217,13 +218,13 @@ class ERP5KeyAuthPlugin(ERP5UserManager, CookieAuthHelper):
def
encrypt
(
self
,
login
):
def
encrypt
(
self
,
login
):
"""Encrypt the login"""
"""Encrypt the login"""
cipher
=
globals
()[
'%sCipher'
%
self
.
_getCipher
()](
self
.
encryption_key
)
cipher
=
globals
()[
'%sCipher'
%
self
.
_getCipher
()](
self
.
encryption_key
)
return
cipher
.
encrypt
(
login
)
return
bytes2str
(
cipher
.
encrypt
(
login
)
)
security
.
declarePrivate
(
'decrypt'
)
security
.
declarePrivate
(
'decrypt'
)
def
decrypt
(
self
,
crypted_login
):
def
decrypt
(
self
,
crypted_login
):
"""Decrypt string and return the login"""
"""Decrypt string and return the login"""
cipher
=
globals
()[
'%sCipher'
%
self
.
_getCipher
()](
self
.
encryption_key
)
cipher
=
globals
()[
'%sCipher'
%
self
.
_getCipher
()](
self
.
encryption_key
)
return
cipher
.
decrypt
(
crypted_login
)
return
bytes2str
(
cipher
.
decrypt
(
crypted_login
)
)
####################################
####################################
#ILoginPasswordHostExtractionPlugin#
#ILoginPasswordHostExtractionPlugin#
...
...
product/ERP5Type/Message.py
View file @
ff1b9f1f
...
@@ -114,7 +114,7 @@ class Message(Persistent):
...
@@ -114,7 +114,7 @@ class Message(Persistent):
if
self
.
domain
is
None
:
if
self
.
domain
is
None
:
# Map the translated string with given parameters
# Map the translated string with given parameters
if
type
(
self
.
mapping
)
is
dict
:
if
type
(
self
.
mapping
)
is
dict
:
if
isinstance
(
message
,
six
.
text_type
)
:
if
six
.
PY2
and
isinstance
(
message
,
six
.
text_type
)
:
message
=
message
.
encode
(
'utf-8'
)
message
=
message
.
encode
(
'utf-8'
)
message
=
Template
(
message
).
substitute
(
self
.
mapping
)
message
=
Template
(
message
).
substitute
(
self
.
mapping
)
else
:
else
:
...
@@ -124,7 +124,7 @@ class Message(Persistent):
...
@@ -124,7 +124,7 @@ class Message(Persistent):
if
self
.
mapping
:
if
self
.
mapping
:
unicode_mapping
=
{}
unicode_mapping
=
{}
for
k
,
v
in
six
.
iteritems
(
self
.
mapping
):
for
k
,
v
in
six
.
iteritems
(
self
.
mapping
):
if
isinstance
(
v
,
str
):
if
six
.
PY2
and
isinstance
(
v
,
str
):
v
=
v
.
decode
(
'utf-8'
)
v
=
v
.
decode
(
'utf-8'
)
unicode_mapping
[
k
]
=
v
unicode_mapping
[
k
]
=
v
else
:
else
:
...
@@ -139,9 +139,9 @@ class Message(Persistent):
...
@@ -139,9 +139,9 @@ class Message(Persistent):
message
=
translated_message
message
=
translated_message
if
isinstance
(
self
.
message
,
str
):
if
isinstance
(
self
.
message
,
str
):
if
isinstance
(
message
,
six
.
text_type
):
if
six
.
PY2
and
isinstance
(
message
,
six
.
text_type
):
message
=
message
.
encode
(
'utf-8'
)
message
=
message
.
encode
(
'utf-8'
)
elif
isinstance
(
message
,
str
):
elif
six
.
PY2
and
isinstance
(
message
,
str
):
message
=
message
.
decode
(
'utf-8'
)
message
=
message
.
decode
(
'utf-8'
)
return
message
return
message
...
@@ -154,7 +154,7 @@ class Message(Persistent):
...
@@ -154,7 +154,7 @@ class Message(Persistent):
Return the translated message as a string object.
Return the translated message as a string object.
"""
"""
message
=
self
.
translate
()
message
=
self
.
translate
()
if
isinstance
(
message
,
six
.
text_type
):
if
six
.
PY2
and
isinstance
(
message
,
six
.
text_type
):
message
=
message
.
encode
(
'utf-8'
)
message
=
message
.
encode
(
'utf-8'
)
return
message
return
message
...
@@ -163,7 +163,7 @@ class Message(Persistent):
...
@@ -163,7 +163,7 @@ class Message(Persistent):
Return the translated message as a unicode object.
Return the translated message as a unicode object.
"""
"""
message
=
self
.
translate
()
message
=
self
.
translate
()
if
isinstance
(
message
,
str
):
if
six
.
PY2
and
isinstance
(
message
,
str
):
message
=
message
.
decode
(
'utf-8'
)
message
=
message
.
decode
(
'utf-8'
)
return
message
return
message
...
...
product/ERP5Type/patches/DA.py
View file @
ff1b9f1f
...
@@ -219,7 +219,7 @@ def DA__call__(self, REQUEST=None, __ick__=None, src__=0, test__=0, **kw):
...
@@ -219,7 +219,7 @@ def DA__call__(self, REQUEST=None, __ick__=None, src__=0, test__=0, **kw):
if
src__
:
return
query
if
src__
:
return
query
if
self
.
cache_time_
>
0
and
self
.
max_cache_
>
0
:
if
self
.
cache_time_
>
0
and
self
.
max_cache_
>
0
:
result
=
self
.
_cached_result
(
DB__
,
query
,
self
.
max_rows_
,
c
)
result
=
self
.
_cached_result
(
DB__
,
str2bytes
(
query
)
,
self
.
max_rows_
,
c
)
else
:
else
:
try
:
try
:
result
=
DB__
.
query
(
query
,
self
.
max_rows_
)
result
=
DB__
.
query
(
query
,
self
.
max_rows_
)
...
...
product/ERP5Type/tests/ERP5TypeTestCase.py
View file @
ff1b9f1f
...
@@ -18,6 +18,7 @@ import string
...
@@ -18,6 +18,7 @@ import string
import
sys
import
sys
import
time
import
time
import
traceback
import
traceback
import
urllib
from
six.moves
import
configparser
from
six.moves
import
configparser
from
contextlib
import
contextmanager
from
contextlib
import
contextmanager
from
io
import
BytesIO
from
io
import
BytesIO
...
...
product/ZSQLCatalog/Query/AutoQuery.py
View file @
ff1b9f1f
...
@@ -76,17 +76,17 @@ class AutoQuery(Query):
...
@@ -76,17 +76,17 @@ class AutoQuery(Query):
# Recreate value as a dict and pass it to buildSingleQuery.
# Recreate value as a dict and pass it to buildSingleQuery.
range
=
kw
.
pop
(
'range'
)
range
=
kw
.
pop
(
'range'
)
assert
len
(
kw
)
==
1
,
repr
(
kw
)
assert
len
(
kw
)
==
1
,
repr
(
kw
)
key
,
value
=
kw
.
items
(
)[
0
]
key
,
value
=
list
(
kw
.
items
()
)[
0
]
query
=
sql_catalog
.
buildSingleQuery
(
key
,
{
'query'
:
value
,
query
=
sql_catalog
.
buildSingleQuery
(
key
,
{
'query'
:
value
,
'range'
:
range
})
'range'
:
range
})
elif
operator
==
'in'
:
elif
operator
==
'in'
:
# 'in' is a *comparison* operator, not a logical operator.
# 'in' is a *comparison* operator, not a logical operator.
# Transform kw into the proper form.
# Transform kw into the proper form.
assert
len
(
kw
)
==
1
,
repr
(
kw
)
assert
len
(
kw
)
==
1
,
repr
(
kw
)
key
,
value
=
kw
.
items
(
)[
0
]
key
,
value
=
list
(
kw
.
items
()
)[
0
]
query
=
sql_catalog
.
buildSingleQuery
(
key
,
{
'query'
:
value
,
query
=
sql_catalog
.
buildSingleQuery
(
key
,
{
'query'
:
value
,
'operator'
:
operator
})
'operator'
:
operator
})
elif
len
(
kw
)
==
1
and
isinstance
(
kw
.
values
(
)[
0
],
(
tuple
,
list
))
and
\
elif
len
(
kw
)
==
1
and
isinstance
(
list
(
kw
.
values
()
)[
0
],
(
tuple
,
list
))
and
\
operator
in
(
'and'
,
'or'
):
operator
in
(
'and'
,
'or'
):
# If there is only one parameter, and operator was given and is a
# If there is only one parameter, and operator was given and is a
# known logical operator, then operator will apply to it.
# known logical operator, then operator will apply to it.
...
@@ -94,7 +94,7 @@ class AutoQuery(Query):
...
@@ -94,7 +94,7 @@ class AutoQuery(Query):
# kw = {'portal_type': ['!=a', '!=b'], 'operator': 'AND'}
# kw = {'portal_type': ['!=a', '!=b'], 'operator': 'AND'}
# In such case, expected result is
# In such case, expected result is
# "portal_type!='a' AND portal_type!='b'"
# "portal_type!='a' AND portal_type!='b'"
key
,
value
=
kw
.
items
(
)[
0
]
key
,
value
=
list
(
kw
.
items
()
)[
0
]
query
=
sql_catalog
.
buildSingleQuery
(
key
,
value
,
logical_operator
=
operator
)
query
=
sql_catalog
.
buildSingleQuery
(
key
,
value
,
logical_operator
=
operator
)
else
:
else
:
# Otherwise, the operator will apply to the relationship between
# Otherwise, the operator will apply to the relationship between
...
@@ -102,7 +102,7 @@ class AutoQuery(Query):
...
@@ -102,7 +102,7 @@ class AutoQuery(Query):
if
operator
is
None
:
if
operator
is
None
:
operator
=
'and'
operator
=
'and'
if
self
.
search_key
is
not
None
:
if
self
.
search_key
is
not
None
:
key
,
value
=
kw
.
items
(
)[
0
]
key
,
value
=
list
(
kw
.
items
()
)[
0
]
kw
=
{
key
:
{
'query'
:
value
,
'key'
:
self
.
search_key
}}
kw
=
{
key
:
{
'query'
:
value
,
'key'
:
self
.
search_key
}}
query
=
sql_catalog
.
buildQuery
(
kw
,
operator
=
operator
,
ignore_empty_string
=
self
.
ignore_empty_string
)
query
=
sql_catalog
.
buildQuery
(
kw
,
operator
=
operator
,
ignore_empty_string
=
self
.
ignore_empty_string
)
if
self
.
table_alias_list
is
not
None
:
if
self
.
table_alias_list
is
not
None
:
...
...
product/ZSQLCatalog/SQLCatalog.py
View file @
ff1b9f1f
...
@@ -2129,7 +2129,7 @@ class Catalog(Folder,
...
@@ -2129,7 +2129,7 @@ class Catalog(Folder,
if
len
(
empty_value_dict
):
if
len
(
empty_value_dict
):
LOG
(
'SQLCatalog'
,
WARNING
,
'Discarding columns with empty values: %r'
%
(
empty_value_dict
,
))
LOG
(
'SQLCatalog'
,
WARNING
,
'Discarding columns with empty values: %r'
%
(
empty_value_dict
,
))
if
len
(
unknown_column_dict
):
if
len
(
unknown_column_dict
):
message
=
'Unknown columns '
+
repr
(
unknown_column_dict
.
keys
(
))
message
=
'Unknown columns '
+
repr
(
ensure_list
(
unknown_column_dict
.
keys
()
))
if
ignore_unknown_columns
:
if
ignore_unknown_columns
:
LOG
(
'SQLCatalog'
,
WARNING
,
message
)
LOG
(
'SQLCatalog'
,
WARNING
,
message
)
else
:
else
:
...
...
product/ZSQLCatalog/SearchText/lexer.py
View file @
ff1b9f1f
...
@@ -58,7 +58,10 @@ class lexer(object):
...
@@ -58,7 +58,10 @@ class lexer(object):
write_tables
=
False
)
write_tables
=
False
)
sys
.
stdout
,
sys
.
stderr
=
sys
.
__stdout__
,
sys
.
__stderr__
sys
.
stdout
,
sys
.
stderr
=
sys
.
__stdout__
,
sys
.
__stderr__
# Emit all logs with regular Zope logging
# Emit all logs with regular Zope logging
for
line
in
output
.
getvalue
().
split
(
'
\
n
'
):
value
=
output
.
getvalue
()
if
six
.
PY3
:
value
=
value
.
decode
()
for
line
in
value
.
split
(
'
\
n
'
):
if
len
(
line
):
if
len
(
line
):
LOG
(
'lexer'
,
0
,
line
)
LOG
(
'lexer'
,
0
,
line
)
...
...
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