Project

General

Profile

Development #36515

Tourner (les tests) en Python 3

Added by Frédéric Péters 4 months ago. Updated 2 months ago.

Status:
Solution déployée
Priority:
Normal
Target version:
-
Start date:
30 Sep 2019
Due date:
30 Nov 2019
% Done:

0%

Patch proposed:
No
Planning:
No

Description

Hop chapeau, avec un responsable et une échéance avant la deadline.

wcs-python3-trend.png View (5.83 KB) Frédéric Péters, 19 Nov 2019 04:28 PM

39103

Related issues

Related to w.c.s. - Development #36516: py3 vs types.TypeType Solution déployée 30 Sep 2019
Related to w.c.s. - Development #36517: Imports relatifs Solution déployée 30 Sep 2019
Related to Au quotidien - Development #36518: Imports relatifs Solution déployée 30 Sep 2019
Related to w.c.s. - Development #37572: retirer les appels à unicode() Rejeté 11 Nov 2019
Related to w.c.s. - Development #6107: Retirer l'utf8switch Solution déployée 05 Dec 2014
Related to w.c.s. - Development #37574: retirer l'info d'encodage pour les fichiers XML exportés Solution déployée 11 Nov 2019
Related to w.c.s. - Development #37577: python3, modules déplacés Rejeté 12 Nov 2019
Related to w.c.s. - Development #37579: python3, utiliser cPickle uniquement quand disponible Rejeté 12 Nov 2019
Related to w.c.s. - Development #37580: python3, print() Rejeté 12 Nov 2019
Related to w.c.s. - Development #37581: python3, syntaxe except Rejeté 12 Nov 2019
Related to w.c.s. - Development #37582: python3, utiliser SafeText plutôt que SafeUnicode Rejeté 12 Nov 2019
Related to w.c.s. - Development #37587: retirer la prise en charge de statsd Solution déployée 12 Nov 2019

Associated revisions

Revision a7844cf7 (diff)
Added by Frédéric Péters 2 months ago

