This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "SQLObject development repository".
The branch, master has been updated
via ade481a3f94438a26ba35dc8248a6d84eb38de65 (commit)
via d1876c15115cc13b60a317fb55c564f39270d89a (commit)
via 57316afcfd523c8308f0e348f3e17b09973f551e (commit)
via acb369a2f85b1329aa72ff902341cda96dbdb0e4 (commit)
from 78f1bc56ba2f32c28af86611ceb5a0e991544f26 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sourceforge.net/p/sqlobject/sqlobject/ci/ade481a3f94438a26ba35dc8248a6d84eb38de65
commit ade481a3f94438a26ba35dc8248a6d84eb38de65
Author: Oleg Broytman <ph...@ph...>
Date: Sun Jul 30 19:43:09 2017 +0300
Fix(pg): Encode binary values for PyGreSQL driver
Encode binary values for PyGreSQL driver using the same encoding as for
py-postgresql driver. This fixes the last remaining problems with the driver.
diff --git a/.travis.yml b/.travis.yml
index 79032aa..ddb1252 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -70,10 +70,6 @@ env:
matrix:
allow_failures:
- - env: TOXENV=py27-postgres-pygresql
- - env: TOXENV=py34-postgres-pygresql
- - env: TOXENV=py35-postgres-pygresql
- - env: TOXENV=py36-postgres-pygresql
- env: TOXENV=py27-firebird-fdb
- env: TOXENV=py34-firebird-fdb
- env: TOXENV=py35-firebird-fdb
diff --git a/docs/News.rst b/docs/News.rst
index e2a430c..b5ba3ff 100644
--- a/docs/News.rst
+++ b/docs/News.rst
@@ -28,7 +28,16 @@ Drivers (work in progress)
* Encode binary values for py-postgresql driver. This fixes the
last remaining problems with the driver.
-* Encode/decode binary values for PyGreSQL driver.
+* Encode binary values for PyGreSQL driver using the same encoding as for
+ py-postgresql driver. This fixes the last remaining problems with the driver.
+
+ Our own encoding is needed because unescape_bytea(escape_bytea()) is not
+ idempotent. See the comment for PQunescapeBytea at
+ https://www.postgresql.org/docs/9.6/static/libpq-exec.html:
+
+| This conversion is not exactly the inverse of PQescapeBytea, because the
+| string is not expected to be "escaped" when received from PQgetvalue. In
+| particular this means there is no need for string quoting considerations.
* List all drivers in extras_require in setup.py.
diff --git a/docs/SQLObject.rst b/docs/SQLObject.rst
index e1f9b43..9a3121f 100644
--- a/docs/SQLObject.rst
+++ b/docs/SQLObject.rst
@@ -1831,9 +1831,9 @@ PostgresConnection supports transactions and all other features.
The user can choose a DB API driver for PostgreSQL by using a ``driver``
parameter in DB URI or PostgresConnection that can be a comma-separated
list of driver names. Possible drivers are: ``psycopg2``, psycopg1,
-``psycopg`` (tries psycopg2 and psycopg1), ``pygresql``, ``pygresql``,
-``pypostgresql``, ``pyodbc``, ``pypyodbc`` or ``odbc`` (try ``pyodbc`` and
-``pypyodbc``). Default is ``psycopg``.
+``psycopg`` (tries psycopg2 and psycopg1), ``pygresql``, ``pypostgresql``,
+``pyodbc``, ``pypyodbc`` or ``odbc`` (try ``pyodbc`` and ``pypyodbc``).
+Default is ``psycopg``.
Connection-specific parameters are: ``sslmode``, ``unicodeCols``,
``schema``, ``charset``.
diff --git a/sqlobject/col.py b/sqlobject/col.py
index 6ee5e98..0f35862 100644
--- a/sqlobject/col.py
+++ b/sqlobject/col.py
@@ -1770,9 +1770,6 @@ class BinaryValidator(SOValidator):
if isinstance(value, str):
if not PY2 and dbName == "mysql":
value = value.encode('ascii', errors='surrogateescape')
- if dbName == "postgres" and connection.driver == 'pygresql':
- from pg import unescape_bytea
- value = unescape_bytea(value)
if dbName == "sqlite":
if not PY2:
value = bytes(value, 'ascii')
diff --git a/sqlobject/postgres/pgconnection.py b/sqlobject/postgres/pgconnection.py
index 4e33185..494ff09 100644
--- a/sqlobject/postgres/pgconnection.py
+++ b/sqlobject/postgres/pgconnection.py
@@ -85,14 +85,9 @@ class PostgresConnection(DBAPI):
# Register a converter for psycopg Binary type.
registerConverter(type(self.module.Binary('')),
PsycoBinaryConverter)
- elif driver == 'pygresql':
- from pg import escape_bytea as pg_escape_bytea
- self.createBinary = \
- lambda value, pg_escape_bytea=pg_escape_bytea: \
- pg_escape_bytea(value)
- elif driver in ('py-postgresql', 'pypostgresql'):
+ elif driver in ('pygresql', 'py-postgresql', 'pypostgresql'):
registerConverter(type(self.module.Binary(b'')),
- PypostgresBinaryConverter)
+ PostgresBinaryConverter)
elif driver in ('odbc', 'pyodbc', 'pypyodbc'):
registerConverter(bytearray, OdbcBinaryConverter)
@@ -541,15 +536,23 @@ def PsycoBinaryConverter(value, db):
return str(value)
-def escape_bytea(value):
- return ''.join(
- ['\\' + (x[2:].rjust(3, '0')) for x in (oct(ord(c)) for c in value)]
- )
+if PY2:
+ def escape_bytea(value):
+ return ''.join(
+ ['\\' + (x[1:].rjust(3, '0'))
+ for x in (oct(ord(c)) for c in value)]
+ )
+else:
+ def escape_bytea(value):
+ return ''.join(
+ ['\\' + (x[2:].rjust(3, '0'))
+ for x in (oct(ord(c)) for c in value.decode('latin1'))]
+ )
-def PypostgresBinaryConverter(value, db):
+def PostgresBinaryConverter(value, db):
assert db == 'postgres'
- return sqlrepr(escape_bytea(value.decode('latin1')), db)
+ return sqlrepr(escape_bytea(value), db)
def OdbcBinaryConverter(value, db):
http://sourceforge.net/p/sqlobject/sqlobject/ci/d1876c15115cc13b60a317fb55c564f39270d89a
commit d1876c15115cc13b60a317fb55c564f39270d89a
Author: Oleg Broytman <ph...@ph...>
Date: Sun Jul 23 19:45:43 2017 +0300
Fix(CI): Fix Firebird setup
diff --git a/.travis.yml b/.travis.yml
index 95b8883..79032aa 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -91,14 +91,15 @@ before_install:
# We also create a test user for the firebird test and
# create a script that can be fed into isql-fb
# to create the test database.
+ # Copied password initializtion from
+ # https://github.com/xdenser/node-firebird-libfbclient/blob/master/.travis.yml
- if [[ $TOXENV = *firebird* ]]; then
sudo sed -i /etc/default/firebird2.5 -e 's/=no/=yes/' &&
sudo /etc/init.d/firebird2.5-super start && sleep 5 &&
- sudo touch /var/lib/firebird/create_test_db &&
- sudo chmod 666 /var/lib/firebird/create_test_db &&
- echo "CREATE DATABASE 'localhost:/tmp/test.fdb';" > /var/lib/firebird/create_test_db &&
- sudo chmod 644 /var/lib/firebird/create_test_db &&
- sudo gsec -user sysdba -pass masterkey -add test -pw test;
+ sudo /bin/bash -c '(export FB_VER="2.5"; export FB_FLAVOUR="super";source /usr/share/firebird2.5-common/functions.sh; writeNewPassword masterkey)' &&
+ sudo gsec -user sysdba -pass masterkey -add test -pw test &&
+ sudo /bin/bash -c "echo \"CREATE DATABASE 'localhost:/tmp/test.fdb';\" > /var/lib/firebird/create_test_db" &&
+ sudo chmod 644 /var/lib/firebird/create_test_db;
fi
install: travis_retry pip install tox coveralls codecov ppu
http://sourceforge.net/p/sqlobject/sqlobject/ci/57316afcfd523c8308f0e348f3e17b09973f551e
commit 57316afcfd523c8308f0e348f3e17b09973f551e
Author: Oleg Broytman <ph...@ph...>
Date: Sun Jul 23 01:10:48 2017 +0300
Fix(CI): Disable microseconds for MySQL at Travis
diff --git a/sqlobject/mysql/mysqlconnection.py b/sqlobject/mysql/mysqlconnection.py
index 225a02f..eb56223 100644
--- a/sqlobject/mysql/mysqlconnection.py
+++ b/sqlobject/mysql/mysqlconnection.py
@@ -459,7 +459,7 @@ class MySQLConnection(DBAPI):
def can_use_microseconds(self):
if self._can_use_microseconds is not None:
return self._can_use_microseconds
- if os.environ.get('APPVEYOR'):
+ if os.environ.get('APPVEYOR') or os.environ.get('TRAVIS'):
self._can_use_microseconds = False
return False
server_version = self.server_version()
diff --git a/sqlobject/tests/dbtest.py b/sqlobject/tests/dbtest.py
index ed1cb48..545c385 100644
--- a/sqlobject/tests/dbtest.py
+++ b/sqlobject/tests/dbtest.py
@@ -123,7 +123,10 @@ else:
if (connection.dbName == 'firebird') \
or (
(connection.dbName == 'mysql') and
- (os.environ.get('APPVEYOR'))
+ (
+ (os.environ.get('APPVEYOR')) or
+ (os.environ.get('TRAVIS'))
+ )
):
use_microseconds(False)
http://sourceforge.net/p/sqlobject/sqlobject/ci/acb369a2f85b1329aa72ff902341cda96dbdb0e4
commit acb369a2f85b1329aa72ff902341cda96dbdb0e4
Author: Oleg Broytman <ph...@ph...>
Date: Sun Jul 23 00:34:10 2017 +0300
Fix(CI): Force user root for mysql at Travis
diff --git a/tox.ini b/tox.ini
index 6cf2dea..c2e9c60 100644
--- a/tox.ini
+++ b/tox.ini
@@ -45,10 +45,10 @@ whitelist_externals =
[mysqldb]
commands =
{[testenv]commands}
- -mysql -e 'drop database sqlobject_test;'
- mysql -e 'create database sqlobject_test;'
+ -mysql -uroot -e 'drop database sqlobject_test;'
+ mysql -uroot -e 'create database sqlobject_test;'
pytest --cov=sqlobject -D mysql://root:@localhost/sqlobject_test?driver=mysqldb&debug=1
- mysql -e 'drop database sqlobject_test;'
+ mysql -uroot -e 'drop database sqlobject_test;'
[testenv:py27-mysqldb]
commands = {[mysqldb]commands}
@@ -56,10 +56,10 @@ commands = {[mysqldb]commands}
[mysqlclient]
commands =
{[testenv]commands}
- -mysql -e 'drop database sqlobject_test;'
- mysql -e 'create database sqlobject_test;'
+ -mysql -uroot -e 'drop database sqlobject_test;'
+ mysql -uroot -e 'create database sqlobject_test;'
pytest --cov=sqlobject -D mysql://root:@localhost/sqlobject_test?driver=mysqldb&charset=utf8&debug=1
- mysql -e 'drop database sqlobject_test;'
+ mysql -uroot -e 'drop database sqlobject_test;'
[testenv:py34-mysqlclient]
commands = {[mysqlclient]commands}
@@ -73,10 +73,10 @@ commands = {[mysqlclient]commands}
[mysql-connector]
commands =
{[testenv]commands}
- -mysql -e 'drop database sqlobject_test;'
- mysql -e 'create database sqlobject_test;'
+ -mysql -uroot -e 'drop database sqlobject_test;'
+ mysql -uroot -e 'create database sqlobject_test;'
pytest --cov=sqlobject -D mysql://root:@localhost/sqlobject_test?driver=connector&charset=utf8&debug=1
- mysql -e 'drop database sqlobject_test;'
+ mysql -uroot -e 'drop database sqlobject_test;'
[testenv:py27-mysql-connector]
commands = {[mysql-connector]commands}
@@ -93,10 +93,10 @@ commands = {[mysql-connector]commands}
[oursql]
commands =
{[testenv]commands}
- -mysql -e 'drop database sqlobject_test;'
- mysql -e 'create database sqlobject_test;'
+ -mysql -uroot -e 'drop database sqlobject_test;'
+ mysql -uroot -e 'create database sqlobject_test;'
pytest --cov=sqlobject -D mysql://root:@localhost/sqlobject_test?driver=oursql&charset=utf8&debug=1
- mysql -e 'drop database sqlobject_test;'
+ mysql -uroot -e 'drop database sqlobject_test;'
[testenv:py27-mysql-oursql]
commands = {[oursql]commands}
@@ -104,10 +104,10 @@ commands = {[oursql]commands}
[pymysql]
commands =
{[testenv]commands}
- -mysql -e 'drop database sqlobject_test;'
- mysql -e 'create database sqlobject_test;'
+ -mysql -uroot -e 'drop database sqlobject_test;'
+ mysql -uroot -e 'create database sqlobject_test;'
pytest --cov=sqlobject -D mysql://root:@localhost/sqlobject_test?driver=pymysql&charset=utf8&debug=1
- mysql -e 'drop database sqlobject_test;'
+ mysql -uroot -e 'drop database sqlobject_test;'
[testenv:py27-pymysql]
commands = {[pymysql]commands}
@@ -125,10 +125,10 @@ commands = {[pymysql]commands}
commands =
{[testenv]commands}
{envpython} -c "import pyodbc; print(pyodbc.drivers())"
- -mysql -e 'drop database sqlobject_test;'
- mysql -e 'create database sqlobject_test;'
+ -mysql -uroot -e 'drop database sqlobject_test;'
+ mysql -uroot -e 'create database sqlobject_test;'
pytest --cov=sqlobject -D mysql://root:@localhost/sqlobject_test?driver=pyodbc&odbcdrv=MySQL&charset=utf8&debug=1
- mysql -e 'drop database sqlobject_test;'
+ mysql -uroot -e 'drop database sqlobject_test;'
[testenv:py27-mysql-pyodbc]
commands = {[mysql-pyodbc]commands}
@@ -145,10 +145,10 @@ commands = {[mysql-pyodbc]commands}
[mysql-pypyodbc]
commands =
{[testenv]commands}
- -mysql -e 'drop database sqlobject_test;'
- mysql -e 'create database sqlobject_test;'
+ -mysql -uroot -e 'drop database sqlobject_test;'
+ mysql -uroot -e 'create database sqlobject_test;'
pytest --cov=sqlobject -D mysql://root:@localhost/sqlobject_test?driver=pypyodbc&odbcdrv=MySQL&charset=utf8&debug=1
- mysql -e 'drop database sqlobject_test;'
+ mysql -uroot -e 'drop database sqlobject_test;'
[testenv:py27-mysql-pypyodbc]
commands = {[mysql-pypyodbc]commands}
-----------------------------------------------------------------------
Summary of changes:
.travis.yml | 15 ++++++--------
docs/News.rst | 11 +++++++++-
docs/SQLObject.rst | 6 +++---
sqlobject/col.py | 3 ---
sqlobject/mysql/mysqlconnection.py | 2 +-
sqlobject/postgres/pgconnection.py | 29 ++++++++++++++------------
sqlobject/tests/dbtest.py | 5 ++++-
tox.ini | 42 +++++++++++++++++++-------------------
8 files changed, 61 insertions(+), 52 deletions(-)
hooks/post-receive
--
SQLObject development repository
|