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 4d196203af98b7c418ad8a0ebeba081e1cf76c48 (commit)
via ed552e3fdf2f2b101c6eba9f83b1e27fe4d2e51b (commit)
via f3d1c3641393f098f92c1b3e54504198158c65c8 (commit)
via d89e61b8dadc60cea619ac089c6fafcf9556a48d (commit)
via 3a6f6eda84323d1dca94ec90d3affa111ec5ef90 (commit)
via 0d02d45489718c709192c53f158ad9242d4bf5ea (commit)
via 0fa4628d67982d8fd9e599c5bb68a7af47ba3fad (commit)
via 47af309433e5dc70eb61f758747e2886cb7fb274 (commit)
via 6f641c9e34c5f2ad108ab571f2a5a304c19ee028 (commit)
via 380a776fdf43b1edf755a700a1f02b2870d81867 (commit)
via d6a1e7537d4e6f954b9a80ec22cab6ae5253ec76 (commit)
via f67f0b550714416a82c03d749aa519e61a752fd5 (commit)
via 98ab6094fd6f990ea527d8b2e07bac3d8ca3fba7 (commit)
via b654cbf4f45d5e27d52c86dcee64a7d119fb86fc (commit)
via b7e0a90be5c926b1b0478d1b24ccee9aa67ce2cb (commit)
via 58925e1a6fdbadd200c9b41c251317c30d34bd9b (commit)
via d62190196491847b78f0e0ab953bc2e72f654e6f (commit)
via b4e68b5bac08d4163f31d65365881511748eb594 (commit)
via 6fa36b817c9bc7c7af42647a99cb8a28f48bb726 (commit)
from b6c60444aefc8cb2a8a192ba38f59e61a2505ec8 (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/4d196203af98b7c418ad8a0ebeba081e1cf76c48
commit 4d196203af98b7c418ad8a0ebeba081e1cf76c48
Author: Oleg Broytman <ph...@ph...>
Date: Fri Apr 7 07:49:39 2017 +0300
Use '/usr/bin/env python' for scripts
This allows eggs/wheels to be installed into virtual environments.
[skip ci]
diff --git a/devscripts/release b/devscripts/release
index d04373c..3a6fc74 100755
--- a/devscripts/release
+++ b/devscripts/release
@@ -8,11 +8,13 @@ chmod -R a+rX . &&
../set-commit-date.py &&
python setup.py build_py &&
+python setup.py build --executable '/usr/bin/env python' &&
python setup.py sdist &&
for py in 2.6 2.7 3.4 3.5 3.6; do
find build -name '*.py[co]' -delete &&
python$py setup.py build_py &&
+ python$py setup.py build --executable '/usr/bin/env python' &&
python$py -m compileall build &&
python$py -O -m compileall build &&
python$py setup.py bdist_egg || exit 1
http://sourceforge.net/p/sqlobject/sqlobject/ci/ed552e3fdf2f2b101c6eba9f83b1e27fe4d2e51b
commit ed552e3fdf2f2b101c6eba9f83b1e27fe4d2e51b
Author: Oleg Broytman <ph...@ph...>
Date: Fri Apr 7 06:56:36 2017 +0300
sqlite-memory tests fail at Travis for no apparent reason
diff --git a/.travis.yml b/.travis.yml
index c56d9ff..921df72 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -71,6 +71,10 @@ matrix:
- env: TOXENV=py34-pypostgresql
- env: TOXENV=py35-pypostgresql
- env: TOXENV=py36-pypostgresql
+ - env: TOXENV=py27-sqlite-memory
+ - env: TOXENV=py34-sqlite-memory
+ - env: TOXENV=py35-sqlite-memory
+ - env: TOXENV=py36-sqlite-memory
- env: TOXENV=py27-firebird-fdb
- env: TOXENV=py34-firebird-fdb
- env: TOXENV=py35-firebird-fdb
http://sourceforge.net/p/sqlobject/sqlobject/ci/f3d1c3641393f098f92c1b3e54504198158c65c8
commit f3d1c3641393f098f92c1b3e54504198158c65c8
Author: Oleg Broytman <ph...@ph...>
Date: Fri Apr 7 06:53:23 2017 +0300
Prevent flake8 to complain about 'unicode' under PY3
diff --git a/sqlobject/postgres/pgconnection.py b/sqlobject/postgres/pgconnection.py
index 7792e8b..c8d9b35 100644
--- a/sqlobject/postgres/pgconnection.py
+++ b/sqlobject/postgres/pgconnection.py
@@ -211,7 +211,7 @@ class PostgresConnection(DBAPI):
conn.setdecoding(self.module.SQL_WCHAR, encoding=dbEncoding)
if PY2:
conn.setencoding(str, encoding=dbEncoding)
- conn.setencoding(unicode, encoding=dbEncoding)
+ conn.setencoding(unicode, encoding=dbEncoding) # noqa
else:
conn.setencoding(encoding=dbEncoding)
self._executeRetry(conn, c,
http://sourceforge.net/p/sqlobject/sqlobject/ci/d89e61b8dadc60cea619ac089c6fafcf9556a48d
commit d89e61b8dadc60cea619ac089c6fafcf9556a48d
Author: Oleg Broytman <ph...@ph...>
Date: Fri Apr 7 06:51:30 2017 +0300
Stop running tests at Travis with Python 2.6.
diff --git a/.travis.yml b/.travis.yml
index e7773d1..c56d9ff 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -19,29 +19,23 @@ addons:
postgresql: "9.4"
env:
- - TOXENV=py26-mysqldb
- TOXENV=py27-mysqldb
- TOXENV=py34-mysqlclient
- TOXENV=py35-mysqlclient
- TOXENV=py36-mysqlclient
- - TOXENV=py26-mysql-connector
- TOXENV=py27-mysql-connector
- TOXENV=py34-mysql-connector
- TOXENV=py35-mysql-connector
- TOXENV=py36-mysql-connector
- - TOXENV=py26-mysql-oursql
- TOXENV=py27-mysql-oursql
- - TOXENV=py26-pymysql
- TOXENV=py27-pymysql
- TOXENV=py34-pymysql
- TOXENV=py35-pymysql
- TOXENV=py36-pymysql
- - TOXENV=py26-postgres-psycopg
- TOXENV=py27-postgres-psycopg
- TOXENV=py34-postgres-psycopg
- TOXENV=py35-postgres-psycopg
- TOXENV=py36-postgres-psycopg
- - TOXENV=py26-postgres-pygresql
- TOXENV=py27-postgres-pygresql
- TOXENV=py34-postgres-pygresql
- TOXENV=py35-postgres-pygresql
@@ -49,12 +43,10 @@ env:
- TOXENV=py34-pypostgresql
- TOXENV=py35-pypostgresql
- TOXENV=py36-pypostgresql
- - TOXENV=py26-sqlite
- TOXENV=py27-sqlite
- TOXENV=py34-sqlite
- TOXENV=py35-sqlite
- TOXENV=py36-sqlite
- - TOXENV=py26-sqlite-memory
- TOXENV=py27-sqlite-memory
- TOXENV=py34-sqlite-memory
- TOXENV=py35-sqlite-memory
@@ -72,7 +64,6 @@ env:
matrix:
allow_failures:
- - env: TOXENV=py26-postgres-pygresql
- env: TOXENV=py27-postgres-pygresql
- env: TOXENV=py34-postgres-pygresql
- env: TOXENV=py35-postgres-pygresql
diff --git a/docs/News.rst b/docs/News.rst
index e0fea06..f2697d6 100644
--- a/docs/News.rst
+++ b/docs/News.rst
@@ -29,6 +29,8 @@ Tests
* Run tests at Travis CI and AppVeyor with Python 3.6, x86 and x64.
+* Stop running tests at Travis with Python 2.6.
+
SQLObject 3.2.0
===============
http://sourceforge.net/p/sqlobject/sqlobject/ci/3a6f6eda84323d1dca94ec90d3affa111ec5ef90
commit 3a6f6eda84323d1dca94ec90d3affa111ec5ef90
Author: Oleg Broytman <ph...@ph...>
Date: Thu Apr 6 23:36:24 2017 +0300
[devscripts] Remove log files from pyodbc
[skip ci]
diff --git a/devscripts/cleanup b/devscripts/cleanup
index fa38d79..19fdb46 100755
--- a/devscripts/cleanup
+++ b/devscripts/cleanup
@@ -1,5 +1,5 @@
#! /bin/sh
cd "`dirname $0`" &&
-find . \( -name \*.orig -o -name \*.rej -o -name \*.tmp \) -type f -delete &&
+find . \( -name \*.orig -o -name \*.rej -o -name \*.tmp -o -name \*.log \) -type f -delete &&
exec rm -f /tmp/test-sqlite.sqdb*
http://sourceforge.net/p/sqlobject/sqlobject/ci/0d02d45489718c709192c53f158ad9242d4bf5ea
commit 0d02d45489718c709192c53f158ad9242d4bf5ea
Author: Oleg Broytman <ph...@ph...>
Date: Thu Apr 6 21:27:43 2017 +0300
Add support for PyODBC and PyPyODBC for MySQL
diff --git a/appveyor.yml b/appveyor.yml
index 8dda819..e7d182c 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -56,6 +56,26 @@ environment:
PYTHON_ARCH: "32"
db: mysql
TOX_ENV: "py36-mysql-connector-w32"
+ - PYTHON_HOME: "C:\\Python27-x64"
+ PYTHON_VERSION: "2.7"
+ PYTHON_ARCH: "64"
+ db: mysql
+ TOX_ENV: "py27-mysql-pyodbc-w32"
+ - PYTHON_HOME: "C:\\Python34-x64"
+ PYTHON_VERSION: "3.4"
+ PYTHON_ARCH: "64"
+ db: mysql
+ TOX_ENV: "py34-mysql-pyodbc-w32"
+ - PYTHON_HOME: "C:\\Python35-x64"
+ PYTHON_VERSION: "3.5"
+ PYTHON_ARCH: "64"
+ db: mysql
+ TOX_ENV: "py35-mysql-pyodbc-w32"
+ - PYTHON_HOME: "C:\\Python36-x64"
+ PYTHON_VERSION: "3.6"
+ PYTHON_ARCH: "64"
+ db: mysql
+ TOX_ENV: "py36-mysql-pyodbc-w32"
- PYTHON_HOME: "C:\\Python27"
PYTHON_VERSION: "2.7"
PYTHON_ARCH: "32"
@@ -116,26 +136,6 @@ environment:
PYTHON_ARCH: "64"
db: postgresql
TOX_ENV: "py36-postgres-pyodbc-w32"
- - PYTHON_HOME: "C:\\Python27-x64"
- PYTHON_VERSION: "2.7"
- PYTHON_ARCH: "64"
- db: postgresql
- TOX_ENV: "py27-postgres-pypyodbc-w32"
- - PYTHON_HOME: "C:\\Python34-x64"
- PYTHON_VERSION: "3.4"
- PYTHON_ARCH: "64"
- db: postgresql
- TOX_ENV: "py34-postgres-pypyodbc-w32"
- - PYTHON_HOME: "C:\\Python35-x64"
- PYTHON_VERSION: "3.5"
- PYTHON_ARCH: "64"
- db: postgresql
- TOX_ENV: "py35-postgres-pypyodbc-w32"
- - PYTHON_HOME: "C:\\Python36-x64"
- PYTHON_VERSION: "3.6"
- PYTHON_ARCH: "64"
- db: postgresql
- TOX_ENV: "py36-postgres-pypyodbc-w32"
- PYTHON_HOME: "C:\\Python27"
PYTHON_VERSION: "2.7"
PYTHON_ARCH: "32"
diff --git a/docs/News.rst b/docs/News.rst
index 975e185..e0fea06 100644
--- a/docs/News.rst
+++ b/docs/News.rst
@@ -21,8 +21,8 @@ Drivers (work in progress)
--------------------------
* Add support for PyODBC and PyPyODBC (pure-python ODBC DB API driver) for
- PostgreSQL. Driver names are ``pyodbc``, ``pypyodbc`` or ``odbc`` (try
- ``pyodbc`` and ``pypyodbc``). There are some problems.
+ MySQL and PostgreSQL. Driver names are ``pyodbc``, ``pypyodbc`` or
+ ``odbc`` (try ``pyodbc`` and ``pypyodbc``). There are some problems.
Tests
-----
diff --git a/docs/SQLObject.rst b/docs/SQLObject.rst
index 291092a..e1b9622 100644
--- a/docs/SQLObject.rst
+++ b/docs/SQLObject.rst
@@ -47,14 +47,14 @@ Requirements
============
Currently SQLObject supports MySQL_ via MySQLdb_ aka MySQL-python (called
-mysqlclient_ for Python 3), `MySQL Connector`_, oursql_ and PyMySQL_. For
-PostgreSQL_ psycopg2_ or psycopg1 are recommended; PyGreSQL_,
-py-postgresql_, PyODBC_ and PyPyODBC_ are supported but have problems (not
-all tests passed). SQLite_ has a built-in driver or PySQLite_. Firebird_
-is supported via fdb_ or kinterbasdb_; pyfirebirdsql_ is supported but has
-problems. `MAX DB`_ (also known as SAP DB) is supported via sapdb_. Sybase
-via Sybase_. `MSSQL Server`_ via pymssql_ (+ FreeTDS_) or adodbapi_
-(Win32).
+mysqlclient_ for Python 3), `MySQL Connector`_, oursql_, PyMySQL_, PyODBC_
+and PyPyODBC_. For PostgreSQL_ psycopg2_ or psycopg1 are recommended;
+PyGreSQL_, py-postgresql_, PyODBC_ and PyPyODBC_ are supported but have
+problems (not all tests passed). SQLite_ has a built-in driver or
+PySQLite_. Firebird_ is supported via fdb_ or kinterbasdb_; pyfirebirdsql_
+is supported but has problems. `MAX DB`_ (also known as SAP DB) is
+supported via sapdb_. Sybase via Sybase_. `MSSQL Server`_ via pymssql_ (+
+FreeTDS_) or adodbapi_ (Win32).
.. _MySQL: https://www.mysql.com/
.. _MySQLdb: https://sourceforge.net/projects/mysql-python/
@@ -1785,7 +1785,9 @@ transactions_ when using the InnoDB backend; SQLObject can explicitly
define the backend using ``sqlmeta.createSQL``.
Supported drivers are ``mysqldb``, ``connector``, ``oursql`` and
-``pymysql``; defualt is ``mysqldb``.
+``pymysql``, ``pyodbc``, ``pypyodbc`` or ``odbc`` (try ``pyodbc`` and
+``pypyodbc``); defualt is ``mysqldb``.
+
Keyword argument ``conv`` allows to pass a list of custom converters.
Example::
diff --git a/sqlobject/mysql/mysqlconnection.py b/sqlobject/mysql/mysqlconnection.py
index 05ef526..3da502b 100644
--- a/sqlobject/mysql/mysqlconnection.py
+++ b/sqlobject/mysql/mysqlconnection.py
@@ -8,7 +8,10 @@ from sqlobject.dbconnection import DBAPI
class ErrorMessage(str):
def __new__(cls, e, append_msg=''):
obj = str.__new__(cls, e.args[1] + append_msg)
- obj.code = int(e.args[0])
+ try:
+ obj.code = int(e.args[0])
+ except ValueError:
+ obj.code = e.args[0]
obj.module = e.__module__
obj.exception = e.__class__.__name__
return obj
@@ -67,11 +70,24 @@ class MySQLConnection(DBAPI):
oursql.errnos['CR_SERVER_GONE_ERROR']
self.CR_SERVER_LOST = oursql.errnos['CR_SERVER_LOST']
self.ER_DUP_ENTRY = oursql.errnos['ER_DUP_ENTRY']
+ elif driver == 'pyodbc':
+ import pyodbc
+ self.module = pyodbc
+ elif driver == 'pypyodbc':
+ import pypyodbc
+ self.module = pypyodbc
+ elif driver == 'odbc':
+ try:
+ import pyodbc
+ except ImportError:
+ import pypyodbc as pyodbc
+ self.module = pyodbc
else:
raise ValueError(
'Unknown MySQL driver "%s", '
'expected mysqldb, connector, '
- 'oursql or pymysql' % driver)
+ 'oursql, pymysql, '
+ 'odbc, pyodbc or pypyodbc' % driver)
except ImportError:
pass
else:
@@ -104,6 +120,11 @@ class MySQLConnection(DBAPI):
self.dbEncoding = None
self.driver = driver
+ if driver in ('odbc', 'pyodbc', 'pypyodbc'):
+ self.make_odbc_conn_str(db, host, port, user, password,
+ kw.pop('odbcdrv',
+ 'MySQL ODBC 5.3 ANSI Driver'))
+
global mysql_Bin
if not PY2 and mysql_Bin is None:
mysql_Bin = self.module.Binary
@@ -133,12 +154,17 @@ class MySQLConnection(DBAPI):
if self.driver == 'connector':
self.kw['consume_results'] = True
try:
- conn = self.module.connect(
- host=self.host, port=self.port, db=self.db,
- user=self.user, passwd=self.password, **self.kw)
- if self.driver != 'oursql':
- # Attempt to reconnect. This setting is persistent.
- conn.ping(True)
+ if self.driver in ('odbc', 'pyodbc', 'pypyodbc'):
+ self.debugWriter.write(
+ "ODBC connect string: " + self.odbc_conn_str)
+ conn = self.module.connect(self.odbc_conn_str)
+ else:
+ conn = self.module.connect(
+ host=self.host, port=self.port, db=self.db,
+ user=self.user, passwd=self.password, **self.kw)
+ if self.driver != 'oursql':
+ # Attempt to reconnect. This setting is persistent.
+ conn.ping(True)
except self.module.OperationalError as e:
conninfo = ("; used connection string: "
"host=%(host)s, port=%(port)s, "
@@ -236,7 +262,13 @@ class MySQLConnection(DBAPI):
try:
id = c.lastrowid
except AttributeError:
- id = c.insert_id()
+ try:
+ id = c.insert_id
+ except AttributeError:
+ self._executeRetry(conn, c, "SELECT LAST_INSERT_ID();")
+ id = c.fetchone()[0]
+ else:
+ id = c.insert_id()
if self.debugOutput:
self.printDebug(conn, id, 'QueryIns', 'result')
return id
@@ -274,7 +306,7 @@ class MySQLConnection(DBAPI):
self.query('DESCRIBE %s' % (tableName))
return True
except dberrors.ProgrammingError as e:
- if e.args[0].code == 1146: # ER_NO_SUCH_TABLE
+ if e.args[0].code in (1146, '42S02'): # ER_NO_SUCH_TABLE
return False
raise
diff --git a/tox.ini b/tox.ini
index 7519d99..0dfb792 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,6 +1,6 @@
[tox]
minversion = 1.8
-envlist = py{26,27}-{mysqldb,mysql-oursql},py{34,35,36}-{mysqlclient,pypostgresql},py{26,27,34,35,36}-{mysql-connector,pymysql,postgres-psycopg,postgres-pygresql,postgres-pyodbc,postgres-pypyodbc,sqlite,sqlite-memory},py{27,34,35,36}-{firebird-fdb,firebirdsql},py{27,34}-flake8,py{27,34,35,36}-{mssql,mysql-connector,postgres-psycopg,postgres-pyodbc,postgres-pypyodbc,sqlite,sqlite-memory}-w32
+envlist = py{26,27}-{mysqldb,mysql-oursql},py{34,35,36}-{mysqlclient,pypostgresql},py{26,27,34,35,36}-{mysql-connector,pymysql,mysql-pyodbc,mysql-pypyodbc,postgres-psycopg,postgres-pygresql,postgres-pyodbc,postgres-pypyodbc,sqlite,sqlite-memory},py{27,34,35,36}-{firebird-fdb,firebirdsql},py{27,34}-flake8,py{27,34,35,36}-{mssql,mysql-connector,mysql-pyodbc,mysql-pypyodbc,postgres-psycopg,postgres-pyodbc,postgres-pypyodbc,sqlite,sqlite-memory}-w32
# Base test environment settings
[testenv]
@@ -29,8 +29,8 @@ deps =
postgres-psycopg: psycopg2
postgres-pygresql: pygresql
pypostgresql: py-postgresql
- postgres-pyodbc: pyodbc
- postgres-pypyodbc: pypyodbc
+ pyodbc: pyodbc
+ pypyodbc: pypyodbc
firebird-fdb: fdb
firebirdsql: firebirdsql
mssql: pymssql
@@ -137,6 +137,53 @@ commands = {[pymysql]commands}
[testenv:py36-pymysql]
commands = {[pymysql]commands}
+[mysql-pyodbc]
+commands =
+ {[testenv]commands}
+ {envpython} -c "import pyodbc; print(pyodbc.drivers())"
+ -mysql -e 'drop database sqlobject_test;'
+ mysql -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;'
+
+[testenv:py26-mysql-pyodbc]
+commands = {[mysql-pyodbc]commands}
+
+[testenv:py27-mysql-pyodbc]
+commands = {[mysql-pyodbc]commands}
+
+[testenv:py34-mysql-pyodbc]
+commands = {[mysql-pyodbc]commands}
+
+[testenv:py35-mysql-pyodbc]
+commands = {[mysql-pyodbc]commands}
+
+[testenv:py36-mysql-pyodbc]
+commands = {[mysql-pyodbc]commands}
+
+[mysql-pypyodbc]
+commands =
+ {[testenv]commands}
+ -mysql -e 'drop database sqlobject_test;'
+ mysql -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;'
+
+[testenv:py26-mysql-pypyodbc]
+commands = {[mysql-pypyodbc]commands}
+
+[testenv:py27-mysql-pypyodbc]
+commands = {[mysql-pypyodbc]commands}
+
+[testenv:py34-mysql-pypyodbc]
+commands = {[mysql-pypyodbc]commands}
+
+[testenv:py35-mysql-pypyodbc]
+commands = {[mysql-pypyodbc]commands}
+
+[testenv:py36-mysql-pypyodbc]
+commands = {[mysql-pypyodbc]commands}
+
# PostgreSQL test environments
[psycopg]
commands =
... 1927 lines suppressed ...
hooks/post-receive
--
SQLObject development repository
|