general: replace unicode() calls by force_text() (#36515)

Revision 268d68af (diff)
Added by Frédéric Péters 2 months ago

misc: get StringIO from six (#36515)

Revision abf453b0 (diff)
Added by Frédéric Péters 2 months ago

general: remove bounce processing (#36515)

Revision 4f413115 (diff)
Added by Frédéric Péters 2 months ago

misc: use SafeText instead of SafeUnicode (#36515)

Revision b6272576 (diff)
Added by Frédéric Péters 2 months ago

misc: only convert SafeString when running in Python 2 (#36515)

Revision 2cde27b9 (diff)
Added by Frédéric Péters 2 months ago

misc: use cPickle only when available (#36515)

Revision 59e2f81b (diff)
Added by Frédéric Péters 2 months ago

tests: remove unused cPickle import (#36515)

Revision 26ed3325 (diff)
Added by Frédéric Péters 2 months ago

misc: get urlparse from six (#36515)

Revision 79a23d7f (diff)
Added by Frédéric Péters 2 months ago

tests: replace cPickle by pickle (#36515)

Revision 7fe626dd (diff)
Added by Frédéric Péters 2 months ago

misc: update except syntax (#36515)

Revision b8e68257 (diff)
Added by Frédéric Péters 2 months ago

tests: update location of MIMEText import (#36515)

Revision cb9d208a (diff)
Added by Frédéric Péters 2 months ago

misc: use print as function (#36515)

Revision 563e25e4 (diff)
Added by Frédéric Péters 2 months ago

misc: get ConfigParser from six (#36515)

Revision f2c22c9b (diff)
Added by Frédéric Péters 2 months ago

tests: remove usage of urllib2 (#36515)

Revision 46b17869 (diff)
Added by Frédéric Péters 2 months ago

tests: use file() to open file (#36515)

Revision 68837c7b (diff)
Added by Frédéric Péters 2 months ago

tests: use resp.text (#36515)

Revision 84e801eb (diff)
Added by Frédéric Péters 2 months ago

misc: write files as binaries (#36515)

Revision 68e4df6b (diff)
Added by Frédéric Péters 2 months ago

misc: always pass bytes for md5 hashing (#36515)

Revision 2381d57f (diff)
Added by Frédéric Péters 2 months ago

misc: get META via request.environ (do not override property) (#36515)

Revision 58709d30 (diff)
Added by Frédéric Péters 2 months ago

misc: get urllib from django.six (#36515)

Revision a0b301d7 (diff)
Added by Frédéric Péters 2 months ago

storage: sort results using a key, not a cmp function (#36515)

Revision e0736bb3 (diff)
Added by Frédéric Péters 2 months ago

misc: sort categories using key function (#36515)

Revision 929271ea (diff)
Added by Frédéric Péters 2 months ago

misc: sort using key function (#36515)

Revision b51c8b29 (diff)
Added by Frédéric Péters 2 months ago

backoffice: sort ids using key function (#36515)

Revision f43e9e03 (diff)
Added by Frédéric Péters 2 months ago

api: sort using key function (#36515)

Revision 5f2855c6 (diff)
Added by Frédéric Péters 2 months ago

tests: sort using key function (#36515)

Revision 51a4b985 (diff)
Added by Frédéric Péters 2 months ago

admin: sort emails/texts using key function (#36515)

Revision 7603e808 (diff)
Added by Frédéric Péters 2 months ago

misc: replace has_key usages (#36515)

Revision ec615482 (diff)
Added by Frédéric Péters 2 months ago

misc: update config load for python 3 (#36515)

Revision 1cc98e2b (diff)
Added by Frédéric Péters 2 months ago

use absolute import when creating default workflows (#36515)

Revision 601e1e97 (diff)
Added by Frédéric Péters 2 months ago

misc: update simplify for py3 (#36515)

Revision d9695102 (diff)
Added by Frédéric Péters 2 months ago

ezt: update bits for python3 (has_key, basestring, number types) (#36515)

Revision ad7deb53 (diff)
Added by Frédéric Péters 2 months ago

misc: use binary file for storage (#36515)

Revision 19c8a9f0 (diff)
Added by Frédéric Péters 2 months ago

storage: load/save index files as binary files (#36515)

Revision 68172f6b (diff)
Added by Frédéric Péters 2 months ago

tests: read/write uploads as binary (#36515)

Revision 4beb5670 (diff)
Added by Frédéric Péters 2 months ago

form: use binary files for uploads (#36515)

Revision dcaf6930 (diff)
Added by Frédéric Péters 2 months ago

misc: write metadata file as binary (#36515)

Revision bcd89087 (diff)
Added by Frédéric Péters 2 months ago

misc: use binary files for thumbnails (#36515)

Revision eb24de3d (diff)
Added by Frédéric Péters 2 months ago

admin: create archive as bytes (#36515)

Revision 53d19d56 (diff)
Added by Frédéric Péters 2 months ago

settings: write theme files as binaries (#36515)

Revision fddc1e70 (diff)
Added by Frédéric Péters 2 months ago

request: only preprocess form fields in py2 (#36515)

Revision 2e0df59c (diff)
Added by Frédéric Péters 2 months ago

sql: update storage for py3 compatibility (#36515)

Revision b533ffbc (diff)
Added by Frédéric Péters 2 months ago

misc: force workflow roles to list (#36515)

Revision a0615d4e (diff)
Added by Frédéric Péters 2 months ago

sql: force view columns to be defined as text (#36515)

Revision 9e2a1633 (diff)
Added by Frédéric Péters 2 months ago

form: adapt date/email widget encoding for py3 (#36515)

Revision ec790a91 (diff)
Added by Frédéric Péters 2 months ago

misc: replace new module by types module (#36515)

Revision 08b0c3c6 (diff)
Added by Frédéric Péters 2 months ago

misc: update xml storage to check bytes (#36515)

Revision f43547d7 (diff)
Added by Frédéric Péters 2 months ago

backoffice: use integer division for pagination (#36515)

Revision 15b9bfad (diff)
Added by Frédéric Péters 2 months ago

backoffice: use integer division in stats (#36515)

Revision a9ef2ee5 (diff)
Added by Frédéric Péters 2 months ago

tests: force integer division in logged error test (#36515)

Revision bdb9ab66 (diff)
Added by Frédéric Péters 2 months ago

tests: update logged error test to use integer division (#36515)

Revision 2bcbb6b4 (diff)
Added by Frédéric Péters 2 months ago

misc: use six.string_types to check (str, unicode) (#36515)

Revision f9642685 (diff)
Added by Frédéric Péters 2 months ago

misc: iteritems() -> items() (#36515)

Revision c36f1385 (diff)
Added by Frédéric Péters 2 months ago

misc: replace basestring by six.string_types (#36515)

Revision a84c9491 (diff)
Added by Frédéric Péters 2 months ago

logger, six.string_types + six.integer_types (#36515)

Revision 27201a05 (diff)
Added by Frédéric Péters 2 months ago

tests: give bytes to Upload (#36515)

Revision 04a8d42c (diff)
Added by Frédéric Péters 2 months ago

tests: use req._user to force request user (#36515)

Revision d030541f (diff)
Added by Frédéric Péters 2 months ago

workflows: force list before sorting (#36515)

Revision 02387224 (diff)
Added by Frédéric Péters 2 months ago

tests: use urllib from six (#36515)

Revision b5722866 (diff)
Added by Frédéric Péters 2 months ago

misc: don't encode json data in py3 (#36515)

Revision 8132c06d (diff)
Added by Frédéric Péters 2 months ago

storage: use bytes when reading chunks (#36515)

Revision eeed7d63 (diff)
Added by Frédéric Péters 2 months ago

misc: pass bytes to hmac (#36515)

Revision 52ecc940 (diff)
Added by Frédéric Péters 2 months ago

misc: use list comprehensions to check for password character classes (#36515)

Revision 4b82f00c (diff)
Added by Frédéric Péters 2 months ago

workflows: only encode on py2 (#36515)

Revision 8cf415e6 (diff)
Added by Frédéric Péters 2 months ago

misc: add force_str(), to encode in Python 2 (#36515)

Revision 65d7c92a (diff)
Added by Frédéric Péters 2 months ago

api: compare signature as bytes (#36515)

Revision ee28cb7b (diff)
Added by Frédéric Péters 2 months ago

use force_str for formdef/workflow imports (#36515)

Revision 2ab5a9db (diff)
Added by Frédéric Péters 2 months ago

tests: expand ranges for comparisons (#36515)

Revision cddad2a1 (diff)
Added by Frédéric Péters 2 months ago

tests: use force_str() in sql fts test (#36515)

Revision 1c6837c1 (diff)
Added by Frédéric Péters 2 months ago

misc: use force_str in lazy variables (#36515)

Revision b008b1b0 (diff)
Added by Frédéric Péters 2 months ago

api: use sys.maxsize instead of sys.maxint (#36515)

Revision aad49254 (diff)
Added by Frédéric Péters 2 months ago

api: force keywords to be an expanded list (#36515)

Revision 817c34c8 (diff)
Added by Frédéric Péters 2 months ago

backoffice: expand .items() to list (#36515)

Revision 25db9ec9 (diff)
Added by Frédéric Péters 2 months ago

sql: force visiting_objects to be list (#36515)

Revision 587eceb5 (diff)
Added by Frédéric Péters 2 months ago

templates: use force_str (#36515)

Revision 03870bae (diff)
Added by Frédéric Péters 2 months ago

misc: use force_str for formdef/workflow xml exports (#36515)

Revision c0a26bb6 (diff)
Added by Frédéric Péters 2 months ago

general: always encode json as utf-8 (#36515)

Revision 590e51d4 (diff)
Added by Frédéric Péters 2 months ago

ods: always encode cell data (#36515)

Revision c0082bd5 (diff)
Added by Frédéric Péters 2 months ago

tests: fix qrcode test so it can be run standalone (#36515)

Revision eb0e74a5 (diff)
Added by Frédéric Péters 2 months ago

misc: do not convert non html body (#36515)

Revision ac5090bf (diff)
Added by Frédéric Péters 2 months ago

misc: encode x509/saml bits (#36515)

Revision d50bd086 (diff)
Added by Frédéric Péters 2 months ago

saml: sort IdPs before logging automatically on first one (#36515)

Revision 29a395a9 (diff)
Added by Frédéric Péters 2 months ago

forms: don't decode value in py3 (#36515)

Revision 4d8c743c (diff)
Added by Frédéric Péters 2 months ago

tests: use bytes in workflow export/import tests (#36515)

Revision ae5a3b6b (diff)
Added by Frédéric Péters 2 months ago

workflows: handle encoding in export/import of workflow actions (#36515)

Revision 8660de6c (diff)
Added by Frédéric Péters 2 months ago

workflows: expand list of idp to get ws url (#36515)

Revision 45330da6 (diff)
Added by Frédéric Péters 2 months ago

misc: don't recurse in attachments proxy when deepcopying (#36515)

Revision 6789ec0a (diff)
Added by Frédéric Péters 2 months ago

tests: pass bytes to base64 (#36515)

Revision e0f8b37f (diff)
Added by Frédéric Péters 2 months ago

tests: use strings in email mocking (#36515)

Revision 91c5c913 (diff)
Added by Frédéric Péters 2 months ago

workflows: allow building an attachment from strings (#36515)

Revision e4ab7442 (diff)
Added by Frédéric Péters 2 months ago

tests: adapt wscall error message check for python 3 (#36515)

Revision 03927a35 (diff)
Added by Frédéric Péters 2 months ago

workflows: handle models as bytes (#36515)

Revision 08c62820 (diff)
Added by Frédéric Péters 2 months ago

workflows: expand geolocation list (#36515)

Revision 460eee27 (diff)
Added by Frédéric Péters 2 months ago

workflows: use force_str on wscall result (#36515)

Revision 853ca330 (diff)
Added by Frédéric Péters 2 months ago

tests: check category export/import as bytes (#36515)

Revision 6ce363b6 (diff)
Added by Frédéric Péters 2 months ago

tests: make first admin workflows test run standalone (#36515)

Revision ee2e4b46 (diff)
Added by Frédéric Péters 2 months ago

admin: add required encoding for graphviz subprocess (#36515)

Revision 29006dca (diff)
Added by Frédéric Péters 2 months ago

admin: add correct encoding to user search (#36515)

Revision dbe3d21f (diff)
Added by Frédéric Péters 2 months ago

admin: adapt theme handling (#36515)

Revision c06b0287 (diff)
Added by Frédéric Péters 2 months ago

misc: update requests code for py3 (#36515)

Revision b6fcd773 (diff)
Added by Frédéric Péters 2 months ago

tests: update http requests mocking to use bytes (#36515)

Revision 73a12449 (diff)
Added by Frédéric Péters 2 months ago

misc: load wscall json response as text (#36515)

Revision 0a86069e (diff)
Added by Frédéric Péters 2 months ago

tests: always compare roles as sets (#36515)

Revision 95f1c524 (diff)
Added by Frédéric Péters 2 months ago

workflows: force visibility to be a list() (#36515)

Revision 7411f631 (diff)
Added by Frédéric Péters 2 months ago

admin: update workflow functions sort for python3 (#36515)

Revision 9a19293d (diff)
Added by Frédéric Péters 2 months ago

misc: always expand lists used as widget options (#36515)

Revision fbf37858 (diff)
Added by Frédéric Péters 2 months ago

tests: expand iterkeys() in assert (#36515)

Revision eee2c665 (diff)
Added by Frédéric Péters 2 months ago

admin: always use absolute imports for qommon (#36515)

Revision d3d70a32 (diff)
Added by Frédéric Péters 2 months ago

tests: use name to get function name (#36515)

Revision 220a87f7 (diff)
Added by Frédéric Péters 2 months ago

misc: adapt de/encoding in import zip (#36515)

Revision 9e1cf8db (diff)
Added by Frédéric Péters 2 months ago

formdata: iterate over a copy of dict keys when flattening it (#36515)

Revision 451e8adf (diff)
Added by Frédéric Péters 2 months ago

lazy: add bool = nonzero for py3 compatibility (#36515)

Revision e57e4ec4 (diff)
Added by Frédéric Péters 2 months ago

tests: rewrite home keywords test to handle different attributes order (#36515)

Revision 32047b96 (diff)
Added by Frédéric Péters 2 months ago

tests: expand .values() as lists (#36515)

Revision 41f08030 (diff)
Added by Frédéric Péters 2 months ago

sessions: write files as binaries (#36515)

Revision d51ea170 (diff)
Added by Frédéric Péters 2 months ago

saml: read keys as binaries (#36515)

Revision 64d5c25f (diff)
Added by Frédéric Péters 2 months ago

backoffice: use force_str for query parameter (#36515)

Revision 9a42be13 (diff)
Added by Frédéric Péters 2 months ago

backoffice: expand categories as list (#36515)

Revision d9f732c1 (diff)
Added by Frédéric Péters 2 months ago

data sources: import xml as strings (#36515)

Revision 3982bcb1 (diff)
Added by Frédéric Péters 2 months ago

use force_str when initializing site from xml (#36515)

Revision a22e384a (diff)
Added by Frédéric Péters 2 months ago

wscalls: use force_str when importing wscalls (#36515)

Revision f20226c1 (diff)
Added by Frédéric Péters 2 months ago

storage: add support for sorting disparate types (#36515)

Revision 2a90f8e1 (diff)
Added by Frédéric Péters 2 months ago

workflows: expand items as list (#36515)

Revision e331c734 (diff)
Added by Frédéric Péters 2 months ago

misc: load json as text (#36515)

Revision c6ac153a (diff)
Added by Frédéric Péters 2 months ago

request: rework json parsing for quixote3 (#36515)

Revision 2eb3b272 (diff)
Added by Frédéric Péters 2 months ago

misc: don't encode json in local charset in python 3 (#36515)

Revision 1adc8d85 (diff)
Added by Frédéric Péters 2 months ago

storage: unpickle python2 strings as bytes (#36515)

(it would be so much easier to pass encoding='utf-8' and have them
converted but this will fail for objects with datetime/date/time
instances as those requires encoding='latin-1)

Revision 6f6635e5 (diff)
Added by Frédéric Péters 2 months ago

workflows: read attachments as binaries (#36515)

Revision 28c9c30b (diff)
Added by Frédéric Péters 2 months ago

tests: check content as bytes (#36515)

Revision 66e84dad (diff)
Added by Frédéric Péters 2 months ago

hobo notify: use force_str on provisioned attributes (#36515)

Revision 458846d5 (diff)
Added by Frédéric Péters 2 months ago

sessions: expand .items() when marking visited objects (#36515)

Revision 04ab5c84 (diff)
Added by Frédéric Péters 2 months ago

franceconnect: pass bytes to hashlib (#36515)

Revision 728f4c4b (diff)
Added by Frédéric Péters 2 months ago

backoffice: expand geolocation as list (#36515)

Revision 2268d53d (diff)
Added by Frédéric Péters 2 months ago

conditions: adapt encoding of validation errors (#36515)

Revision d8534d50 (diff)
Added by Frédéric Péters 2 months ago

misc: encode bytes when producing json output (#36515)

Revision 332c910e (diff)
Added by Frédéric Péters 2 months ago

workflows: handle rtf as text (#36515)

Revision 5a2f18f3 (diff)
Added by Frédéric Péters 2 months ago

workflows: process model text as strings (#36515)

Revision 9ec61bf1 (diff)
Added by Frédéric Péters 2 months ago

workflows: update export to models for py3 (#36515)

Revision 2323b9e4 (diff)
Added by Frédéric Péters 2 months ago

fields: force base64 data as bytes (#36515)

Revision e30cd035 (diff)
Added by Frédéric Péters 2 months ago

workflows: save webservice call response as bytes (#36515)

Revision 9926c183 (diff)
Added by Frédéric Péters 2 months ago

tests: check for different error message on py3 (#36515)

Revision 1042ecb3 (diff)
Added by Frédéric Péters 2 months ago

workflows: use force_str to display wscall error details (#36515)

Revision 896f6a56 (diff)
Added by Frédéric Péters 2 months ago

misc: adapt nir code validation to py3 (#36515)

Revision a377981e (diff)
Added by Frédéric Péters 2 months ago

tests: only check integer part of reproj result (#36515)

Revision 2d49eb4c (diff)
Added by Frédéric Péters 2 months ago

tests: expand get_visited_objects result (#36515)

Revision bd84240b (diff)
Added by Frédéric Péters 2 months ago

tests: check provisioned user attribute as proper type (#36515)

Revision 5d7e3d9f (diff)
Added by Frédéric Péters 2 months ago

ctl: use open() instead of file() (#36515)

Revision a41d0689 (diff)
Added by Frédéric Péters 2 months ago

ctl: use bytes in check_hobos command (#36515)

Revision 87e3f925 (diff)
Added by Frédéric Péters 2 months ago

tests: check convert to sql errors using str() (#36515)

Revision 16d69e14 (diff)
Added by Frédéric Péters 2 months ago

commands: adapt convert-to-sql for python3 (#36515)

Revision a549bf93 (diff)
Added by Frédéric Péters 2 months ago

tests: write invalid json file using codecs.encode (#36515)

Revision 75644e0e (diff)
Added by Frédéric Péters 2 months ago

data sources: use bytes to generate hash for cache key (#36515)

Revision 6fb05aa6 (diff)
Added by Frédéric Péters 2 months ago

tests: check download contents as bytes (#36515)

Revision ca8d2f12 (diff)
Added by Frédéric Péters 2 months ago

tests: use bytes for attachments (#36515)

Revision 594af7e6 (diff)
Added by Frédéric Péters 2 months ago

formdef: use itertools.chain to iterate over two lists (#36515)

Revision f3d08b57 (diff)
Added by Frédéric Péters 2 months ago

tests: check generated PDF using bytes (#36515)

Revision 71fce1ed (diff)
Added by Frédéric Péters 2 months ago

workflows: use json_loads wrapper when displaying wscall error details (#36515)

Revision a3691134 (diff)
Added by Frédéric Péters 2 months ago

misc: use strings when distributing base64 to json (#36515)

Revision 8dcccc7e (diff)
Added by Frédéric Péters 2 months ago

misc: pass bytes to base64 when doing http basic authentication (#36515)

Revision 1950e4a2 (diff)
Added by Frédéric Péters 2 months ago

formdef: handle base64 in xml import/export (#36515)

Revision 52f490d1 (diff)
Added by Frédéric Péters 2 months ago

misc: pass bytes to base64 in utils.attachment() function (#36515)

Revision fa1cab0d (diff)
Added by Frédéric Péters 2 months ago

tests: don't pass encoding to json.dumps (#36515)

Revision fc7b8097 (diff)
Added by Frédéric Péters 2 months ago

api: alter request user using hidden attribute (#36515)

Revision 1bb82839 (diff)
Added by Frédéric Péters 2 months ago

backoffice: export ods as binary (#36515)

Revision f3db0ac8 (diff)
Added by Frédéric Péters 2 months ago

workflows: open generated pdf file in binary mode (#36515)

Revision 56652ecc (diff)
Added by Frédéric Péters 2 months ago

admin: use binary files for theme/global export/import (#36515)

Revision 6dfb8cb0 (diff)
Added by Frédéric Péters 2 months ago

ctl: open zip file in binary mode (#36515)

Revision dc610683 (diff)
Added by Frédéric Péters 2 months ago

franceconnect: adapt to py3 (#36515)

Revision 66fb1ebb (diff)
Added by Frédéric Péters 2 months ago

middleware: iterate over a copy of form keys when adding session variables (#36515)

Revision b5210bf8 (diff)
Added by Frédéric Péters 2 months ago

storage: allow sorting objects with missing (receipt_)time (#36515)

Revision 87a9a96c (diff)
Added by Frédéric Péters 2 months ago

idp: always write files as binaries (#36515)

Revision 8a5378ae (diff)
Added by Frédéric Péters 2 months ago

misc: adapt password checking to py3 (#36515)

Revision df600c04 (diff)
Added by Frédéric Péters 2 months ago

admin: use string to pass overwriting form xml (#36515)

Revision 6d73daa1 (diff)
Added by Frédéric Péters 2 months ago

tests: check user formdef xml export using bytes (#36515)

Revision 1f1a721a (diff)
Added by Frédéric Péters 2 months ago

idp: read metadata and PEM keys as text (#36515)

Revision 059bab84 (diff)
Added by Frédéric Péters 2 months ago

logger: use next() to iterate over log lines (#36515)

Revision df1496dd (diff)
Added by Frédéric Péters 2 months ago

tests: don't distinguish unicode data sources in py3 (#36515)

Revision 9d04c27a (diff)
Added by Frédéric Péters 2 months ago

tests: don't manually encode utf8 in formdef name (#36515)

Revision a06cbdd1 (diff)
Added by Frédéric Péters 2 months ago

misc: adapt password storage (#36515)

Revision 8377202c (diff)
Added by Frédéric Péters 2 months ago

workflows: check for json request using private attribute (#36515)

Revision bc587151 (diff)
Added by Frédéric Péters 2 months ago

form: use force_str() on wysiwyg fields (#36515)

Revision 61b0a91e (diff)
Added by Frédéric Péters 2 months ago

tests: adapt inspect page test for py3 (#36515)

Revision b52ab7e0 (diff)
Added by Frédéric Péters 2 months ago

misc: update ranked items csv value for py3 (#36515)

Revision a2006e1f (diff)
Added by Frédéric Péters 2 months ago

tests: adapt test_json_str_decoder for py3 (#36515)

Revision 5ea45846 (diff)
Added by Frédéric Péters 2 months ago

tests: only check simplify() on bytes in py2 (#36515)

Revision 99f3e5d4 (diff)
Added by Frédéric Péters 2 months ago

tests: adapt mime type tests (#36515)

Revision b025c6e1 (diff)
Added by Frédéric Péters 2 months ago

misc: adapt ranked items for py3 (#36515)

Revision 96d0c798 (diff)
Added by Frédéric Péters 2 months ago

tests: use force_str() to encode item options (#36515)

Revision 2af7c9d9 (diff)
Added by Frédéric Péters 2 months ago

tests: update test_form_table_field_submit to use force_str (#36515)

Revision 347e2838 (diff)
Added by Frédéric Péters 2 months ago

emails: force_str() on html rendition of email (#36515)

Revision 75bdc481 (diff)
Added by Frédéric Péters 2 months ago

tests: check decoded email payload (#36515)

Revision c3371c01 (diff)
Added by Frédéric Péters 2 months ago

tests: update error email for new py3 exception value (#36515)

Revision 7e2d341e (diff)
Added by Frédéric Péters 2 months ago

emails: pass button link into force_str (#36515)

Revision 95b56b56 (diff)
Added by Frédéric Péters 2 months ago

misc: sort dictionary keys when exporting to xml (#36515)

Revision 0d4aa8f3 (diff)
Added by Frédéric Péters 2 months ago

form: use force_str on rendered map (#36515)

Revision 03a1dffe (diff)
Added by Frédéric Péters 2 months ago

storage: force (some) filename as bytes (#36515)

(required for python 3.5)

Revision d0a39cd9 (diff)
Added by Frédéric Péters 2 months ago

workflows: look for existence of json content with private attribute (#36515)

Revision 533a82c9 (diff)
Added by Frédéric Péters 2 months ago

runscript: pass script name as str (#36515)

Revision 1ce0c7bc (diff)
Added by Frédéric Péters 2 months ago

portfolio: pass text to json (#36515)

Revision 7e438162 (diff)
Added by Frédéric Péters 2 months ago

ctl: update check_hobos to use force_str to handle strings (#36515)

Revision d9c03728 (diff)
Added by Frédéric Péters 2 months ago

tests: mark request as POST to get mock form data parsed (#36515)

Revision 2d9bebb4 (diff)
Added by Frédéric Péters 2 months ago

tests: update check against json exception message (#36515)

Revision 5dc01668 (diff)
Added by Frédéric Péters 2 months ago

forms: mark invalid prefill value explicitely (#36515)

Revision e2f3df0c (diff)
Added by Frédéric Péters 2 months ago

tests: don't check application/msword extension as it may vary (#36515)

Revision b2b2fa0b (diff)
Added by Frédéric Péters 2 months ago

tests: use PicklableUpload in test that requires copying structure (#36515)

Revision 1d2a1d86 (diff)
Added by Frédéric Péters 2 months ago

formdef: add pre-json serialization of struct_time workflow options (#36515)

(python3 json serializer would otherwise catch them and serialize them
as tuples)

Revision 9c710ba2 (diff)
Added by Frédéric Péters 2 months ago

misc: don't enable form tokens in simulated form in test_display_form (#36515)

Revision f6995de7 (diff)
Added by Frédéric Péters 2 months ago

publisher: only handle non-encodable exception strings in python 2 (#36515)

Revision c142f43f (diff)
Added by Frédéric Péters 2 months ago

misc: use force_str to encode exception in error page (#36515)

Revision 3e78ff2e (diff)
Added by Frédéric Péters 2 months ago

tests: make test_finish_failed_request work standalone (#36515)

Revision 6b07387a (diff)
Added by Frédéric Péters 2 months ago

tests: get test_finish_interrupted_request responses content (#36515)

Revision de96b7d7 (diff)
Added by Frédéric Péters 2 months ago

publisher: restore config.json from zip file as text (#36515)

Revision 279abb77 (diff)
Added by Frédéric Péters 2 months ago

tox: run tests against python 3 (#36515)

Revision ac80c56a (diff)
Added by Frédéric Péters 2 months ago

tox: add build dependencies (#36515)

History

#1 Updated by Frédéric Péters 4 months ago

#2 Updated by Frédéric Péters 4 months ago

#3 Updated by Frédéric Péters 4 months ago

#4 Updated by Frédéric Péters 2 months ago

#5 Updated by Frédéric Péters 2 months ago

#6 Updated by Frédéric Péters 2 months ago

  • Related to Development #37574: retirer l'info d'encodage pour les fichiers XML exportés added

#7 Updated by Frédéric Péters 2 months ago

#8 Updated by Frédéric Péters 2 months ago

  • Related to Development #37579: python3, utiliser cPickle uniquement quand disponible added

#9 Updated by Frédéric Péters 2 months ago

#10 Updated by Frédéric Péters 2 months ago

#11 Updated by Frédéric Péters 2 months ago

#12 Updated by Frédéric Péters 2 months ago

#13 Updated by Frédéric Péters 2 months ago

  • Subject changed from Tourner en Python 3 to Tourner (les tests) en Python 3
  • File wcs-python3-trend.png View added
  • Tracker changed from Autre to Development
  • Status changed from Nouveau to Solution proposée
39103

Je limite ce ticket aux tests, que ça tourne déjà ainsi pour éviter des régressions à ce niveau, qu'ensuite il soit regardé deux aspects : 1/ migration de données des pickle, 2/ packaging.

En attendant ici, branche wip/36515-python3 avec tout le nécessaire pour passer dans jenkins, cf https://jenkins.entrouvert.org/job/wcs-wip/job/wip%252F36515-python3/ (ma branche de travail initiale était https://jenkins.entrouvert.org/job/wcs-wip/job/wip%252Fpython3-part2/ )

J'ai regroupé des commits qui allaient de manière évidente ensemble mais j'ai quand même laissé le tout en pas mal de petits commits; mais en gros, il y a une part de trucs évidents :

  • des modules à tirer depuis six pour assurer la transition
  • des print, has_key, et autres
  • des sort() qui se faisaient avec une fonction cmp plutôt qu'une fonction key
  • des iteritems() et autres, à remplacer, et parfois à taper avec un list() autour quand on veut en tirer un élément précis
  • des bytes à passer aux fonctions de hashage, base64, etc.
  • des fichiers à lire/écrire en mode binaire
  • des six.string_types ou six.integer_types à différents endroits
  • l'encodage des chaines, avec ajout d'une fonction force_str() qui fait force_text() en Python 3 et ...encode('utf-8') en Python 2, pour rester sur l'existant

Mais aussi :

  • dans les sort(), parfois la misère d'avoir à gérer à la fois des None et des valeurs (cf le init de Criteria dans wcs/qommon/storage.py, qui crée un "self.typed_none" du type opportun)
  • Python 3 qui désormais (dé)sérialise en JSON les time.struct_time, en créant des tuples, ce qui ne correspond pas à ce qu'on faisait avant (cf l'export_to_json de FormDef, sur workflow_options)
  • un changement de comportement de Quixote 3 sur la détection qu'un formulaire a été soumis, contourné dans certains tests
  • un truc pourri dans le stockage pickle qui fait qu'on pourrait avoir une conversion automatique des str() python2 en str() python3 en passant encoding='utf-8' sauf que ça crashe quand il y a des datetime/date/time dans le pickle, et du coup chargement en bytes et il y aura à manuellement gérer la migration (commit "storage: unpickle python2 strings as bytes")

et voilà.

Ça m'irait d'avoir une validation rapide parce que ça va être saoulant à maintenir dans une branche sur le côté.

#14 Updated by Emmanuel Cazenave 2 months ago

  • e4bd4080 tests: use file() to open file (#36515) : ce serait plutôt use open() (for the record mais bon pas grave, c'est galère de modifier le message d'un commit au fin fond d'une branche)
  • a321f200 : surpris que ce soit si court, personne n'utilise CompatHTTPRequest.META ? Je dois louper un truc.
  • 2927c87e : le dernier que j'ai regardé unitairement (j'en étais au un dixième des commits à vue de nez).

D'un diff global.

N'oublie pas de changer ceci au moment de pousser :

+       utils.mail_notify(currentBuild, env, 'fpeters+jenkins-wcs@entrouvert.org')

Dans la série 'for the record', je trouve que f22031acf aurait été plus propre avec create_superuser en fixture, passons.

9f9f623cb : pas compris.
05abc1038 : pas compris.

L'ajout de dépendances dans le tox pour py2 et py3 est surprenant mais j'imagine que c'est suite à un binz tox/pip/setuptools incompréhensible.

(Dans le diff global je me suis arrêté aux tests, qui sortent en premier dans le diff, reste le code de wcs lui même, avis aux amateurs ou je reprendrai demain).

#15 Updated by Frédéric Péters 2 months ago

N'oublie pas de changer ceci au moment de pousser :
+ utils.mail_notify(currentBuild, env, '')

Oui, sûr.

Dans la série 'for the record', je trouve que f22031acf aurait été plus propre avec create_superuser en fixture, passons.

Chez moi çe hash pointe vers #8315 (f22031acf44545b34cfb55b1371c75372620a5db) (mais sur la forme générale il y aurait en effet à passer davantage en fixtures, mais ce n'est pas à lier à ce ticket).

9f9f623cb : pas compris.

Pour référence :

-    assert tmpl.render(CompatibilityNamesDict({'form': lazy_formdata})) == '1625337.15483/5422836.71627'
+    coords = tmpl.render(CompatibilityNamesDict({'form': lazy_formdata})).split('/')
+    assert int(float(coords[0])) == 1625337
+    assert int(float(coords[1])) == 5422836

Le changement ici est parce que la précision est différente en Python 3.

05abc1038 : pas compris.

-    req.user = None
+    req._user = None

req.user est une propriété, en python 2 on peut la remplacer par un objet direct, en python 3 pas (AttributeError: can't set attribute), alors comme la propriété commence par regarder self._user, on peut juste remplir ça plutôt.

L'ajout de dépendances dans le tox pour py2 et py3 est surprenant mais j'imagine que c'est suite à un binz tox/pip/setuptools incompréhensible.

C'est parce qu'en Python 2 on s'est reposé sur les dépendances système installées sur la machine jenkins.

#16 Updated by Emmanuel Cazenave 2 months ago

  • Status changed from Solution proposée to Solution validée

(suite)
(interminable)
(deux heures plus tard)

Dans les trucs très récurrents, il y a l'utilisation de force_str que je n'ai pas bien compris, mais plutôt que de faire de la pédagogie, déployons ça au plus vite, ce sera bien plus utile.

#17 Updated by Frédéric Péters 2 months ago

Pour force_str(), j'en touchais un morceau au-dessus :

l'encodage des chaines, avec ajout d'une fonction force_str() qui fait force_text() en Python 3 et ...encode('utf-8') en Python 2, pour rester sur l'existant

On aurait pu imaginer une phase de transition où en Python 2 on serait passé à des chaines unicode mais c'est très mal/pas géré par Quixote<3; du coup on passe en vraies chaines en Python 3 parce que c'est ça qu'il faut faire, et on reste en "bytes" en Python 2 parce que c'est fait pour tourner avec Quixote<3.

(je ne sais pas si ça éclaire un peu)

#18 Updated by Emmanuel Cazenave 2 months ago

Frédéric Péters a écrit :

(je ne sais pas si ça éclaire un peu)

Ça éclaire.

Go go.

#19 Updated by Frédéric Péters 2 months ago

  • Status changed from Solution validée to Résolu (à déployer)
ac80c56af tox: add build dependencies (#36515)
279abb775 tox: run tests against python 3 (#36515)
de96b7d72 publisher: restore config.json from zip file as text (#36515)
6b07387ad tests: get test_finish_interrupted_request responses content (#36515)
3e78ff2e1 tests: make test_finish_failed_request work standalone (#36515)
c142f43fc misc: use force_str to encode exception in error page (#36515)
f6995de73 publisher: only handle non-encodable exception strings in python 2 (#36515)
9c710ba2e misc: don't enable form tokens in simulated form in test_display_form (#36515)
1d2a1d869 formdef: add pre-json serialization of struct_time workflow options (#36515)
b2b2fa0bf tests: use PicklableUpload in test that requires copying structure (#36515)
e2f3df0cc tests: don't check application/msword extension as it may vary (#36515)
5dc016682 forms: mark invalid prefill value explicitely (#36515)
2d9bebb49 tests: update check against json exception message (#36515)
d9c03728d tests: mark request as POST to get mock form data parsed (#36515)
7e438162d ctl: update check_hobos to use force_str to handle strings (#36515)
1ce0c7bcc portfolio: pass text to json (#36515)
533a82c9f runscript: pass script name as str (#36515)
d0a39cd94 workflows: look for existence of json content with private attribute (#36515)
03a1dffea storage: force (some) filename as bytes (#36515)
0d4aa8f3d form: use force_str on rendered map (#36515)
95b56b56a misc: sort dictionary keys when exporting to xml (#36515)
7e2d341e6 emails: pass button link into force_str (#36515)
c3371c012 tests: update error email for new py3 exception value (#36515)
75bdc4816 tests: check decoded email payload (#36515)
347e28380 emails: force_str() on html rendition of email (#36515)
2af7c9d98 tests: update test_form_table_field_submit to use force_str (#36515)
96d0c798b tests: use force_str() to encode item options (#36515)
b025c6e19 misc: adapt ranked items for py3 (#36515)
99f3e5d45 tests: adapt mime type tests (#36515)
5ea45846d tests: only check simplify() on bytes in py2 (#36515)
a2006e1fd tests: adapt test_json_str_decoder for py3 (#36515)
b52ab7e09 misc: update ranked items csv value for py3 (#36515)
61b0a91ee tests: adapt inspect page test for py3 (#36515)
bc5871516 form: use force_str() on wysiwyg fields (#36515)
8377202c8 workflows: check for json request using private attribute (#36515)
a06cbdd1e misc: adapt password storage (#36515)
9d04c27a7 tests: don't manually encode utf8 in formdef name (#36515)
df1496dd4 tests: don't distinguish unicode data sources in py3 (#36515)
059bab843 logger: use next() to iterate over log lines (#36515)
1f1a721ae idp: read metadata and PEM keys as text (#36515)
6d73daa14 tests: check user formdef xml export using bytes (#36515)
df600c04e admin: use string to pass overwriting form xml (#36515)
8a5378aec misc: adapt password checking to py3 (#36515)
87a9a96ce idp: always write files as binaries (#36515)
b5210bf8a storage: allow sorting objects with missing (receipt_)time (#36515)
66fb1ebbe middleware: iterate over a copy of form keys when adding session variables (#36515)
dc610683f franceconnect: adapt to py3 (#36515)
6dfb8cb00 ctl: open zip file in binary mode (#36515)
56652ecc6 admin: use binary files for theme/global export/import (#36515)
f3db0ac83 workflows: open generated pdf file in binary mode (#36515)
1bb828399 backoffice: export ods as binary (#36515)
fc7b80971 api: alter request user using hidden attribute (#36515)
fa1cab0d2 tests: don't pass encoding to json.dumps (#36515)
52f490d19 misc: pass bytes to base64 in utils.attachment() function (#36515)
1950e4a21 formdef: handle base64 in xml import/export (#36515)
8dcccc7e9 misc: pass bytes to base64 when doing http basic authentication (#36515)
a36911344 misc: use strings when distributing base64 to json (#36515)
71fce1ed8 workflows: use json_loads wrapper when displaying wscall error details (#36515)
f3d08b571 tests: check generated PDF using bytes (#36515)
594af7e6a formdef: use itertools.chain to iterate over two lists (#36515)
ca8d2f12e tests: use bytes for attachments (#36515)
6fb05aa64 tests: check download contents as bytes (#36515)
75644e0e5 data sources: use bytes to generate hash for cache key (#36515)
a549bf930 tests: write invalid json file using codecs.encode (#36515)
16d69e14a commands: adapt convert-to-sql for python3 (#36515)
87e3f925c tests: check convert to sql errors using str() (#36515)
a41d06892 ctl: use bytes in check_hobos command  (#36515)
5d7e3d9ff ctl: use open() instead of file() (#36515)
bd84240b5 tests: check provisioned user attribute as proper type (#36515)
2d49eb4cb tests: expand get_visited_objects result (#36515)
a377981ee tests: only check integer part of reproj result (#36515)
896f6a560 misc: adapt nir code validation to py3 (#36515)
1042ecb3f workflows: use force_str to display wscall error details (#36515)
9926c1834 tests: check for different error message on py3 (#36515)
e30cd0354 workflows: save webservice call response as bytes (#36515)
2323b9e44 fields: force base64 data as bytes (#36515)
9ec61bf16 workflows: update export to models for py3 (#36515)
5a2f18f3d workflows: process model text as strings (#36515)
332c910ee workflows: handle rtf as text (#36515)
d8534d500 misc: encode bytes when producing json output (#36515)
2268d53de conditions: adapt encoding of validation errors (#36515)
728f4c4bf backoffice: expand geolocation as list (#36515)
04ab5c841 franceconnect: pass bytes to hashlib (#36515)
458846d5b sessions: expand .items() when marking visited objects (#36515)
66e84dadc hobo notify: use force_str on provisioned attributes (#36515)
28c9c30b8 tests: check content as bytes (#36515)
6f6635e59 workflows: read attachments as binaries (#36515)
1adc8d855 storage: unpickle python2 strings as bytes (#36515)
2eb3b272b misc: don't encode json in local charset in python 3 (#36515)
c6ac153a8 request: rework json parsing for quixote3 (#36515)
e331c7347 misc: load json as text (#36515)
2a90f8e19 workflows: expand items as list (#36515)
f20226c14 storage: add support for sorting disparate types (#36515)
a22e384ac wscalls: use force_str when importing wscalls (#36515)
3982bcb10 use force_str when initializing site from xml (#36515)
d9f732c14 data sources: import xml as strings (#36515)
9a42be138 backoffice: expand categories as list (#36515)
64d5c25ff backoffice: use force_str for query parameter (#36515)
d51ea1701 saml: read keys as binaries (#36515)
41f080309 sessions: write files as binaries (#36515)
32047b964 tests: expand .values() as lists (#36515)
e57e4ec44 tests: rewrite home keywords test to handle different attributes order (#36515)
451e8adfe lazy: add __bool__ = __nonzero__ for py3 compatibility (#36515)
9e1cf8db6 formdata: iterate over a copy of dict keys when flattening it (#36515)
220a87f74 misc: adapt de/encoding in import zip (#36515)
d3d70a325 tests: use __name__ to get function name (#36515)
eee2c6659 admin: always use absolute imports for qommon (#36515)
fbf378582 tests: expand iterkeys() in assert (#36515)
9a19293d1 misc: always expand lists used as widget options (#36515)
7411f6314 admin: update workflow functions sort for python3 (#36515)
95f1c5244 workflows: force visibility to be a list() (#36515)
0a86069e3 tests: always compare roles as sets (#36515)
73a124497 misc: load wscall json response as text (#36515)
b6fcd7732 tests: update http requests mocking to use bytes (#36515)
c06b02870 misc: update requests code for py3 (#36515)
dbe3d21ff admin: adapt theme handling (#36515)
29006dcab admin: add correct encoding to user search (#36515)
ee2e4b467 admin: add required encoding for graphviz subprocess (#36515)
6ce363b66 tests: make first admin workflows test run standalone (#36515)
853ca330b tests: check category export/import as bytes (#36515)
460eee27c workflows: use force_str on wscall result (#36515)
08c628208 workflows: expand geolocation list (#36515)
03927a355 workflows: handle models as bytes (#36515)
e4ab74424 tests: adapt wscall error message check for python 3 (#36515)
91c5c913c workflows: allow building an attachment from strings (#36515)
e0f8b37f9 tests: use strings in email mocking (#36515)
6789ec0a5 tests: pass bytes to base64 (#36515)
45330da62 misc: don't recurse in attachments proxy when deepcopying (#36515)
8660de6c3 workflows: expand list of idp to get ws url (#36515)
ae5a3b6b6 workflows: handle encoding in export/import of workflow actions (#36515)
4d8c743cc tests: use bytes in workflow export/import tests (#36515)
29a395a91 forms: don't decode value in py3 (#36515)
d50bd086c saml: sort IdPs before logging automatically on first one (#36515)
ac5090bf0 misc: encode x509/saml bits (#36515)
eb0e74a5f misc: do not convert non html body (#36515)
c0082bd54 tests: fix qrcode test so it can be run standalone (#36515)
590e51d44 ods: always encode cell data (#36515)
c0a26bb67 general: always encode json as utf-8 (#36515)
03870baeb misc: use force_str for formdef/workflow xml exports (#36515)
587eceb59 templates: use force_str (#36515)
25db9ec90 sql: force visiting_objects to be list (#36515)
817c34c87 backoffice: expand .items() to list (#36515)
aad492547 api: force keywords to be an expanded list (#36515)
b008b1b0d api: use sys.maxsize instead of sys.maxint (#36515)
1c6837c1c misc: use force_str in lazy variables (#36515)
cddad2a13 tests: use force_str() in sql fts test (#36515)
2ab5a9db7 tests: expand ranges for comparisons (#36515)
ee28cb7bc use force_str for formdef/workflow imports (#36515)
65d7c92a6 api: compare signature as bytes (#36515)
8cf415e66 misc: add force_str(), to encode in Python 2 (#36515)
4b82f00c7 workflows: only encode on py2 (#36515)
52ecc9401 misc: use list comprehensions to check for password character classes (#36515)
eeed7d630 misc: pass bytes to hmac (#36515)
8132c06da storage: use bytes when reading chunks (#36515)
b57228660 misc: don't encode json data in py3 (#36515)
023872245 tests: use urllib from six (#36515)
d030541ff workflows: force list before sorting (#36515)
04a8d42ca tests: use req._user to force request user (#36515)
27201a057 tests: give bytes to Upload (#36515)
a84c94911 logger, six.string_types + six.integer_types (#36515)
c36f13852 misc: replace basestring by six.string_types (#36515)
f96426853 misc: iteritems() -> items() (#36515)
2bcbb6b44 misc: use six.string_types to check (str, unicode) (#36515)
bdb9ab669 tests: update logged error test to use integer division (#36515)
a9ef2ee5c tests: force integer division in logged error test (#36515)
15b9bfade backoffice: use integer division in stats (#36515)
f43547d7e backoffice: use integer division for pagination (#36515)
08b0c3c68 misc: update xml storage to check bytes (#36515)
ec790a911 misc: replace new module by types module (#36515)
9e2a16338 form: adapt date/email widget encoding for py3 (#36515)
a0615d4eb sql: force view columns to be defined as text (#36515)
b533ffbcf misc: force workflow roles to list (#36515)
2e0df59c7 sql: update storage for py3 compatibility (#36515)
fddc1e70a request: only preprocess form fields in py2 (#36515)
53d19d563 settings: write theme files as binaries (#36515)
eb24de3d6 admin: create archive as bytes (#36515)
bcd89087e misc: use binary files for thumbnails (#36515)
dcaf69303 misc: write metadata file as binary (#36515)
4beb5670a form: use binary files for uploads (#36515)
68172f6b3 tests: read/write uploads as binary (#36515)
19c8a9f03 storage: load/save index files as binary files (#36515)
ad7deb535 misc: use binary file for storage (#36515)
d96951026 ezt: update bits for python3 (has_key, basestring, number types) (#36515)
601e1e974 misc: update simplify for py3 (#36515)
1cc98e2ba use absolute import when creating default workflows (#36515)
ec615482d misc: update config load for python 3 (#36515)
7603e808f misc: replace has_key usages (#36515)
51a4b9857 admin: sort emails/texts using key function (#36515)
5f2855c60 tests: sort using key function (#36515)
f43e9e038 api: sort using key function (#36515)
b51c8b29b backoffice: sort ids using key function (#36515)
929271ea9 misc: sort using key function (#36515)
e0736bb32 misc: sort categories using key function (#36515)
a0b301d75 storage: sort results using a key, not a cmp function (#36515)
58709d308 misc: get urllib from django.six (#36515)
2381d57f1 misc: get META via request.environ (do not override property) (#36515)
68e4df6be misc: always pass bytes for md5 hashing (#36515)
84e801eb4 misc: write files as binaries (#36515)
68837c7b7 tests: use resp.text (#36515)
46b178697 tests: use file() to open file (#36515)
f2c22c9b8 tests: remove usage of urllib2 (#36515)
563e25e45 misc: get ConfigParser from six (#36515)
cb9d208aa misc: use print as function (#36515)
b8e68257d tests: update location of MIMEText import (#36515)
7fe626dda misc: update except syntax (#36515)
79a23d7f6 tests: replace cPickle by pickle (#36515)
26ed33257 misc: get urlparse from six (#36515)
59e2f81b1 tests: remove unused cPickle import (#36515)
2cde27b98 misc: use cPickle only when available (#36515)
b6272576d misc: only convert SafeString when running in Python 2 (#36515)
4f413115b misc: use SafeText instead of SafeUnicode (#36515)
abf453b07 general: remove bounce processing (#36515)
268d68afa misc: get StringIO from six (#36515)
a7844cf7c general: replace unicode() calls by force_text() (#36515)

#20 Updated by Frédéric Péters 2 months ago

  • Status changed from Résolu (à déployer) to Solution déployée

Also available in: Atom PDF