annotate .circleci/config.yml @ 5525:bb7865241f8a

Make CSV import/export compatible across Python versions (also RDBMS journals) (issue 2550976, issue 2550975). The roundup-admin export and import commands are used for migrating between different database backends. It is desirable that they should be usable also for migrations between Python 2 and Python 3, and in some cases (e.g. with the anydbm backend) this may be required. To be usable for such migrations, the format of the generated CSV files needs to be stable, meaning the same as currently used with Python 2. The export process uses repr() to produce the fields in the CSV files and eval() to convert them back to Python data structures. repr() of strings with non-ASCII characters produces different results for Python 2 and Python 3. This patch adds repr_export and eval_import functions to roundup/anypy/strings.py which provide the required operations that are just repr() and eval() in Python 2, but are more complicated in Python 3 to use data representations compatible with Python 2. These functions are then used in the required places for export and import. repr() and eval() are also used in storing the dict of changed values in the journal for the RDBMS backends. It is similarly desirable that the database be compatible between Python 2 and Python 3, so that export and import do not need to be used for a migration between Python versions for non-anydbm back ends. Thus, this patch changes rdbms_common.py in the places involved in storing journals in the database, not just in those involved in import/export. Given this patch, import/export with non-ASCII characters appear based on some limited testing to work across Python versions, and an instance using the sqlite backend appears to be compatible between Python versions without needing import/export, *if* the sessions/otks databases (which use anydbm) are deleted when changing Python version.
author Joseph Myers <jsm@polyomino.org.uk>
date Sun, 02 Sep 2018 23:48:04 +0000
parents 851d4306300d
children 7017ea98930f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5509
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
1 version: 2
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
2 jobs:
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
3 build:
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
4 docker:
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
5 - image: circleci/buildpack-deps:18.04
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
6
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
7 - image: circleci/postgres:9.6-alpine-ram
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
8
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
9 - image: circleci/mysql:5.7-ram
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
10 environment:
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
11 MYSQL_ALLOW_EMPTY_PASSWORD=true
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
12 MYSQL_ROOT_HOST=%
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
13
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
14 working_directory: ~/repo
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
15
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
16 steps:
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
17 - checkout
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
18
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
19 - run:
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
20 name: install packages
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
21 command: |
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
22 sudo apt-get update
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
23 sudo apt-get install -y libgpgme-dev mysql-client-core-5.7 postgresql-client python3-gpg python3-mysqldb python3-pip python3-psycopg2 python3-pytest python3-pytest-cov python3-tz python3-venv python3-whoosh python3-xapian swig
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
24
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
25 - run:
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
26 name: install dependencies
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
27 command: |
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
28 python3 -m venv venv
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
29 . venv/bin/activate
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
30 pip3 install codecov
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
31
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
32 - run:
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
33 name: setup databases
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
34 command: |
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
35 psql -d postgresql://root@localhost/circle_test -c "CREATE ROLE rounduptest WITH CREATEDB LOGIN PASSWORD 'rounduptest';"
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
36 mysql -h 127.0.0.1 -u root -e "GRANT ALL ON rounduptest.* TO rounduptest@'127.0.0.1' IDENTIFIED BY \"rounduptest\";"
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
37 # patch host to 127.0.0.1 to force TCP connection to MySQL
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
38 sed -i -e 's/\(config[.]RDBMS_HOST =\) "localhost"/\1 "127.0.0.1"/' test/db_test_base.py
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
39 # HACK: workaround mysql bug: http://bugs.mysql.com/bug.php?id=74901
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
40 # needed for test_mysql.mysqlDBTest.testFilteringSpecialChars
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
41 sed -i -e 's/CREATE DATABASE \%s/CREATE DATABASE \%s COLLATE utf8_general_ci/' roundup/backends/back_mysql.py
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
42
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
43 - run:
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
44 name: run tests
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
45 command: |
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
46 . venv/bin/activate
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
47 py.test-3 -v test/ --cov=roundup
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
48 environment:
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
49 MYSQL_HOST: 127.0.0.1
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
50
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
51 - run:
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
52 name: run coverage
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
53 command: |
851d4306300d added circleci configuration to test on Ubuntu 18.04
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff changeset
54 codecov

Roundup Issue Tracker: http://roundup-tracker.org/