sqlobject-cvs Mailing List for SQLObject (Page 6)
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
You can subscribe to this list here.
| 2003 |
Jan
|
Feb
|
Mar
(9) |
Apr
(74) |
May
(29) |
Jun
(16) |
Jul
(28) |
Aug
(10) |
Sep
(57) |
Oct
(9) |
Nov
(29) |
Dec
(12) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2004 |
Jan
(7) |
Feb
(14) |
Mar
(6) |
Apr
(3) |
May
(12) |
Jun
(34) |
Jul
(9) |
Aug
(29) |
Sep
(22) |
Oct
(2) |
Nov
(15) |
Dec
(52) |
| 2005 |
Jan
(47) |
Feb
(78) |
Mar
(14) |
Apr
(35) |
May
(33) |
Jun
(16) |
Jul
(26) |
Aug
(63) |
Sep
(40) |
Oct
(96) |
Nov
(96) |
Dec
(123) |
| 2006 |
Jan
(159) |
Feb
(144) |
Mar
(64) |
Apr
(31) |
May
(88) |
Jun
(48) |
Jul
(16) |
Aug
(64) |
Sep
(87) |
Oct
(92) |
Nov
(56) |
Dec
(76) |
| 2007 |
Jan
(94) |
Feb
(103) |
Mar
(126) |
Apr
(123) |
May
(85) |
Jun
(11) |
Jul
(130) |
Aug
(47) |
Sep
(65) |
Oct
(70) |
Nov
(12) |
Dec
(11) |
| 2008 |
Jan
(30) |
Feb
(55) |
Mar
(88) |
Apr
(20) |
May
(50) |
Jun
|
Jul
(38) |
Aug
(1) |
Sep
(9) |
Oct
(5) |
Nov
(6) |
Dec
(39) |
| 2009 |
Jan
(8) |
Feb
(16) |
Mar
(3) |
Apr
(33) |
May
(44) |
Jun
(1) |
Jul
(10) |
Aug
(33) |
Sep
(74) |
Oct
(22) |
Nov
|
Dec
(15) |
| 2010 |
Jan
(28) |
Feb
(22) |
Mar
(46) |
Apr
(29) |
May
(1) |
Jun
(1) |
Jul
(27) |
Aug
(8) |
Sep
(5) |
Oct
(33) |
Nov
(24) |
Dec
(41) |
| 2011 |
Jan
(4) |
Feb
(12) |
Mar
(35) |
Apr
(29) |
May
(19) |
Jun
(16) |
Jul
(32) |
Aug
(25) |
Sep
(5) |
Oct
(11) |
Nov
(21) |
Dec
(12) |
| 2012 |
Jan
(3) |
Feb
(4) |
Mar
(20) |
Apr
(4) |
May
(25) |
Jun
(13) |
Jul
|
Aug
|
Sep
(2) |
Oct
(25) |
Nov
(9) |
Dec
(1) |
| 2013 |
Jan
(6) |
Feb
(8) |
Mar
|
Apr
(10) |
May
(31) |
Jun
(7) |
Jul
(18) |
Aug
(33) |
Sep
(4) |
Oct
(16) |
Nov
|
Dec
(27) |
| 2014 |
Jan
(2) |
Feb
|
Mar
|
Apr
(11) |
May
(39) |
Jun
(8) |
Jul
(11) |
Aug
(4) |
Sep
|
Oct
(27) |
Nov
|
Dec
(71) |
| 2015 |
Jan
(17) |
Feb
(47) |
Mar
(33) |
Apr
|
May
|
Jun
(9) |
Jul
(7) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(8) |
| 2016 |
Jan
(4) |
Feb
(4) |
Mar
|
Apr
|
May
(12) |
Jun
(7) |
Jul
(9) |
Aug
(31) |
Sep
(8) |
Oct
(3) |
Nov
(15) |
Dec
(1) |
| 2017 |
Jan
(13) |
Feb
(7) |
Mar
(14) |
Apr
(8) |
May
(10) |
Jun
(4) |
Jul
(2) |
Aug
(1) |
Sep
|
Oct
(8) |
Nov
(4) |
Dec
(5) |
| 2018 |
Jan
(2) |
Feb
(8) |
Mar
|
Apr
(4) |
May
|
Jun
(6) |
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
(1) |
Dec
|
| 2019 |
Jan
(1) |
Feb
(16) |
Mar
(1) |
Apr
(3) |
May
(5) |
Jun
(1) |
Jul
|
Aug
|
Sep
(2) |
Oct
|
Nov
(1) |
Dec
(3) |
| 2020 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
(1) |
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
(2) |
Nov
|
Dec
(2) |
| 2021 |
Jan
|
Feb
(2) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
(1) |
Dec
|
| 2022 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(6) |
Oct
(1) |
Nov
(1) |
Dec
(4) |
| 2023 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
(3) |
Sep
(2) |
Oct
(2) |
Nov
(4) |
Dec
|
| 2024 |
Jan
|
Feb
(2) |
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
(1) |
Oct
|
Nov
|
Dec
(9) |
| 2025 |
Jan
|
Feb
(4) |
Mar
(2) |
Apr
|
May
|
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
|
From: Oleg B. <no...@so...> - 2017-10-05 16:50:17
|
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 be6d94db711c29c09a945a1d3294dba7d5fdbb25 (commit)
via 1a508237f38b2995eee7637924316ba85875ea22 (commit)
from 8fb6fd7e3dbc0073665929f59fd4230c9af296f3 (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/be6d94db711c29c09a945a1d3294dba7d5fdbb25
commit be6d94db711c29c09a945a1d3294dba7d5fdbb25
Author: Oleg Broytman <ph...@ph...>
Date: Thu Oct 5 19:46:17 2017 +0300
Drivers(SapDB): Convert readme.txt to Unix EOL format (LF)
[skip ci]
diff --git a/sqlobject/maxdb/readme.txt b/sqlobject/maxdb/readme.txt
index 03fd001..e112983 100644
--- a/sqlobject/maxdb/readme.txt
+++ b/sqlobject/maxdb/readme.txt
@@ -1,27 +1,27 @@
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-Author: <ah...@wa...>
-Edigram SA - Paris France
-Tel:0144779400
-
-SAPDBAPI installation
----------------------
-
-The sapdb module can be downloaded from:
-
-Win32
------
-
-ftp://ftp.sap.com/pub/sapdb/bin/win/sapdb-python-win32-7.4.03.33a.zip
-
-
-Linux
------
-
-ftp://ftp.sap.com/pub/sapdb/bin/linux/sapdb-python-linux-i386-7.4.03.33a.tgz
-
-
-Uncompress the archive and add the sapdb directory path to your PYTHONPATH.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Author: <ah...@wa...>
+Edigram SA - Paris France
+Tel:0144779400
+
+SAPDBAPI installation
+---------------------
+
+The sapdb module can be downloaded from:
+
+Win32
+-----
+
+ftp://ftp.sap.com/pub/sapdb/bin/win/sapdb-python-win32-7.4.03.33a.zip
+
+
+Linux
+-----
+
+ftp://ftp.sap.com/pub/sapdb/bin/linux/sapdb-python-linux-i386-7.4.03.33a.tgz
+
+
+Uncompress the archive and add the sapdb directory path to your PYTHONPATH.
http://sourceforge.net/p/sqlobject/sqlobject/ci/1a508237f38b2995eee7637924316ba85875ea22
commit 1a508237f38b2995eee7637924316ba85875ea22
Author: Oleg Broytman <ph...@ph...>
Date: Thu Oct 5 19:46:17 2017 +0300
Drivers(SapDB): Update download URLs
[skip ci]
diff --git a/sqlobject/maxdb/readme.txt b/sqlobject/maxdb/readme.txt
index 3984fbd..03fd001 100644
--- a/sqlobject/maxdb/readme.txt
+++ b/sqlobject/maxdb/readme.txt
@@ -7,24 +7,21 @@ Author: <ah...@wa...>
Edigram SA - Paris France
Tel:0144779400
-SAPDBAPI installation
+SAPDBAPI installation
---------------------
+
The sapdb module can be downloaded from:
Win32
--------
-
-ftp://ftp.sap.com/pub/sapdb/bin/win/sapdb-python-win32-7.4.03.31a.zip
-
-
-Linux
-------
-
-ftp://ftp.sap.com/pub/sapdb/bin/linux/sapdb-python-linux-i386-7.4.03.31a.tgz
+-----
+ftp://ftp.sap.com/pub/sapdb/bin/win/sapdb-python-win32-7.4.03.33a.zip
-uncompress the archive and add the sapdb directory path to your PYTHONPATH.
+Linux
+-----
+ftp://ftp.sap.com/pub/sapdb/bin/linux/sapdb-python-linux-i386-7.4.03.33a.tgz
+Uncompress the archive and add the sapdb directory path to your PYTHONPATH.
-----------------------------------------------------------------------
Summary of changes:
sqlobject/maxdb/readme.txt | 57 ++++++++++++++++++++++------------------------
1 file changed, 27 insertions(+), 30 deletions(-)
hooks/post-receive
--
SQLObject development repository
|
|
From: Oleg B. <no...@so...> - 2017-10-03 23:02:51
|
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 8fb6fd7e3dbc0073665929f59fd4230c9af296f3 (commit)
via e3e522ec5fb30e4dde949828ba233bfe45144171 (commit)
via ec4889a8c1b02cddc90cd62b6ead36e87d4222b0 (commit)
via ea7d88912f90a2bfc23d444554c968bc8515e944 (commit)
via b06e2072ce95012ed04810ae951b08be19115aaa (commit)
via 81c84618c9342f1119e97e83cd046446a7de568c (commit)
via 4446696f44d1172ede047a11d89f94c8672c3e25 (commit)
via e6241109b11e9018ae801e02a7893b6f206c8fb1 (commit)
via 4ae096a649a465d08a1b65a2164a086bfafa95ad (commit)
from 4bf401075edc7addd6a89d1c10d1179c77a3325e (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/8fb6fd7e3dbc0073665929f59fd4230c9af296f3
commit 8fb6fd7e3dbc0073665929f59fd4230c9af296f3
Author: Oleg Broytman <ph...@ph...>
Date: Tue Oct 3 23:00:30 2017 +0300
Tests(CI): Explicitly list python versions
diff --git a/.travis.yml b/.travis.yml
index 3b18a1c..60548f8 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -10,7 +10,7 @@ sudo: required
language: python
python:
- - "3.6"
+ - "2.7"
cache: pip
@@ -24,55 +24,101 @@ addons:
- firebird2.5-super
postgresql: "9.4"
-env:
- - TOXENV=py27-mysqldb
- - TOXENV=py34-mysqlclient
- - TOXENV=py35-mysqlclient
- - TOXENV=py36-mysqlclient
- - TOXENV=py27-mysql-connector
- - TOXENV=py34-mysql-connector
- - TOXENV=py35-mysql-connector
- - TOXENV=py36-mysql-connector
- - TOXENV=py27-mysql-oursql
- - TOXENV=py27-pymysql
- - TOXENV=py34-pymysql
- - TOXENV=py35-pymysql
- - TOXENV=py36-pymysql
- - TOXENV=py27-postgres-psycopg
- - TOXENV=py34-postgres-psycopg
- - TOXENV=py35-postgres-psycopg
- - TOXENV=py36-postgres-psycopg
- - TOXENV=py27-postgres-pygresql
- - TOXENV=py34-postgres-pygresql
- - TOXENV=py35-postgres-pygresql
- - TOXENV=py36-postgres-pygresql
- - TOXENV=py34-pypostgresql
- - TOXENV=py35-pypostgresql
- - TOXENV=py36-pypostgresql
- - TOXENV=py27-postgres-pg8000
- - TOXENV=py34-postgres-pg8000
- - TOXENV=py35-postgres-pg8000
- - TOXENV=py36-postgres-pg8000
- - TOXENV=py27-sqlite
- - TOXENV=py34-sqlite
- - TOXENV=py35-sqlite
- - TOXENV=py36-sqlite
- - TOXENV=py27-sqlite-memory
- - TOXENV=py34-sqlite-memory
- - TOXENV=py35-sqlite-memory
- - TOXENV=py36-sqlite-memory
- - TOXENV=py27-flake8
- - TOXENV=py34-flake8
- - TOXENV=py27-firebird-fdb
- - TOXENV=py34-firebird-fdb
- - TOXENV=py35-firebird-fdb
- - TOXENV=py36-firebird-fdb
- - TOXENV=py27-firebirdsql
- - TOXENV=py34-firebirdsql
- - TOXENV=py35-firebirdsql
- - TOXENV=py36-firebirdsql
-
matrix:
+ include:
+ - python: "2.7"
+ env: TOXENV=py27-mysqldb
+ - python: "3.4"
+ env: TOXENV=py34-mysqlclient
+ - python: "3.5"
+ env: TOXENV=py35-mysqlclient
+ - python: "3.6"
+ env: TOXENV=py36-mysqlclient
+ - python: "2.7"
+ env: TOXENV=py27-mysql-connector
+ - python: "3.4"
+ env: TOXENV=py34-mysql-connector
+ - python: "3.5"
+ env: TOXENV=py35-mysql-connector
+ - python: "3.6"
+ env: TOXENV=py36-mysql-connector
+ - python: "2.7"
+ env: TOXENV=py27-mysql-oursql
+ - python: "2.7"
+ env: TOXENV=py27-pymysql
+ - python: "3.4"
+ env: TOXENV=py34-pymysql
+ - python: "3.5"
+ env: TOXENV=py35-pymysql
+ - python: "3.6"
+ env: TOXENV=py36-pymysql
+ - python: "2.7"
+ env: TOXENV=py27-postgres-psycopg
+ - python: "3.4"
+ env: TOXENV=py34-postgres-psycopg
+ - python: "3.5"
+ env: TOXENV=py35-postgres-psycopg
+ - python: "3.6"
+ env: TOXENV=py36-postgres-psycopg
+ - python: "2.7"
+ env: TOXENV=py27-postgres-pygresql
+ - python: "3.4"
+ env: TOXENV=py34-postgres-pygresql
+ - python: "3.5"
+ env: TOXENV=py35-postgres-pygresql
+ - python: "3.6"
+ env: TOXENV=py36-postgres-pygresql
+ - python: "3.4"
+ env: TOXENV=py34-pypostgresql
+ - python: "3.5"
+ env: TOXENV=py35-pypostgresql
+ - python: "3.6"
+ env: TOXENV=py36-pypostgresql
+ - python: "2.7"
+ env: TOXENV=py27-postgres-pg8000
+ - python: "3.4"
+ env: TOXENV=py34-postgres-pg8000
+ - python: "3.5"
+ env: TOXENV=py35-postgres-pg8000
+ - python: "3.6"
+ env: TOXENV=py36-postgres-pg8000
+ - python: "2.7"
+ env: TOXENV=py27-sqlite
+ - python: "3.4"
+ env: TOXENV=py34-sqlite
+ - python: "3.5"
+ env: TOXENV=py35-sqlite
+ - python: "3.6"
+ env: TOXENV=py36-sqlite
+ - python: "2.7"
+ env: TOXENV=py27-sqlite-memory
+ - python: "3.4"
+ env: TOXENV=py34-sqlite-memory
+ - python: "3.5"
+ env: TOXENV=py35-sqlite-memory
+ - python: "3.6"
+ env: TOXENV=py36-sqlite-memory
+ - python: "2.7"
+ env: TOXENV=py27-flake8
+ - python: "3.4"
+ env: TOXENV=py34-flake8
+ - python: "2.7"
+ env: TOXENV=py27-firebird-fdb
+ - python: "3.4"
+ env: TOXENV=py34-firebird-fdb
+ - python: "3.5"
+ env: TOXENV=py35-firebird-fdb
+ - python: "3.6"
+ env: TOXENV=py36-firebird-fdb
+ - python: "2.7"
+ env: TOXENV=py27-firebirdsql
+ - python: "3.4"
+ env: TOXENV=py34-firebirdsql
+ - python: "3.5"
+ env: TOXENV=py35-firebirdsql
+ - python: "3.6"
+ env: TOXENV=py36-firebirdsql
+
allow_failures:
- env: TOXENV=py27-postgres-pg8000
- env: TOXENV=py27-firebird-fdb
@@ -83,6 +129,7 @@ matrix:
- env: TOXENV=py34-firebirdsql
- env: TOXENV=py35-firebirdsql
- env: TOXENV=py36-firebirdsql
+
fast_finish: true
before_install:
http://sourceforge.net/p/sqlobject/sqlobject/ci/e3e522ec5fb30e4dde949828ba233bfe45144171
commit e3e522ec5fb30e4dde949828ba233bfe45144171
Author: Shailesh Mungikar <sha...@dr...>
Date: Sat Sep 23 16:40:54 2017 +0530
Fix for #139: autoreconnect does not work with pymysql driver
diff --git a/ANNOUNCE.rst b/ANNOUNCE.rst
index 893d397..31ffed8 100644
--- a/ANNOUNCE.rst
+++ b/ANNOUNCE.rst
@@ -22,7 +22,7 @@ I'm pleased to announce version 3.4.1, the first bugfix release of branch
What's new in SQLObject
=======================
-Contributor for this release is
+Contributor for this release is Shailesh Mungikar.
For a more complete list, please see the news:
http://sqlobject.org/News.html
diff --git a/docs/Authors.rst b/docs/Authors.rst
index cf35dfc..1d0a063 100644
--- a/docs/Authors.rst
+++ b/docs/Authors.rst
@@ -34,6 +34,7 @@ Contributions have been made by:
* Gregor Horvath <gh at gregor-horvath.com>
* Nathan Edwards <nje5 at georgetown.edu>
* Lutz Steinborn <l.steinborn at 4c-gmbh.de>
+* Shailesh Mungikar <shailesh.mungikar at druva.com>
* Oleg Broytman <ph...@ph...>
.. image:: https://sourceforge.net/sflogo.php?group_id=74338&type=10
diff --git a/docs/News.rst b/docs/News.rst
index 22094c4..a2e2b25 100644
--- a/docs/News.rst
+++ b/docs/News.rst
@@ -16,6 +16,8 @@ Drivers
* Add support for `pg8000 <https://pypi.python.org/pypi/pg8000>`_
PostgreSQL driver (from git). There is a minor problem with Python 2.7.
+* Fix autoreconnect with pymysql driver. Contributed by Shailesh Mungikar.
+
Tests
-----
diff --git a/sqlobject/mysql/mysqlconnection.py b/sqlobject/mysql/mysqlconnection.py
index eb56223..bcda054 100644
--- a/sqlobject/mysql/mysqlconnection.py
+++ b/sqlobject/mysql/mysqlconnection.py
@@ -206,6 +206,13 @@ class MySQLConnection(DBAPI):
# mysql-connector has autocommit as a property
conn.autocommit = auto
+ def _force_reconnect(self, conn):
+ if self.driver.lower() == 'pymysql':
+ conn.ping(True)
+ self._setAutoCommit(conn, bool(self.autoCommit))
+ if self.dbEncoding:
+ conn.query("SET NAMES %s" % self.dbEncoding)
+
def _executeRetry(self, conn, cursor, query):
if self.debug:
self.printDebug(conn, query, 'QueryR')
@@ -225,6 +232,8 @@ class MySQLConnection(DBAPI):
# reconnect flag must be set when making the connection to indicate
# that autoreconnecting is desired. In MySQLdb 1.2.2 or newer this is
# done by calling ping(True) on the connection.
+ # PyMySQL needs explicit reconnect
+ # each time we detect connection timeout.
for count in range(3):
try:
return cursor.execute(query)
@@ -235,6 +244,8 @@ class MySQLConnection(DBAPI):
raise dberrors.OperationalError(ErrorMessage(e))
if self.debug:
self.printDebug(conn, str(e), 'ERROR')
+ if self.driver.lower() == 'pymysql':
+ self._force_reconnect(conn)
else:
raise dberrors.OperationalError(ErrorMessage(e))
except self.module.IntegrityError as e:
http://sourceforge.net/p/sqlobject/sqlobject/ci/ec4889a8c1b02cddc90cd62b6ead36e87d4222b0
commit ec4889a8c1b02cddc90cd62b6ead36e87d4222b0
Author: Oleg Broytman <ph...@ph...>
Date: Wed Aug 23 09:46:12 2017 +0300
Tests(CI): Fix bugs in py-postgresql at AppVeyor
diff --git a/docs/News.rst b/docs/News.rst
index 863d4be..22094c4 100644
--- a/docs/News.rst
+++ b/docs/News.rst
@@ -21,6 +21,9 @@ Tests
* Add tests for PyGreSQL, py-postgresql and pg8000 at AppVeyor.
+* Fixed bugs in py-postgresql at AppVeyor. SQLObject requires
+ the latest version of the driver from git.
+
SQLObject 3.4.0
===============
diff --git a/tox.ini b/tox.ini
index 7c5d0ee..51231c3 100644
--- a/tox.ini
+++ b/tox.ini
@@ -25,7 +25,7 @@ deps =
pymysql: pymysql
postgres-psycopg: psycopg2
postgres-pygresql: pygresql
- pypostgresql: py-postgresql
+ pypostgresql: git+https://github.com/sqlobject/py-postgresql.git@fix_w32#egg=pypostgresql
postgres-pg8000: git+https://github.com/mfenniak/pg8000.git#egg=pg8000
pyodbc: pyodbc
pypyodbc: pypyodbc
http://sourceforge.net/p/sqlobject/sqlobject/ci/ea7d88912f90a2bfc23d444554c968bc8515e944
commit ea7d88912f90a2bfc23d444554c968bc8515e944
Author: Oleg Broytman <ph...@ph...>
Date: Sat Aug 19 03:33:36 2017 +0300
Feat(setup): Add keywords and platforms
diff --git a/setup.py b/setup.py
index f9fe802..cba0bf3 100755
--- a/setup.py
+++ b/setup.py
@@ -121,7 +121,9 @@ and `GitHub <https://github.com/sqlobject>`_.
maintainer_email="ph...@ph...",
url="http://sqlobject.org/",
download_url="https://pypi.python.org/pypi/SQLObject/%s" % version,
+ keywords=["sql", "orm", "object-relational mapper"],
license="LGPL",
+ platforms="Any",
packages=["sqlobject"] +
['sqlobject.%s' % package for package in subpackages],
scripts=["scripts/sqlobject-admin", "scripts/sqlobject-convertOldURI"],
http://sourceforge.net/p/sqlobject/sqlobject/ci/b06e2072ce95012ed04810ae951b08be19115aaa
commit b06e2072ce95012ed04810ae951b08be19115aaa
Author: Oleg Broytman <ph...@ph...>
Date: Fri Aug 18 22:59:16 2017 +0300
Tests(CI): Remove PyGreSQL tests with 32-bit Python
32-bit PyGreSQL requires 32-bit libraries for PostgreSQL,
but AppVeyor has only 64-bit Pg preinstalled.
diff --git a/appveyor.yml b/appveyor.yml
index 0b76195..12ae77d 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -114,41 +114,21 @@ environment:
PYTHON_HOME: "C:\\Python36-x64"
db: postgresql
- TOX_ENV: "py27-postgres-pygresql-w32"
- PYTHON_ARCH: "32"
- PYTHON_VERSION: "2.7"
- PYTHON_HOME: "C:\\Python27"
- db: postgresql
- - TOX_ENV: "py27-postgres-pygresql-w32"
PYTHON_ARCH: "64"
PYTHON_VERSION: "2.7"
PYTHON_HOME: "C:\\Python27-x64"
db: postgresql
- TOX_ENV: "py34-postgres-pygresql-w32"
- PYTHON_ARCH: "32"
- PYTHON_VERSION: "3.4"
- PYTHON_HOME: "C:\\Python34"
- db: postgresql
- - TOX_ENV: "py34-postgres-pygresql-w32"
PYTHON_ARCH: "64"
PYTHON_VERSION: "3.4"
PYTHON_HOME: "C:\\Python34-x64"
db: postgresql
- TOX_ENV: "py35-postgres-pygresql-w32"
- PYTHON_ARCH: "32"
- PYTHON_VERSION: "3.5"
- PYTHON_HOME: "C:\\Python35"
- db: postgresql
- - TOX_ENV: "py35-postgres-pygresql-w32"
PYTHON_ARCH: "64"
PYTHON_VERSION: "3.5"
PYTHON_HOME: "C:\\Python35-x64"
db: postgresql
- TOX_ENV: "py36-postgres-pygresql-w32"
- PYTHON_ARCH: "32"
- PYTHON_VERSION: "3.6"
- PYTHON_HOME: "C:\\Python36"
- db: postgresql
- - TOX_ENV: "py36-postgres-pygresql-w32"
PYTHON_ARCH: "64"
PYTHON_VERSION: "3.6"
PYTHON_HOME: "C:\\Python36-x64"
http://sourceforge.net/p/sqlobject/sqlobject/ci/81c84618c9342f1119e97e83cd046446a7de568c
commit 81c84618c9342f1119e97e83cd046446a7de568c
Author: Oleg Broytman <ph...@ph...>
Date: Fri Aug 18 22:59:16 2017 +0300
Tests(CI): Reorder env vars in appveyor.yml
Reorder environment variables in appveyor.yml to make them more visible
in the web interface.
diff --git a/appveyor.yml b/appveyor.yml
index 6573e06..0b76195 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -33,254 +33,254 @@ environment:
CMD_IN_ENV: "cmd /E:ON /V:ON /C .\\run_with_env.cmd"
matrix:
- - PYTHON_HOME: "C:\\Python27"
- PYTHON_VERSION: "2.7"
+ - TOX_ENV: "py27-mssql-pyodbc-w32"
PYTHON_ARCH: "32"
+ PYTHON_VERSION: "2.7"
+ PYTHON_HOME: "C:\\Python27"
db: mssql2014
- TOX_ENV: "py27-mssql-pyodbc-w32"
- - PYTHON_HOME: "C:\\Python34-x64"
- PYTHON_VERSION: "3.4"
+ - TOX_ENV: "py34-mssql-pyodbc-w32"
PYTHON_ARCH: "64"
+ PYTHON_VERSION: "3.4"
+ PYTHON_HOME: "C:\\Python34-x64"
db: mssql2014
- TOX_ENV: "py34-mssql-pyodbc-w32"
- - PYTHON_HOME: "C:\\Python27"
- PYTHON_VERSION: "2.7"
+ - TOX_ENV: "py27-mysql-connector-w32"
PYTHON_ARCH: "32"
+ PYTHON_VERSION: "2.7"
+ PYTHON_HOME: "C:\\Python27"
db: mysql
- TOX_ENV: "py27-mysql-connector-w32"
- - PYTHON_HOME: "C:\\Python34"
- PYTHON_VERSION: "3.4"
+ - TOX_ENV: "py34-mysql-connector-w32"
PYTHON_ARCH: "32"
+ PYTHON_VERSION: "3.4"
+ PYTHON_HOME: "C:\\Python34"
db: mysql
- TOX_ENV: "py34-mysql-connector-w32"
- - PYTHON_HOME: "C:\\Python35"
- PYTHON_VERSION: "3.5"
+ - TOX_ENV: "py35-mysql-connector-w32"
PYTHON_ARCH: "32"
+ PYTHON_VERSION: "3.5"
+ PYTHON_HOME: "C:\\Python35"
db: mysql
- TOX_ENV: "py35-mysql-connector-w32"
- - PYTHON_HOME: "C:\\Python36"
- PYTHON_VERSION: "3.6"
+ - TOX_ENV: "py36-mysql-connector-w32"
PYTHON_ARCH: "32"
+ PYTHON_VERSION: "3.6"
+ PYTHON_HOME: "C:\\Python36"
db: mysql
- TOX_ENV: "py36-mysql-connector-w32"
- - PYTHON_HOME: "C:\\Python27-x64"
- PYTHON_VERSION: "2.7"
+ - TOX_ENV: "py27-mysql-pyodbc-w32"
PYTHON_ARCH: "64"
+ PYTHON_VERSION: "2.7"
+ PYTHON_HOME: "C:\\Python27-x64"
db: mysql
- TOX_ENV: "py27-mysql-pyodbc-w32"
- - PYTHON_HOME: "C:\\Python34-x64"
- PYTHON_VERSION: "3.4"
+ - TOX_ENV: "py34-mysql-pyodbc-w32"
PYTHON_ARCH: "64"
+ PYTHON_VERSION: "3.4"
+ PYTHON_HOME: "C:\\Python34-x64"
db: mysql
- TOX_ENV: "py34-mysql-pyodbc-w32"
- - PYTHON_HOME: "C:\\Python27"
- PYTHON_VERSION: "2.7"
+ - TOX_ENV: "py27-postgres-psycopg-w32"
PYTHON_ARCH: "32"
- db: postgresql
- TOX_ENV: "py27-postgres-psycopg-w32"
- - PYTHON_HOME: "C:\\Python27-x64"
PYTHON_VERSION: "2.7"
+ PYTHON_HOME: "C:\\Python27"
+ db: postgresql
+ - TOX_ENV: "py27-postgres-psycopg-w32"
PYTHON_ARCH: "64"
+ PYTHON_VERSION: "2.7"
+ PYTHON_HOME: "C:\\Python27-x64"
db: postgresql
- TOX_ENV: "py27-postgres-psycopg-w32"
- - PYTHON_HOME: "C:\\Python34"
- PYTHON_VERSION: "3.4"
+ - TOX_ENV: "py34-postgres-psycopg-w32"
PYTHON_ARCH: "32"
- db: postgresql
... 897 lines suppressed ...
hooks/post-receive
--
SQLObject development repository
|
|
From: Oleg B. <no...@so...> - 2017-08-01 23:09:06
|
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
discards ade481a3f94438a26ba35dc8248a6d84eb38de65 (commit)
via 48ddb3a762f62b03843db11a9d3fc878ef2038fd (commit)
via 044e33067682d9fb96345fde28f2761a85005b14 (commit)
This update added new revisions after undoing existing revisions. That is
to say, the old revision is not a strict subset of the new revision. This
situation occurs when you --force push a change and generate a repository
containing something like this:
* -- * -- B -- O -- O -- O (ade481a3f94438a26ba35dc8248a6d84eb38de65)
\
N -- N -- N (48ddb3a762f62b03843db11a9d3fc878ef2038fd)
When this happens we assume that you've already had alert emails for all
of the O revisions, and so we here report only the revisions in the N
branch from the common base, B.
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/48ddb3a762f62b03843db11a9d3fc878ef2038fd
commit 48ddb3a762f62b03843db11a9d3fc878ef2038fd
Author: Oleg Broytman <ph...@ph...>
Date: Wed Aug 2 01:32:11 2017 +0300
Tests: Fix a bug with sqlite-memory
Rollback transaction and close connection.
diff --git a/ANNOUNCE.rst b/ANNOUNCE.rst
index 9fd03d3..f11cfef 100644
--- a/ANNOUNCE.rst
+++ b/ANNOUNCE.rst
@@ -22,7 +22,7 @@ I'm pleased to announce version 3.4.1, the first bugfix release of branch
What's new in SQLObject
=======================
-Contributor for this release is
+Contributor for this release is Dr. Neil Muller.
For a more complete list, please see the news:
http://sqlobject.org/News.html
diff --git a/docs/News.rst b/docs/News.rst
index 540b47d..16bc6e0 100644
--- a/docs/News.rst
+++ b/docs/News.rst
@@ -44,6 +44,9 @@ Drivers (work in progress)
Tests
-----
+* Fix a bug with sqlite-memory: rollback transaction and close connection.
+ The solution was found by Dr. Neil Muller.
+
* Use remove-old-files.py from ppu to cleanup pip cache
at Travis and AppVeyor.
diff --git a/sqlobject/tests/test_transactions.py b/sqlobject/tests/test_transactions.py
index 0fbac42..b52ad52 100644
--- a/sqlobject/tests/test_transactions.py
+++ b/sqlobject/tests/test_transactions.py
@@ -50,7 +50,8 @@ def test_transaction():
def test_transaction_commit_sync():
setupClass(SOTestSOTrans)
- trans = SOTestSOTrans._connection.transaction()
+ connection = SOTestSOTrans._connection
+ trans = connection.transaction()
try:
SOTestSOTrans(name='bob')
bOut = SOTestSOTrans.byName('bob')
@@ -60,14 +61,16 @@ def test_transaction_commit_sync():
trans.commit()
assert bOut.name == 'robert'
finally:
- SOTestSOTrans._connection.autoCommit = True
+ trans.rollback()
+ connection.autoCommit = True
+ connection.close()
def test_transaction_delete(close=False):
setupClass(SOTestSOTrans)
connection = SOTestSOTrans._connection
if (connection.dbName == 'sqlite') and connection._memory:
- pytest.skip("The following test requires a different connection")
+ pytest.skip("The test doesn't work with sqlite memory connection")
trans = connection.transaction()
try:
SOTestSOTrans(name='bob')
http://sourceforge.net/p/sqlobject/sqlobject/ci/044e33067682d9fb96345fde28f2761a85005b14
commit 044e33067682d9fb96345fde28f2761a85005b14
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..540b47d 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):
-----------------------------------------------------------------------
Summary of changes:
ANNOUNCE.rst | 2 +-
docs/News.rst | 9 ++++++---
sqlobject/tests/test_transactions.py | 9 ++++++---
3 files changed, 13 insertions(+), 7 deletions(-)
hooks/post-receive
--
SQLObject development repository
|
|
From: Oleg B. <no...@so...> - 2017-07-30 17:13:10
|
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
|
|
From: Oleg B. <no...@so...> - 2017-07-05 09:01:22
|
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 78f1bc56ba2f32c28af86611ceb5a0e991544f26 (commit)
from a5531c8d0b499b82ed714aa4971b14b41ae7610c (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/78f1bc56ba2f32c28af86611ceb5a0e991544f26
commit 78f1bc56ba2f32c28af86611ceb5a0e991544f26
Author: Oleg Broytman <ph...@rn...>
Date: Wed Jul 5 12:00:52 2017 +0300
Add requirements_dev.txt
[skip ci]
diff --git a/devscripts/requirements/requirements_dev.txt b/devscripts/requirements/requirements_dev.txt
new file mode 100644
index 0000000..c7dc312
--- /dev/null
+++ b/devscripts/requirements/requirements_dev.txt
@@ -0,0 +1,4 @@
+-r requirements.txt
+
+wheel
+twine
-----------------------------------------------------------------------
Summary of changes:
.../requirements/{requirements_docs.txt => requirements_dev.txt} | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
copy devscripts/requirements/{requirements_docs.txt => requirements_dev.txt} (63%)
hooks/post-receive
--
SQLObject development repository
|
|
From: Oleg B. <no...@so...> - 2017-06-28 22:36:43
|
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 a5531c8d0b499b82ed714aa4971b14b41ae7610c (commit)
from 2a85338c232bda8c4c0ecb50266491c5a04d414c (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/a5531c8d0b499b82ed714aa4971b14b41ae7610c
commit a5531c8d0b499b82ed714aa4971b14b41ae7610c
Author: Oleg Broytman <ph...@ph...>
Date: Thu Jun 29 01:09:54 2017 +0300
Add test_csvimport.py
diff --git a/docs/News.rst b/docs/News.rst
index 3810aa8..e2a430c 100644
--- a/docs/News.rst
+++ b/docs/News.rst
@@ -38,6 +38,9 @@ Tests
* Use remove-old-files.py from ppu to cleanup pip cache
at Travis and AppVeyor.
+* Add test_csvimport.py more as an example how to use load_csv
+ from sqlobject.util.csvimport.
+
SQLObject 3.3.0
===============
diff --git a/sqlobject/tests/test_csvimport.py b/sqlobject/tests/test_csvimport.py
new file mode 100644
index 0000000..990f450
--- /dev/null
+++ b/sqlobject/tests/test_csvimport.py
@@ -0,0 +1,21 @@
+import csv
+from datetime import datetime
+from sqlobject.util.csvimport import load_csv
+
+csv_data = """\
+name:str,age:datetime,value:int
+Test,2000-01-01 21:44:33,42"""
+
+
+def test_load_csv():
+ loaded = load_csv(csv.reader(csv_data.split('\n')),
+ default_class='SQLObject')
+ assert loaded == {
+ 'SQLObject': [
+ {
+ 'age': datetime(2000, 1, 1, 21, 44, 33),
+ 'name': 'Test',
+ 'value': 42
+ }
+ ]
+ }
-----------------------------------------------------------------------
Summary of changes:
docs/News.rst | 3 +++
sqlobject/tests/test_csvimport.py | 21 +++++++++++++++++++++
2 files changed, 24 insertions(+)
create mode 100644 sqlobject/tests/test_csvimport.py
hooks/post-receive
--
SQLObject development repository
|
|
From: Oleg B. <no...@so...> - 2017-06-17 19:41:08
|
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 2a85338c232bda8c4c0ecb50266491c5a04d414c (commit)
from 53a22ac8a7222a86f4638cc00f24d19169838233 (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/2a85338c232bda8c4c0ecb50266491c5a04d414c
commit 2a85338c232bda8c4c0ecb50266491c5a04d414c
Author: Oleg Broytman <ph...@ph...>
Date: Sat Jun 17 20:27:52 2017 +0300
Use ppu to cleanup pip cache
Use remove-old-files.py from ppu to cleanup pip cache at Travis and AppVeyor.
diff --git a/.travis.yml b/.travis.yml
index aa7286a..95b8883 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -101,7 +101,7 @@ before_install:
sudo gsec -user sysdba -pass masterkey -add test -pw test;
fi
-install: travis_retry pip install tox coveralls codecov
+install: travis_retry pip install tox coveralls codecov ppu
script: tox -e ${TOXENV}
@@ -109,3 +109,6 @@ after_success:
- cd sqlobject
- coveralls
- codecov
+
+before_cache:
+ - remove-old-files.py -o 180 ~/.cache/pip
diff --git a/appveyor.yml b/appveyor.yml
index eff4614..ea3779b 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -245,7 +245,7 @@ install:
- "python --version"
- "python -c \"import struct; print(struct.calcsize('P') * 8)\""
- "pip --version"
- - "pip install tox"
+ - "pip install tox ppu"
# List ODBC drivers
- ps: Get-OdbcDriver -Platform 32-bit | Select-Object -ExpandProperty Name
- ps: Get-OdbcDriver -Platform 64-bit | Select-Object -ExpandProperty Name
@@ -270,3 +270,6 @@ build: false
test_script:
- "%CMD_IN_ENV% tox -e %TOX_ENV%"
+
+after_test:
+ - "remove-old-files.py -o 180 %LOCALAPPDATA%\\pip\\Cache"
diff --git a/docs/News.rst b/docs/News.rst
index c14515a..3810aa8 100644
--- a/docs/News.rst
+++ b/docs/News.rst
@@ -10,9 +10,21 @@ News
SQLObject 3.4.0 (master)
========================
+Features
+--------
+
* Python 2.6 is no longer supported. The minimal supported version is
Python 2.7.
+Minor features
+--------------
+
+* Use base64.b64encode/b64decode instead of deprecated
+ encodestring/decodestring.
+
+Drivers (work in progress)
+--------------------------
+
* Encode binary values for py-postgresql driver. This fixes the
last remaining problems with the driver.
@@ -20,8 +32,11 @@ SQLObject 3.4.0 (master)
* List all drivers in extras_require in setup.py.
-* Use base64.b64encode/b64decode instead of deprecated
- encodestring/decodestring.
+Tests
+-----
+
+* Use remove-old-files.py from ppu to cleanup pip cache
+ at Travis and AppVeyor.
SQLObject 3.3.0
===============
-----------------------------------------------------------------------
Summary of changes:
.travis.yml | 5 ++++-
appveyor.yml | 5 ++++-
docs/News.rst | 19 +++++++++++++++++--
3 files changed, 25 insertions(+), 4 deletions(-)
hooks/post-receive
--
SQLObject development repository
|
|
From: Oleg B. <no...@so...> - 2017-06-06 22:12:18
|
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
discards cec65e54e9994cb70bda35c2ebe483ca2b65ed21 (commit)
via 53a22ac8a7222a86f4638cc00f24d19169838233 (commit)
This update added new revisions after undoing existing revisions. That is
to say, the old revision is not a strict subset of the new revision. This
situation occurs when you --force push a change and generate a repository
containing something like this:
* -- * -- B -- O -- O -- O (cec65e54e9994cb70bda35c2ebe483ca2b65ed21)
\
N -- N -- N (53a22ac8a7222a86f4638cc00f24d19169838233)
When this happens we assume that you've already had alert emails for all
of the O revisions, and so we here report only the revisions in the N
branch from the common base, B.
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/53a22ac8a7222a86f4638cc00f24d19169838233
commit 53a22ac8a7222a86f4638cc00f24d19169838233
Author: Oleg Broytman <ph...@ph...>
Date: Wed Jun 7 01:00:17 2017 +0300
Docs: I started to answer questions on StackOverflow
[skip ci]
diff --git a/ANNOUNCE.rst b/ANNOUNCE.rst
index 3d68fe4..9fd03d3 100644
--- a/ANNOUNCE.rst
+++ b/ANNOUNCE.rst
@@ -59,6 +59,9 @@ https://pypi.python.org/pypi/SQLObject/3.4.0a0.dev20170507
News and changes:
http://sqlobject.org/News.html
+StackOverflow:
+https://stackoverflow.com/questions/tagged/sqlobject
+
Example
=======
diff --git a/docs/community.rst b/docs/community.rst
index 91c0ae0..c312385 100644
--- a/docs/community.rst
+++ b/docs/community.rst
@@ -22,6 +22,9 @@ contributing you should read the `Developer Guide <DeveloperGuide.html>`_.
The `Author List <Authors.html>`_ tries to list all the major
contributors.
+Questions can also be asked and answered on `StackOverflow
+<https://stackoverflow.com/questions/tagged/sqlobject>`_.
+
One can also contribute to `community-editable recipe/documentation site
<https://sites.google.com/site/sqlobject/>`_.
-----------------------------------------------------------------------
Summary of changes:
docs/community.rst | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
hooks/post-receive
--
SQLObject development repository
|
|
From: Oleg B. <no...@so...> - 2017-06-06 22:08:06
|
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 cec65e54e9994cb70bda35c2ebe483ca2b65ed21 (commit)
from e5be8841dad1fbad22e3169ecaaf4a6a8b5dcd89 (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/cec65e54e9994cb70bda35c2ebe483ca2b65ed21
commit cec65e54e9994cb70bda35c2ebe483ca2b65ed21
Author: Oleg Broytman <ph...@ph...>
Date: Wed Jun 7 01:00:17 2017 +0300
Docs: I started to answer questions on StackOverflow
[skip ci]
diff --git a/ANNOUNCE.rst b/ANNOUNCE.rst
index 3d68fe4..9fd03d3 100644
--- a/ANNOUNCE.rst
+++ b/ANNOUNCE.rst
@@ -59,6 +59,9 @@ https://pypi.python.org/pypi/SQLObject/3.4.0a0.dev20170507
News and changes:
http://sqlobject.org/News.html
+StackOverflow:
+https://stackoverflow.com/questions/tagged/sqlobject
+
Example
=======
diff --git a/docs/community.rst b/docs/community.rst
index 91c0ae0..1975e88 100644
--- a/docs/community.rst
+++ b/docs/community.rst
@@ -22,6 +22,9 @@ contributing you should read the `Developer Guide <DeveloperGuide.html>`_.
The `Author List <Authors.html>`_ tries to list all the major
contributors.
+Questions can also be asked and answered on `StackOverflow
+<https://stackoverflow.com/questions/tagged/sqlobject>`.
+
One can also contribute to `community-editable recipe/documentation site
<https://sites.google.com/site/sqlobject/>`_.
-----------------------------------------------------------------------
Summary of changes:
ANNOUNCE.rst | 3 +++
docs/community.rst | 3 +++
2 files changed, 6 insertions(+)
hooks/post-receive
--
SQLObject development repository
|
|
From: Oleg B. <no...@so...> - 2017-05-29 21:57:25
|
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 e5be8841dad1fbad22e3169ecaaf4a6a8b5dcd89 (commit)
via be2c6ade34e0227f664685a3462b3ee905dff167 (commit)
via ecccd99cbf60031312e48ebd6736bf8235dca042 (commit)
via 15a61fb807aed1a78775da70fec3b57ed0260339 (commit)
via 96ddc26c7744a6998bfdffe14d214a5d7d0a2159 (commit)
from e70c2760b962d00fc468afcd7c8224057d9c6b00 (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/e5be8841dad1fbad22e3169ecaaf4a6a8b5dcd89
commit e5be8841dad1fbad22e3169ecaaf4a6a8b5dcd89
Author: Oleg Broytman <ph...@ph...>
Date: Tue May 30 00:28:02 2017 +0300
Tests for sqlite-memory at Travis somehow work now
diff --git a/.travis.yml b/.travis.yml
index bf94aa4..aa7286a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -74,10 +74,6 @@ matrix:
- env: TOXENV=py34-postgres-pygresql
- env: TOXENV=py35-postgres-pygresql
- env: TOXENV=py36-postgres-pygresql
- - 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/be2c6ade34e0227f664685a3462b3ee905dff167
commit be2c6ade34e0227f664685a3462b3ee905dff167
Author: Oleg Broytman <ph...@ph...>
Date: Mon May 29 22:46:33 2017 +0300
Change binary encoding for ODBC drivers
diff --git a/sqlobject/postgres/pgconnection.py b/sqlobject/postgres/pgconnection.py
index 76a809b..4e33185 100644
--- a/sqlobject/postgres/pgconnection.py
+++ b/sqlobject/postgres/pgconnection.py
@@ -93,6 +93,8 @@ class PostgresConnection(DBAPI):
elif driver in ('py-postgresql', 'pypostgresql'):
registerConverter(type(self.module.Binary(b'')),
PypostgresBinaryConverter)
+ elif driver in ('odbc', 'pyodbc', 'pypyodbc'):
+ registerConverter(bytearray, OdbcBinaryConverter)
self.db = db
self.user = user
@@ -548,3 +550,11 @@ def escape_bytea(value):
def PypostgresBinaryConverter(value, db):
assert db == 'postgres'
return sqlrepr(escape_bytea(value.decode('latin1')), db)
+
+
+def OdbcBinaryConverter(value, db):
+ assert db == 'postgres'
+ value = bytes(value)
+ if not PY2:
+ value = value.decode('latin1')
+ return value
http://sourceforge.net/p/sqlobject/sqlobject/ci/ecccd99cbf60031312e48ebd6736bf8235dca042
commit ecccd99cbf60031312e48ebd6736bf8235dca042
Author: Oleg Broytman <ph...@ph...>
Date: Mon May 29 22:20:06 2017 +0300
Encode binary values for py-postgresql driver
diff --git a/.travis.yml b/.travis.yml
index 87812e2..bf94aa4 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -74,9 +74,6 @@ matrix:
- env: TOXENV=py34-postgres-pygresql
- env: TOXENV=py35-postgres-pygresql
- env: TOXENV=py36-postgres-pygresql
- - 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
diff --git a/docs/News.rst b/docs/News.rst
index 451c9ba..c14515a 100644
--- a/docs/News.rst
+++ b/docs/News.rst
@@ -13,6 +13,9 @@ SQLObject 3.4.0 (master)
* Python 2.6 is no longer supported. The minimal supported version is
Python 2.7.
+* Encode binary values for py-postgresql driver. This fixes the
+ last remaining problems with the driver.
+
* Encode/decode binary values for PyGreSQL driver.
* List all drivers in extras_require in setup.py.
diff --git a/sqlobject/postgres/pgconnection.py b/sqlobject/postgres/pgconnection.py
index 855a5cf..76a809b 100644
--- a/sqlobject/postgres/pgconnection.py
+++ b/sqlobject/postgres/pgconnection.py
@@ -2,7 +2,7 @@ import re
from sqlobject import col
from sqlobject import dberrors
from sqlobject import sqlbuilder
-from sqlobject.compat import PY2, unicode_type
+from sqlobject.compat import PY2
from sqlobject.converters import registerConverter, sqlrepr
from sqlobject.dbconnection import DBAPI
@@ -86,15 +86,13 @@ class PostgresConnection(DBAPI):
registerConverter(type(self.module.Binary('')),
PsycoBinaryConverter)
elif driver == 'pygresql':
- from pg import escape_bytea
+ from pg import escape_bytea as pg_escape_bytea
self.createBinary = \
- lambda value, escape_bytea=escape_bytea: escape_bytea(value)
- elif type(self.module.Binary) in (
- type, type(PostgresBinaryConverter)) and \
- type(self.module.Binary(b'')) not in (bytes, unicode_type):
- # Register a converter for Binary type.
+ lambda value, pg_escape_bytea=pg_escape_bytea: \
+ pg_escape_bytea(value)
+ elif driver in ('py-postgresql', 'pypostgresql'):
registerConverter(type(self.module.Binary(b'')),
- PostgresBinaryConverter)
+ PypostgresBinaryConverter)
self.db = db
self.user = user
@@ -541,11 +539,12 @@ def PsycoBinaryConverter(value, db):
return str(value)
-if PY2:
- def PostgresBinaryConverter(value, db):
- assert db == 'postgres'
- return sqlrepr(bytes(value), db)
-else:
- def PostgresBinaryConverter(value, db):
- assert db == 'postgres'
- return sqlrepr(value.decode('latin1'), db)
+def escape_bytea(value):
+ return ''.join(
+ ['\\' + (x[2:].rjust(3, '0')) for x in (oct(ord(c)) for c in value)]
+ )
+
+
+def PypostgresBinaryConverter(value, db):
+ assert db == 'postgres'
+ return sqlrepr(escape_bytea(value.decode('latin1')), db)
http://sourceforge.net/p/sqlobject/sqlobject/ci/15a61fb807aed1a78775da70fec3b57ed0260339
commit 15a61fb807aed1a78775da70fec3b57ed0260339
Author: Oleg Broytman <ph...@ph...>
Date: Mon May 29 22:42:29 2017 +0300
Use b64encode/b64decode instead of deprecated encodestring/decodestring
diff --git a/docs/News.rst b/docs/News.rst
index c16216e..451c9ba 100644
--- a/docs/News.rst
+++ b/docs/News.rst
@@ -17,6 +17,8 @@ SQLObject 3.4.0 (master)
* List all drivers in extras_require in setup.py.
+* Use base64.b64encode/b64decode instead of deprecated
+ encodestring/decodestring.
SQLObject 3.3.0
===============
diff --git a/sqlobject/sqlite/sqliteconnection.py b/sqlobject/sqlite/sqliteconnection.py
index 70fae63..93ad429 100644
--- a/sqlobject/sqlite/sqliteconnection.py
+++ b/sqlobject/sqlite/sqliteconnection.py
@@ -59,8 +59,8 @@ class SQLiteConnection(DBAPI):
raise ImportError(
'Cannot find an SQLite driver, tried %s' % drivers)
if self.using_sqlite2:
- sqlite.encode = base64.encodestring
- sqlite.decode = base64.decodestring
+ sqlite.encode = base64.b64encode
+ sqlite.decode = base64.b64decode
self.module = sqlite
self.filename = filename # full path to sqlite-db-file
self._memory = filename == ':memory:'
http://sourceforge.net/p/sqlobject/sqlobject/ci/96ddc26c7744a6998bfdffe14d214a5d7d0a2159
commit 96ddc26c7744a6998bfdffe14d214a5d7d0a2159
Author: Oleg Broytman <ph...@ph...>
Date: Mon May 29 23:07:18 2017 +0300
List all drivers in extras_require in setup.py
diff --git a/docs/News.rst b/docs/News.rst
index 0c10a22..c16216e 100644
--- a/docs/News.rst
+++ b/docs/News.rst
@@ -15,6 +15,9 @@ SQLObject 3.4.0 (master)
* Encode/decode binary values for PyGreSQL driver.
+* List all drivers in extras_require in setup.py.
+
+
SQLObject 3.3.0
===============
diff --git a/setup.py b/setup.py
index ad3814c..2e22194 100755
--- a/setup.py
+++ b/setup.py
@@ -27,24 +27,54 @@ if is_setuptools:
[paste.filter_app_factory]
main = sqlobject.wsgi_middleware:make_middleware
"""
- install_requires = []
if (sys.version_info[:2] == (2, 7)):
- install_requires.append("FormEncode>=1.1.1,!=1.3.0")
+ PY2 = True
elif (sys.version_info[0] == 3) and (sys.version_info[:2] >= (3, 4)):
- install_requires.append("FormEncode>=1.3.1")
+ PY2 = False
else:
raise ImportError("SQLObject requires Python 2.7 or 3.4+")
+
+ kw['install_requires'] = install_requires = []
+ if PY2:
+ install_requires.append("FormEncode>=1.1.1,!=1.3.0")
+ else:
+ install_requires.append("FormEncode>=1.3.1")
install_requires.append("PyDispatcher>=2.0.4")
- kw['install_requires'] = install_requires
- kw['extras_require'] = {
- 'mysql': ['MySQLdb'],
- 'postgresql': ['psycopg'], # or pgdb from PyGreSQL
+
+ kw['extras_require'] = extras_require = {
+ # Firebird/Interbase
+ 'fdb': ['fdb'],
+ 'firebirdsql': ['firebirdsql'],
+ 'kinterbasdb': ['kinterbasdb'],
+ # MS SQL
+ 'adodbapi': ['adodbapi'],
+ 'pymssql': ['pymssql'],
+ # MySQL
+ 'mysql-connector': ['mysql-connector'],
+ 'pymysql': ['pymysql'],
+ # ODBC
+ 'odbc': ['pyodbc'],
+ 'pyodbc': ['pyodbc'],
+ 'pypyodbc': ['pypyodbc'],
+ # PostgreSQL
+ 'psycopg1': ['psycopg1'],
+ 'psycopg2': ['psycopg2'],
+ 'psycopg': ['psycopg2'],
+ 'postgres': ['psycopg2'],
+ 'postgresql': ['psycopg2'],
+ 'pygresql': ['pygresql'],
+ 'pypostgresql': ['py-postgresql'],
+ 'py-postgresql': ['py-postgresql'],
+ #
+ 'sapdb': ['sapdb'],
'sqlite': ['pysqlite'],
- 'firebird': ['fdb'], # or kinterbasdb
'sybase': ['Sybase'],
- 'mssql': ['adodbapi'], # or pymssql
- 'sapdb': ['sapdb'],
}
+ if PY2:
+ extras_require['mysql'] = ['MySQLdb']
+ extras_require['oursql'] = ['oursql']
+ else:
+ extras_require['mysql'] = ['mysqlclient']
setup(name="SQLObject",
version=version,
-----------------------------------------------------------------------
Summary of changes:
.travis.yml | 7 -----
docs/News.rst | 8 ++++++
setup.py | 50 ++++++++++++++++++++++++++++--------
sqlobject/postgres/pgconnection.py | 41 +++++++++++++++++------------
sqlobject/sqlite/sqliteconnection.py | 4 +--
5 files changed, 75 insertions(+), 35 deletions(-)
hooks/post-receive
--
SQLObject development repository
|
|
From: Oleg B. <no...@so...> - 2017-05-23 20:50:22
|
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 e70c2760b962d00fc468afcd7c8224057d9c6b00 (commit)
from d1177e2f2833a0a5d5f389a25ee7f9af020a9069 (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/e70c2760b962d00fc468afcd7c8224057d9c6b00
commit e70c2760b962d00fc468afcd7c8224057d9c6b00
Author: Oleg Broytman <ph...@ph...>
Date: Tue May 23 23:49:11 2017 +0300
Add example to ANNOUNCE.rst
[skip ci]
diff --git a/ANNOUNCE.rst b/ANNOUNCE.rst
index 2bf4927..3d68fe4 100644
--- a/ANNOUNCE.rst
+++ b/ANNOUNCE.rst
@@ -58,3 +58,43 @@ https://pypi.python.org/pypi/SQLObject/3.4.0a0.dev20170507
News and changes:
http://sqlobject.org/News.html
+
+
+Example
+=======
+
+Create a simple class that wraps a table::
+
+ >>> from sqlobject import *
+ >>>
+ >>> sqlhub.processConnection = connectionForURI('sqlite:/:memory:')
+ >>>
+ >>> class Person(SQLObject):
+ ... fname = StringCol()
+ ... mi = StringCol(length=1, default=None)
+ ... lname = StringCol()
+ ...
+ >>> Person.createTable()
+
+Use the object::
+
+ >>> p = Person(fname="John", lname="Doe")
+ >>> p
+ <Person 1 fname='John' mi=None lname='Doe'>
+ >>> p.fname
+ 'John'
+ >>> p.mi = 'Q'
+ >>> p2 = Person.get(1)
+ >>> p2
+ <Person 1 fname='John' mi='Q' lname='Doe'>
+ >>> p is p2
+ True
+
+Queries::
+
+ >>> p3 = Person.selectBy(lname="Doe")[0]
+ >>> p3
+ <Person 1 fname='John' mi='Q' lname='Doe'>
+ >>> pc = Person.select(Person.q.lname=="Doe").count()
+ >>> pc
+ 1
diff --git a/docs/index.rst b/docs/index.rst
index 25c07dd..f1f1ece 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -68,6 +68,14 @@ Here's how you'd use the object::
>>> p is p2
True
+Queries::
+
+ >>> p3 = Person.selectBy(lname="Doe")[0]
+ >>> p3
+ <Person 1 fname='John' mi='Q' lname='Doe'>
+ >>> pc = Person.select(Person.q.lname=="Doe").count()
+ >>> pc
+ 1
Indices and tables
==================
-----------------------------------------------------------------------
Summary of changes:
ANNOUNCE.rst | 40 ++++++++++++++++++++++++++++++++++++++++
docs/index.rst | 8 ++++++++
2 files changed, 48 insertions(+)
hooks/post-receive
--
SQLObject development repository
|
|
From: Oleg B. <no...@so...> - 2017-05-20 17:58:51
|
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 d1177e2f2833a0a5d5f389a25ee7f9af020a9069 (commit)
from 4c812a1f79509ff84d254d253aabdac7747d4c1b (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/d1177e2f2833a0a5d5f389a25ee7f9af020a9069
commit d1177e2f2833a0a5d5f389a25ee7f9af020a9069
Author: Oleg Broytman <ph...@ph...>
Date: Sat May 20 16:19:29 2017 +0300
Feat(devscripts): Use sed --in-place instead of replace
[skip ci]
diff --git a/devscripts/branch b/devscripts/branch
index 38ca214..908e5fb 100755
--- a/devscripts/branch
+++ b/devscripts/branch
@@ -45,8 +45,8 @@ version_info = (major, minor, micro, release_level, serial)" > sqlobject/__versi
`git var GIT_EDITOR` README.rst sqlobject/__version__.py docs/News.rst appveyor.yml setup.py &&
git commit --message="Next branch will be $major.$next_minor" README.rst sqlobject/__version__.py docs/News.rst setup.py &&
- exec ./replace "$major\.$minor" "$major.$next_minor" ANNOUNCE.rst
+ exec sed -i /"$major\.$minor"/"$major.$next_minor"/ ANNOUNCE.rst
else
- exec ./replace "$prev_branch" "$major.$next_minor" ANNOUNCE.rst
+ exec sed -i /"$prev_branch"/"$major.$next_minor"/ ANNOUNCE.rst
fi
diff --git a/devscripts/replace b/devscripts/replace
deleted file mode 100755
index 8ff7124..0000000
--- a/devscripts/replace
+++ /dev/null
@@ -1,26 +0,0 @@
-#! /usr/bin/env python
-
-import sys
-
-if len(sys.argv) < 4:
- sys.stderr.write("Usage: %s [-i] from_re to_re file....\n" % sys.argv[0])
- sys.exit(1)
-
-import re
-if sys.argv[1] == '-i':
- search = re.compile(sys.argv[2], re.IGNORECASE)
- replace = sys.argv[3]
- start = 4
-else:
- search = re.compile(sys.argv[1])
- replace = sys.argv[2]
- start = 3
-
-from fileinput import FileInput
-files = FileInput(sys.argv[start:], inplace=1)
-
-for line in files:
- line = search.sub(replace, line)
- sys.stdout.write(line)
-
-files.close()
-----------------------------------------------------------------------
Summary of changes:
devscripts/branch | 4 ++--
devscripts/replace | 26 --------------------------
2 files changed, 2 insertions(+), 28 deletions(-)
delete mode 100755 devscripts/replace
hooks/post-receive
--
SQLObject development repository
|
|
From: Oleg B. <no...@so...> - 2017-05-16 22:25:36
|
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 4c812a1f79509ff84d254d253aabdac7747d4c1b (commit)
via 7570514647628f6663e6fb35d8b1fa1b9f8cb2bd (commit)
via c825a7874ed6f2506193f593fb09dc87cb55d5bd (commit)
via 96bf0e6bfb88a71fe818ee6e27ea8c8f584c20d8 (commit)
via bd45fb11ae33d224ef0eda473c63fcf064bce0d4 (commit)
via 3d2bf5ad78eb1c58c8648f2d483377a6946d22cf (commit)
from 1ba596182f377939a9b907d262d6ea9a40c1ea76 (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/4c812a1f79509ff84d254d253aabdac7747d4c1b
commit 4c812a1f79509ff84d254d253aabdac7747d4c1b
Author: Oleg Broytman <ph...@ph...>
Date: Tue May 16 23:28:45 2017 +0300
Encode/decode binary values for PyGreSQL driver
diff --git a/docs/News.rst b/docs/News.rst
index 8ac2a86..0c10a22 100644
--- a/docs/News.rst
+++ b/docs/News.rst
@@ -13,6 +13,8 @@ SQLObject 3.4.0 (master)
* Python 2.6 is no longer supported. The minimal supported version is
Python 2.7.
+* Encode/decode binary values for PyGreSQL driver.
+
SQLObject 3.3.0
===============
diff --git a/sqlobject/col.py b/sqlobject/col.py
index 0f35862..6ee5e98 100644
--- a/sqlobject/col.py
+++ b/sqlobject/col.py
@@ -1770,6 +1770,9 @@ 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 bf22a9c..855a5cf 100644
--- a/sqlobject/postgres/pgconnection.py
+++ b/sqlobject/postgres/pgconnection.py
@@ -85,6 +85,10 @@ class PostgresConnection(DBAPI):
# Register a converter for psycopg Binary type.
registerConverter(type(self.module.Binary('')),
PsycoBinaryConverter)
+ elif driver == 'pygresql':
+ from pg import escape_bytea
+ self.createBinary = \
+ lambda value, escape_bytea=escape_bytea: escape_bytea(value)
elif type(self.module.Binary) in (
type, type(PostgresBinaryConverter)) and \
type(self.module.Binary(b'')) not in (bytes, unicode_type):
http://sourceforge.net/p/sqlobject/sqlobject/ci/7570514647628f6663e6fb35d8b1fa1b9f8cb2bd
commit 7570514647628f6663e6fb35d8b1fa1b9f8cb2bd
Author: Oleg Broytman <ph...@ph...>
Date: Tue May 16 23:28:11 2017 +0300
Micro refactoring in BinaryValidator.to_python
diff --git a/sqlobject/col.py b/sqlobject/col.py
index e5f5301..0f35862 100644
--- a/sqlobject/col.py
+++ b/sqlobject/col.py
@@ -1768,12 +1768,12 @@ class BinaryValidator(SOValidator):
dbName = connection.dbName
binaryType = connection._binaryType
if isinstance(value, str):
+ if not PY2 and dbName == "mysql":
+ value = value.encode('ascii', errors='surrogateescape')
if dbName == "sqlite":
if not PY2:
value = bytes(value, 'ascii')
value = connection.module.decode(value)
- if dbName == "mysql" and not PY2:
- value = value.encode('ascii', errors='surrogateescape')
return value
if isinstance(value, bytes):
return value
http://sourceforge.net/p/sqlobject/sqlobject/ci/c825a7874ed6f2506193f593fb09dc87cb55d5bd
commit c825a7874ed6f2506193f593fb09dc87cb55d5bd
Author: Oleg Broytman <ph...@ph...>
Date: Tue May 16 00:26:09 2017 +0300
Fix: Do not register PostgresBinaryConverter for bytes and unicode
Avoid recursion in sqlrepr(Binary(value), 'postgres').
diff --git a/sqlobject/postgres/pgconnection.py b/sqlobject/postgres/pgconnection.py
index 63bd17a..bf22a9c 100644
--- a/sqlobject/postgres/pgconnection.py
+++ b/sqlobject/postgres/pgconnection.py
@@ -2,7 +2,7 @@ import re
from sqlobject import col
from sqlobject import dberrors
from sqlobject import sqlbuilder
-from sqlobject.compat import PY2
+from sqlobject.compat import PY2, unicode_type
from sqlobject.converters import registerConverter, sqlrepr
from sqlobject.dbconnection import DBAPI
@@ -85,7 +85,9 @@ class PostgresConnection(DBAPI):
# Register a converter for psycopg Binary type.
registerConverter(type(self.module.Binary('')),
PsycoBinaryConverter)
- elif type(self.module.Binary) in (type, type(PostgresBinaryConverter)):
+ elif type(self.module.Binary) in (
+ type, type(PostgresBinaryConverter)) and \
+ type(self.module.Binary(b'')) not in (bytes, unicode_type):
# Register a converter for Binary type.
registerConverter(type(self.module.Binary(b'')),
PostgresBinaryConverter)
http://sourceforge.net/p/sqlobject/sqlobject/ci/96bf0e6bfb88a71fe818ee6e27ea8c8f584c20d8
commit 96bf0e6bfb88a71fe818ee6e27ea8c8f584c20d8
Author: Oleg Broytman <ph...@ph...>
Date: Sun May 7 14:53:05 2017 +0300
Move hard requirements from tox.ini to requirements.txt
Move test requirements to requirements_tests.txt.
diff --git a/tox.ini b/tox.ini
index 792dde2..6cf2dea 100644
--- a/tox.ini
+++ b/tox.ini
@@ -15,11 +15,7 @@ commands =
{envpython} --version
{envpython} -c "import struct; print(struct.calcsize('P') * 8)"
deps =
- pytest
- pytest-cov
- py27: FormEncode >= 1.1.1, != 1.3.0
- py{34,35,36}: FormEncode >= 1.3.1
- PyDispatcher>=2.0.4
+ -rdevscripts/requirements/requirements_tests.txt
py27: egenix-mx-base
mssql-pyodbc: pytest-timeout
mysqldb: mysql-python
http://sourceforge.net/p/sqlobject/sqlobject/ci/bd45fb11ae33d224ef0eda473c63fcf064bce0d4
commit bd45fb11ae33d224ef0eda473c63fcf064bce0d4
Author: Oleg Broytman <ph...@ph...>
Date: Sun May 7 14:42:47 2017 +0300
Move requirements.txt to devscripts/
Rename requirements_dev.txt to requirements_test.txt.
Split requirements_test.txt intto requirements_tox.txt.
[skip ci]
diff --git a/requirements.txt b/devscripts/requirements/requirements.txt
similarity index 100%
rename from requirements.txt
rename to devscripts/requirements/requirements.txt
diff --git a/requirements_docs.txt b/devscripts/requirements/requirements_docs.txt
similarity index 100%
rename from requirements_docs.txt
rename to devscripts/requirements/requirements_docs.txt
diff --git a/requirements_dev.txt b/devscripts/requirements/requirements_tests.txt
similarity index 78%
rename from requirements_dev.txt
rename to devscripts/requirements/requirements_tests.txt
index ca2ff5d..8e890d8 100644
--- a/requirements_dev.txt
+++ b/devscripts/requirements/requirements_tests.txt
@@ -2,4 +2,3 @@
pytest
pytest-cov
-tox >= 1.8
diff --git a/devscripts/requirements/requirements_tox.txt b/devscripts/requirements/requirements_tox.txt
new file mode 100644
index 0000000..9927ea4
--- /dev/null
+++ b/devscripts/requirements/requirements_tox.txt
@@ -0,0 +1 @@
+tox >= 1.8
http://sourceforge.net/p/sqlobject/sqlobject/ci/3d2bf5ad78eb1c58c8648f2d483377a6946d22cf
commit 3d2bf5ad78eb1c58c8648f2d483377a6946d22cf
Author: Oleg Broytman <ph...@ph...>
Date: Sun May 7 17:43:42 2017 +0300
Stop supporting Python 2.6
diff --git a/ANNOUNCE.rst b/ANNOUNCE.rst
index 46dc308..2bf4927 100644
--- a/ANNOUNCE.rst
+++ b/ANNOUNCE.rst
@@ -38,7 +38,7 @@ easy to use and quick to get started with.
SQLObject supports a number of backends: MySQL, PostgreSQL, SQLite,
Firebird, Sybase, MSSQL and MaxDB (also known as SAPDB).
-Python 2.6, 2.7 or 3.4+ is required.
+Python 2.7 or 3.4+ is required.
Where is SQLObject
diff --git a/README.rst b/README.rst
index 0ba1341..43c457d 100644
--- a/README.rst
+++ b/README.rst
@@ -1,5 +1,5 @@
-SQLObject 3.3.0
-===============
+SQLObject 3.4.0a0
+=================
Thanks for looking at SQLObject. SQLObject is an object-relational
mapper, i.e., a library that will wrap your database tables in Python
@@ -7,7 +7,7 @@ classes, and your rows in Python instances.
It currently supports MySQL through the `MySQLdb` package, PostgreSQL
through the `psycopg` package, SQLite, Firebird, MaxDB (SAP DB), MS SQL,
-Sybase and Rdbhost. Python 2.6, 2.7 or 3.4+ is required.
+Sybase and Rdbhost. Python 2.7 or 3.4+ is required.
For more information please see the documentation in
`<docs/SQLObject.rst>`_, or online at http://sqlobject.org/
diff --git a/devscripts/release b/devscripts/release
index 0e24a8a..6c92d3a 100755
--- a/devscripts/release
+++ b/devscripts/release
@@ -11,7 +11,7 @@ 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
+for py in 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' &&
diff --git a/devscripts/run-all-tests b/devscripts/run-all-tests
index 80b2e1a..da6dbe4 100755
--- a/devscripts/run-all-tests
+++ b/devscripts/run-all-tests
@@ -3,7 +3,7 @@
cd "`dirname \"$0\"`"/SQLObject &&
SO_DIR="`dirname $0`"
-for py_ver in 2.6 2.7 3.4 3.5 3.6; do
+for py_ver in 2.7 3.4 3.5 3.6; do
echo "---------- PYTHON $py_ver "$1" ----------"
"$SO_DIR"/cleanup &&
PY_VER=$py_ver "$SO_DIR"/run-tests-"$1" \
diff --git a/devscripts/setup b/devscripts/setup
index 946696e..4edd679 100755
--- a/devscripts/setup
+++ b/devscripts/setup
@@ -3,7 +3,6 @@
umask 022 # -rwxr-xr-x
cd "`dirname \"$0\"`"/SQLObject &&
-python2.6 setup.py install -O2 &&
for py_ver in 2.7 3.4 3.5 3.6; do
python$py_ver -m pip install --install-option=-O2 --upgrade .
done &&
diff --git a/docs/News.rst b/docs/News.rst
index b307bee..8ac2a86 100644
--- a/docs/News.rst
+++ b/docs/News.rst
@@ -10,6 +10,9 @@ News
SQLObject 3.4.0 (master)
========================
+* Python 2.6 is no longer supported. The minimal supported version is
+ Python 2.7.
+
SQLObject 3.3.0
===============
diff --git a/docs/SQLObject.rst b/docs/SQLObject.rst
index e1b9622..e1f9b43 100644
--- a/docs/SQLObject.rst
+++ b/docs/SQLObject.rst
@@ -82,7 +82,7 @@ FreeTDS_) or adodbapi_ (Win32).
.. _FreeTDS: http://www.freetds.org/
.. _adodbapi: http://adodbapi.sourceforge.net/
-Python 2.6, 2.7 or 3.4+ is required.
+Python 2.7 or 3.4+ is required.
Compared To Other Database Wrappers
===================================
diff --git a/docs/TODO.rst b/docs/TODO.rst
index 3bf6a66..2ae19ac 100644
--- a/docs/TODO.rst
+++ b/docs/TODO.rst
@@ -1,8 +1,6 @@
TODO
----
-* Stop supporting Python 2.6. Fix dbconnection.py and joins.py.
-
* PyPy.
* Quote table/column names that are reserved keywords (order => "order",
diff --git a/requirements.txt b/requirements.txt
index 220e308..b8113c5 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,5 +1,5 @@
--install-option=-O2
-FormEncode >= 1.1.1, != 1.3.0; python_version >= '2.6' and python_version < '3.0'
+FormEncode >= 1.1.1, != 1.3.0; python_version >= '2.7' and python_version < '3.0'
FormEncode >= 1.3.1; python_version >= '3.4'
PyDispatcher >= 2.0.4
diff --git a/setup.py b/setup.py
index 640ab22..ad3814c 100755
--- a/setup.py
+++ b/setup.py
@@ -28,12 +28,12 @@ if is_setuptools:
main = sqlobject.wsgi_middleware:make_middleware
"""
install_requires = []
- if (sys.version_info[0] == 2) and (sys.version_info[:2] >= (2, 6)):
+ if (sys.version_info[:2] == (2, 7)):
install_requires.append("FormEncode>=1.1.1,!=1.3.0")
elif (sys.version_info[0] == 3) and (sys.version_info[:2] >= (3, 4)):
install_requires.append("FormEncode>=1.3.1")
else:
- raise ImportError("SQLObject requires Python 2.6, 2.7 or 3.4+")
+ raise ImportError("SQLObject requires Python 2.7 or 3.4+")
install_requires.append("PyDispatcher>=2.0.4")
kw['install_requires'] = install_requires
kw['extras_require'] = {
@@ -59,7 +59,7 @@ more abstract, and provides substantial database independence for
applications.
Supports MySQL, PostgreSQL, SQLite, Firebird, Sybase, MSSQL and MaxDB (SAPDB).
-Python 2.6, 2.7 or 3.4+ is required.
+Python 2.7 or 3.4+ is required.
For development see the projects at
`SourceForge <https://sourceforge.net/projects/sqlobject/>`_
@@ -75,7 +75,6 @@ and `GitHub <https://github.com/sqlobject>`_.
"GNU Library or Lesser General Public License (LGPL)",
"Programming Language :: Python",
"Programming Language :: Python :: 2",
- "Programming Language :: Python :: 2.6",
"Programming Language :: Python :: 2.7",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.4",
@@ -161,7 +160,7 @@ easy to use and quick to get started with.
It currently supports MySQL through the `MySQLdb` package, PostgreSQL
through the `psycopg` package, SQLite, Firebird, MaxDB (SAP DB), MS SQL
-Sybase and Rdbhost. Python 2.6, 2.7 or 3.4+ is required.
+Sybase and Rdbhost. Python 2.7 or 3.4+ is required.
Where is SQLObject
diff --git a/sqlobject/dbconnection.py b/sqlobject/dbconnection.py
index 89f4382..ff905f6 100644
--- a/sqlobject/dbconnection.py
+++ b/sqlobject/dbconnection.py
@@ -210,12 +210,6 @@ class DBConnection:
@staticmethod
def _parseURI(uri):
parsed = urlparse(uri)
- if sys.version_info[0:2] == (2, 6):
- # In python 2.6, urlparse only parses the uri completely
- # for certain schemes, so we force the scheme to
- # something that will be parsed correctly
- scheme = parsed.scheme
- parsed = urlparse(uri.replace(scheme, 'http', 1))
host, path = parsed.hostname, parsed.path
user, password, port = None, None, None
if parsed.username:
diff --git a/sqlobject/joins.py b/sqlobject/joins.py
index 675beb7..c847e21 100644
--- a/sqlobject/joins.py
+++ b/sqlobject/joins.py
@@ -102,8 +102,7 @@ class SOJoin(object):
class MinType(object):
"""Sort less than everything, for handling None's in the results"""
- # functools.total_ordering would simplify this, but isn't available
- # for python 2.6
+ # functools.total_ordering would simplify this
def __lt__(self, other):
if self is other:
diff --git a/sqlobject/main.py b/sqlobject/main.py
index cb262ad..88b3c0c 100644
--- a/sqlobject/main.py
+++ b/sqlobject/main.py
@@ -43,9 +43,9 @@ from .sresults import SelectResults
from .util.threadinglocal import local
from sqlobject.compat import PY2, with_metaclass, string_type, unicode_type
-if ((sys.version_info[0] == 2) and (sys.version_info[:2] < (2, 6))) or \
+if ((sys.version_info[0] == 2) and (sys.version_info[:2] < (2, 7))) or \
((sys.version_info[0] == 3) and (sys.version_info[:2] < (3, 4))):
- raise ImportError("SQLObject requires Python 2.6, 2.7 or 3.4+")
+ raise ImportError("SQLObject requires Python 2.7 or 3.4+")
if not PY2:
# alias for python 3 compatability
@@ -693,9 +693,9 @@ def deprecated(message, level=1, stacklevel=2):
if warnings_level is not None and warnings_level <= level:
warnings.warn(message, DeprecationWarning, stacklevel=stacklevel)
-if sys.version_info[:2] < (2, 7):
- deprecated("Support for Python 2.6 has been declared obsolete "
- "and will be removed in the next release of SQLObject")
+# if sys.version_info[:2] < (2, 7):
+# deprecated("Support for Python 2.6 has been declared obsolete "
+# "and will be removed in the next release of SQLObject")
def setDeprecationLevel(warning=1, exception=None):
diff --git a/tox.ini b/tox.ini
index 36a5422..792dde2 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,13 +1,12 @@
[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,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-pyodbc,mysql-connector,mysql-pyodbc,mysql-pypyodbc,postgres-psycopg,postgres-pyodbc,postgres-pypyodbc,sqlite,sqlite-memory}-w32
+envlist = py27-{mysqldb,mysql-oursql},py{34,35,36}-{mysqlclient,pypostgresql},py{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-pyodbc,mysql-connector,mysql-pyodbc,mysql-pypyodbc,postgres-psycopg,postgres-pyodbc,postgres-pypyodbc,sqlite,sqlite-memory}-w32
# Base test environment settings
[testenv]
# Ensure we cd into sqlobject before running the tests
changedir = ./sqlobject/
basepython =
- py26: {env:TOXPYTHON:python2.6}
py27: {env:TOXPYTHON:python2.7}
py34: {env:TOXPYTHON:python3.4}
py35: {env:TOXPYTHON:python3.5}
@@ -18,10 +17,10 @@ commands =
deps =
pytest
pytest-cov
- py{26,27}: FormEncode >= 1.1.1, != 1.3.0
+ py27: FormEncode >= 1.1.1, != 1.3.0
py{34,35,36}: FormEncode >= 1.3.1
PyDispatcher>=2.0.4
- py{26,27}: egenix-mx-base
+ py27: egenix-mx-base
mssql-pyodbc: pytest-timeout
mysqldb: mysql-python
mysqlclient: mysqlclient
@@ -55,9 +54,6 @@ commands =
pytest --cov=sqlobject -D mysql://root:@localhost/sqlobject_test?driver=mysqldb&debug=1
mysql -e 'drop database sqlobject_test;'
-[testenv:py26-mysqldb]
-commands = {[mysqldb]commands}
-
[testenv:py27-mysqldb]
commands = {[mysqldb]commands}
@@ -86,9 +82,6 @@ commands =
pytest --cov=sqlobject -D mysql://root:@localhost/sqlobject_test?driver=connector&charset=utf8&debug=1
mysql -e 'drop database sqlobject_test;'
-[testenv:py26-mysql-connector]
-commands = {[mysql-connector]commands}
-
[testenv:py27-mysql-connector]
commands = {[mysql-connector]commands}
@@ -109,9 +102,6 @@ commands =
pytest --cov=sqlobject -D mysql://root:@localhost/sqlobject_test?driver=oursql&charset=utf8&debug=1
mysql -e 'drop database sqlobject_test;'
-[testenv:py26-mysql-oursql]
-commands = {[oursql]commands}
-
[testenv:py27-mysql-oursql]
commands = {[oursql]commands}
@@ -123,9 +113,6 @@ commands =
pytest --cov=sqlobject -D mysql://root:@localhost/sqlobject_test?driver=pymysql&charset=utf8&debug=1
mysql -e 'drop database sqlobject_test;'
-[testenv:py26-pymysql]
-commands = {[pymysql]commands}
... 132 lines suppressed ...
hooks/post-receive
--
SQLObject development repository
|
|
From: Oleg B. <no...@so...> - 2017-05-07 14:18:48
|
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 annotated tag, 3.3.0 has been created
at 58c321faea38f04559ddcdba8eb388bbf975a8aa (tag)
tagging 2085abe0a7b63ab9f4e7bbc802b4239ccdbb3d7d (commit)
replaces 3.2.0
tagged by Oleg Broytman
on Sun May 7 16:14:51 2017 +0300
- Log -----------------------------------------------------------------
Release 3.3.0
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQIcBAABCgAGBQJZDx3LAAoJEG4IC3C2KHsDWeEQAJuDNEfvq1ZQJAUJWERau356
UKdiO78ZKCbcALQMhqLRgzpFGBeRw1wHpQPjtsjQBKPFpxG9iZs8UQ4OehKujASy
SmgFFoDwaerd99V2tL7A4Jpsrilu9wpFylgmhFxLx29Nq2UJtEjSwXkZYUrGENeo
Eg22JNRjqEKfJA3fqeXHevMxSveMKpMKavHSdyju+Q+okTwNLalT4hamW64TLL3+
0YEWwHqr3lRv6JHFwvM2gBYiR0iq1OW4KptJ2IkAJ9c+GsEtzThpBwCBOyLsM/jz
2jbEtJhZoD+/xGY7vwh8Z0VcYkkemX0HPY2B3WvgiqH4COV31A5i7V3oQSg2JH1R
/FYrnT3PoO0N/HhUb/sBvhacYqXYCg3sjzU3/s7uXKbaZUg6f9qk/16snlNuB04Q
vcobwTWvM579zVs7B//2/Y92iIgVKZF7Vp7q5mY3jqnoRAjMfp9XkZVYw7mubylh
lxDFTDpJsYXoNaoKaDJmRMjjXH6VWtKF6Rf6ibLBWZKgzTeA0ANIZxJudh86ObZh
G3LMwULGurrMRm7aaw057XXHuhfH4uXMfn0ifiVfoZlVa5HZug+XYC+rV/+jHBdD
eDvzbT7MRRXIHxzRJA3ZsvcH2DaS/+kMzQcFQ9ByB2+6BkVlhIK4bqD5/WLPveu0
/j95OXazpPDvaxkhQlNk
=+K1u
-----END PGP SIGNATURE-----
Oleg Broytman (65):
The next minor release will be 3.3.0
Fix pip's --install-option: --compile is default and I prefer -O2
Convert scripts repository to devscripts subdirectory
Stop publishing docs at GitHub/GitLab Pages and PyPI
Include devscripts into sdist
Fix: ../SQLObject-docs no longer is a repo
Use travis_retry to retry after a network timeout
Add ANNOUNCE.rst for version 3.2.0
The next bugfix version will be 3.2.1
The next minor version will be 3.3.
Refactor release script
Change release process
Run tests at Travis CI and AppVeyor with Python 3.6, x86 and x64
Refactor .travis.yml: move around some sections
Disable microseconds at AppVeyor for MySQL
Use mysql-connector version <= 2.2.2
Run MySQL tests at AppVeyor with Python 3.5 and 3.6
Fix tests under Python 3.6 + SQLite memory DB
Work with Python 3.6
Display pip's version at AppVeyor
Do not install requirements - they are installed by tox
Add postrelease devscript
Update release script
Add PyODBC driver for PostgreSQL
Refactor make_odbc_conn_str
Add PyPyODBC driver for PostgreSQL
[tox] Pass WINDIR environment variable
[appveyor.yml] Change version format
[appveyor.yml] Cache pip eggs/wheels
[appveyor/tox] Print python version and 32/64 bit architecture
[tox] Set basepython to fix 32/64 versions
Add sslmode for ODBC connect string for Pg
Add support for PyODBC and PyPyODBC for MySQL
[devscripts] Remove log files from pyodbc
Stop running tests at Travis with Python 2.6.
Prevent flake8 to complain about 'unicode' under PY3
sqlite-memory tests fail at Travis for no apparent reason
Use '/usr/bin/env python' for scripts
Refactor MANIFEST.in; exclude devscripts from sdist
[devscripts] setup: set umask to 022 -rwxr-xr-x
[devscripts] Adapt set-commit-date.py to Python 3
Stop updating http://sqlobject.readthedocs.org/
Remove gmane
[setup.cfg] Remove outdated ez_setup.py
Fix release script (version)
Document there are many problems with pypyodbc
Add support for PyODBC and PyPyODBC for MS SQL
Stop running tests at AppVeyor with pymssql
Remove set-commit-date.py
build-all-docs: avoid overriding robots.txt and generate sitemap.xml
Only test master and pull requests; skip tags
Fix split.sh: recognize both 'c' and 'rc'
Refactor make_odbc_conn_str() to use DB-specific ODBC keywords
tox.ini: set timeout for mssql-pyodbc tests
Set encoding for ODBC connections for MySQL
Add missing error codes for ODBC drivers
appveyor.yml: add 64-bit tests for mssql-pyodbc
Test for __nonzero__ under Python 2, __bool__ under Python 3 in BoolCol
Convert '0'/'1' (from ODBC) to bool in BoolCol
Check error codes from ODBC drivers for DuplicateError
Fix JsonbCol: undump a string returned by ODBC driver
TODO: PyPy
Fix tox.ini: Add py26 basepython
Support for Python 2.6 is declared obsolete
Release 3.3.0
-----------------------------------------------------------------------
hooks/post-receive
--
SQLObject development repository
|
|
From: Oleg B. <no...@so...> - 2017-05-07 14:18:46
|
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 1ba596182f377939a9b907d262d6ea9a40c1ea76 (commit)
via 2085abe0a7b63ab9f4e7bbc802b4239ccdbb3d7d (commit)
via 83dc573193f5f18e5229a1290e3d9a14ed27654b (commit)
via 38ba2a690d6114cd9df5808272117d6fe7dcb546 (commit)
from f7db6df022e81621afc1182f2e5e6ef3bfbe50cc (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/1ba596182f377939a9b907d262d6ea9a40c1ea76
commit 1ba596182f377939a9b907d262d6ea9a40c1ea76
Author: Oleg Broytman <ph...@ph...>
Date: Sun May 7 17:14:24 2017 +0300
Prepare for the next release
[skip ci]
diff --git a/ANNOUNCE.rst b/ANNOUNCE.rst
index fb7e39e..46dc308 100644
--- a/ANNOUNCE.rst
+++ b/ANNOUNCE.rst
@@ -1,50 +1,28 @@
Hello!
-I'm pleased to announce version 3.3.0, the first stable release of branch
-3.3 of SQLObject.
+I'm pleased to announce version 3.4.0a1, the first alpha of the upcoming
+release of branch 3.4 of SQLObject.
+I'm pleased to announce version 3.4.0a2, the second alpha of the upcoming
+release of branch 3.4 of SQLObject.
-What's new in SQLObject
-=======================
-
-Features
---------
-
-* Support for Python 2.6 is declared obsolete and will be removed
- in the next release.
-
-Minor features
---------------
-
-* Convert scripts repository to devscripts subdirectory.
- Some of thses scripts are version-dependent so it's better to have them
- in the main repo.
+I'm pleased to announce version 3.4.0b1, the first beta of the upcoming
+release of branch 3.4 of SQLObject.
-* Test for __nonzero__ under Python 2, __bool__ under Python 3 in BoolCol.
+I'm pleased to announce version 3.4.0rc1, the first release candidate
+of the upcoming release of branch 3.4 of SQLObject.
-Drivers (work in progress)
---------------------------
+I'm pleased to announce version 3.4.0, the first stable release of branch
+3.4 of SQLObject.
-* Add support for PyODBC and PyPyODBC (pure-python ODBC DB API driver) for
- MySQL, PostgreSQL and MS SQL. Driver names are ``pyodbc``, ``pypyodbc``
- or ``odbc`` (try ``pyodbc`` and ``pypyodbc``). There are some problems
- with pyodbc and many problems with pypyodbc.
+I'm pleased to announce version 3.4.1, the first bugfix release of branch
+3.4 of SQLObject.
-Documentation
--------------
-* Stop updating http://sqlobject.readthedocs.org/ - it's enough to have
- http://sqlobject.org/
-
-Tests
------
-
-* Run tests at Travis CI and AppVeyor with Python 3.6, x86 and x64.
-
-* Stop running tests at Travis with Python 2.6.
+What's new in SQLObject
+=======================
-* Stop running tests at AppVeyor with pymssql - too many timeouts and
- problems.
+Contributor for this release is
For a more complete list, please see the news:
http://sqlobject.org/News.html
@@ -76,7 +54,7 @@ Mailing list:
https://lists.sourceforge.net/mailman/listinfo/sqlobject-discuss
Download:
-https://pypi.python.org/pypi/SQLObject/3.3.0
+https://pypi.python.org/pypi/SQLObject/3.4.0a0.dev20170507
News and changes:
http://sqlobject.org/News.html
diff --git a/docs/News.rst b/docs/News.rst
index d6bafeb..b307bee 100644
--- a/docs/News.rst
+++ b/docs/News.rst
@@ -7,6 +7,9 @@ News
.. _start:
+SQLObject 3.4.0 (master)
+========================
+
SQLObject 3.3.0
===============
http://sourceforge.net/p/sqlobject/sqlobject/ci/2085abe0a7b63ab9f4e7bbc802b4239ccdbb3d7d
commit 2085abe0a7b63ab9f4e7bbc802b4239ccdbb3d7d
Author: Oleg Broytman <ph...@ph...>
Date: Sun May 7 16:07:16 2017 +0300
Release 3.3.0
diff --git a/ANNOUNCE.rst b/ANNOUNCE.rst
index e4759b6..fb7e39e 100644
--- a/ANNOUNCE.rst
+++ b/ANNOUNCE.rst
@@ -1,29 +1,50 @@
Hello!
-I'm pleased to announce version 3.3.0a1, the first alpha of the upcoming
-release of branch 3.2 of SQLObject.
+I'm pleased to announce version 3.3.0, the first stable release of branch
+3.3 of SQLObject.
-I'm pleased to announce version 3.3.0a2, the second alpha of the upcoming
-release of branch 3.2 of SQLObject.
-I'm pleased to announce version 3.3.0b1, the first beta of the upcoming
-release of branch 3.2 of SQLObject.
+What's new in SQLObject
+=======================
-I'm pleased to announce version 3.3.0rc1, the first release candidate
-of the upcoming release of branch 3.2 of SQLObject.
+Features
+--------
-I'm pleased to announce version 3.3.0, the first stable release of branch
-3.2 of SQLObject.
+* Support for Python 2.6 is declared obsolete and will be removed
+ in the next release.
-I'm pleased to announce version 3.3.1, the first bugfix release of branch
-3.2 of SQLObject.
+Minor features
+--------------
+* Convert scripts repository to devscripts subdirectory.
+ Some of thses scripts are version-dependent so it's better to have them
+ in the main repo.
-What's new in SQLObject
-=======================
+* Test for __nonzero__ under Python 2, __bool__ under Python 3 in BoolCol.
+
+Drivers (work in progress)
+--------------------------
+
+* Add support for PyODBC and PyPyODBC (pure-python ODBC DB API driver) for
+ MySQL, PostgreSQL and MS SQL. Driver names are ``pyodbc``, ``pypyodbc``
+ or ``odbc`` (try ``pyodbc`` and ``pypyodbc``). There are some problems
+ with pyodbc and many problems with pypyodbc.
+
+Documentation
+-------------
+
+* Stop updating http://sqlobject.readthedocs.org/ - it's enough to have
+ http://sqlobject.org/
+
+Tests
+-----
+
+* Run tests at Travis CI and AppVeyor with Python 3.6, x86 and x64.
+* Stop running tests at Travis with Python 2.6.
-Contributor for this release is
+* Stop running tests at AppVeyor with pymssql - too many timeouts and
+ problems.
For a more complete list, please see the news:
http://sqlobject.org/News.html
@@ -55,7 +76,7 @@ Mailing list:
https://lists.sourceforge.net/mailman/listinfo/sqlobject-discuss
Download:
-https://pypi.python.org/pypi/SQLObject/3.3.0a0.dev20170110
+https://pypi.python.org/pypi/SQLObject/3.3.0
News and changes:
http://sqlobject.org/News.html
diff --git a/README.rst b/README.rst
index 173a5de..0ba1341 100644
--- a/README.rst
+++ b/README.rst
@@ -1,5 +1,5 @@
-SQLObject 3.3.0a0
-=================
+SQLObject 3.3.0
+===============
Thanks for looking at SQLObject. SQLObject is an object-relational
mapper, i.e., a library that will wrap your database tables in Python
diff --git a/devscripts/build-all-docs b/devscripts/build-all-docs
index e659782..47071df 100755
--- a/devscripts/build-all-docs
+++ b/devscripts/build-all-docs
@@ -11,7 +11,7 @@ cd "$PROG_DIR" &&
PROG_DIR="`pwd`" &&
cd "$PROG_DIR"/SQLObject &&
-build_docs 3.2.0 &&
+build_docs 3.3.0 &&
build_docs master devel &&
cd ../SQLObject-docs &&
diff --git a/docs/News.rst b/docs/News.rst
index 1b57475..d6bafeb 100644
--- a/docs/News.rst
+++ b/docs/News.rst
@@ -7,8 +7,10 @@ News
.. _start:
-SQLObject 3.3.0 (master)
-========================
+SQLObject 3.3.0
+===============
+
+Released 7 May 2017.
Features
--------
diff --git a/setup.cfg b/setup.cfg
index d0e62d0..a472979 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,6 +1,6 @@
[egg_info]
-tag_build = dev
-tag_date = 1
+tag_build =
+tag_date = 0
tag_svn_revision = 0
[flake8]
diff --git a/setup.py b/setup.py
index ed917f2..640ab22 100755
--- a/setup.py
+++ b/setup.py
@@ -69,7 +69,7 @@ and `GitHub <https://github.com/sqlobject>`_.
:target: https://travis-ci.org/sqlobject/sqlobject
""",
classifiers=[
- "Development Status :: 3 - Alpha",
+ "Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: "
"GNU Library or Lesser General Public License (LGPL)",
@@ -89,7 +89,7 @@ and `GitHub <https://github.com/sqlobject>`_.
author_email="ia...@co...",
maintainer="Oleg Broytman",
maintainer_email="ph...@ph...",
- url="http://sqlobject.org/devel/",
+ url="http://sqlobject.org/",
download_url="https://pypi.python.org/pypi/SQLObject/%s" % version,
license="LGPL",
packages=["sqlobject"] +
diff --git a/sqlobject/__version__.py b/sqlobject/__version__.py
index cc4f6fb..cc88e83 100644
--- a/sqlobject/__version__.py
+++ b/sqlobject/__version__.py
@@ -3,6 +3,6 @@ version = '3.3.0'
major = 3
minor = 3
micro = 0
-release_level = 'alpha'
+release_level = 'final'
serial = 0
version_info = (major, minor, micro, release_level, serial)
http://sourceforge.net/p/sqlobject/sqlobject/ci/83dc573193f5f18e5229a1290e3d9a14ed27654b
commit 83dc573193f5f18e5229a1290e3d9a14ed27654b
Author: Oleg Broytman <ph...@ph...>
Date: Sun May 7 15:46:24 2017 +0300
Support for Python 2.6 is declared obsolete
[skip ci]
diff --git a/devscripts/BRANCH-CHECKLIST b/devscripts/BRANCH-CHECKLIST
index 5036e83..2b51cb0 100644
--- a/devscripts/BRANCH-CHECKLIST
+++ b/devscripts/BRANCH-CHECKLIST
@@ -18,9 +18,10 @@ a branch, a commit id or a tag.
1c. The script updates versions in ANNOUNCE.rst.
-2. To deprecate a version of Python edit files docs/News.rst,
- docs/SQLObject.rst, docs/TODO.rst, sqlobject/main.py, README.rst and
- setup.py in master.
+2. To deprecate a version of Python edit files ANNOUNCE.rst, README.rst,
+ devscripts/release, devscripts/setup, docs/News.rst, docs/SQLObject.rst,
+ docs/TODO.rst, requirements.txt, setup.py, sqlobject/main.py,
+ tox.ini in master.
3. Do a null-merge from the new branch to the higher branch or the
master.
diff --git a/docs/News.rst b/docs/News.rst
index cb22978..1b57475 100644
--- a/docs/News.rst
+++ b/docs/News.rst
@@ -10,6 +10,12 @@ News
SQLObject 3.3.0 (master)
========================
+Features
+--------
+
+* Support for Python 2.6 is declared obsolete and will be removed
+ in the next release.
+
Minor features
--------------
diff --git a/docs/TODO.rst b/docs/TODO.rst
index 2ae19ac..3bf6a66 100644
--- a/docs/TODO.rst
+++ b/docs/TODO.rst
@@ -1,6 +1,8 @@
TODO
----
+* Stop supporting Python 2.6. Fix dbconnection.py and joins.py.
+
* PyPy.
* Quote table/column names that are reserved keywords (order => "order",
diff --git a/sqlobject/main.py b/sqlobject/main.py
index 0ac510c..cb262ad 100644
--- a/sqlobject/main.py
+++ b/sqlobject/main.py
@@ -693,9 +693,9 @@ def deprecated(message, level=1, stacklevel=2):
if warnings_level is not None and warnings_level <= level:
warnings.warn(message, DeprecationWarning, stacklevel=stacklevel)
-# if sys.version_info[:2] < (2, 6):
-# deprecated("Support for Python 2.5 has been declared obsolete "
-# "and will be removed in the next release of SQLObject")
+if sys.version_info[:2] < (2, 7):
+ deprecated("Support for Python 2.6 has been declared obsolete "
+ "and will be removed in the next release of SQLObject")
def setDeprecationLevel(warning=1, exception=None):
http://sourceforge.net/p/sqlobject/sqlobject/ci/38ba2a690d6114cd9df5808272117d6fe7dcb546
commit 38ba2a690d6114cd9df5808272117d6fe7dcb546
Author: Oleg Broytman <ph...@ph...>
Date: Sun May 7 13:00:08 2017 +0300
Fix tox.ini: Add py26 basepython
[skip ci]
diff --git a/tox.ini b/tox.ini
index 6f27b6a..36a5422 100644
--- a/tox.ini
+++ b/tox.ini
@@ -7,6 +7,7 @@ envlist = py{26,27}-{mysqldb,mysql-oursql},py{34,35,36}-{mysqlclient,pypostgresq
# Ensure we cd into sqlobject before running the tests
changedir = ./sqlobject/
basepython =
+ py26: {env:TOXPYTHON:python2.6}
py27: {env:TOXPYTHON:python2.7}
py34: {env:TOXPYTHON:python3.4}
py35: {env:TOXPYTHON:python3.5}
-----------------------------------------------------------------------
Summary of changes:
ANNOUNCE.rst | 27 +++++++++++++--------------
README.rst | 4 ++--
devscripts/BRANCH-CHECKLIST | 7 ++++---
devscripts/build-all-docs | 2 +-
docs/News.rst | 13 ++++++++++++-
docs/TODO.rst | 2 ++
setup.cfg | 4 ++--
setup.py | 4 ++--
sqlobject/__version__.py | 2 +-
sqlobject/main.py | 6 +++---
tox.ini | 1 +
11 files changed, 43 insertions(+), 29 deletions(-)
hooks/post-receive
--
SQLObject development repository
|
|
From: Oleg B. <no...@so...> - 2017-05-05 19:35:01
|
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 f7db6df022e81621afc1182f2e5e6ef3bfbe50cc (commit)
from d8c2122546da28fc7bbdde857a845f2c1533d29a (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/f7db6df022e81621afc1182f2e5e6ef3bfbe50cc
commit f7db6df022e81621afc1182f2e5e6ef3bfbe50cc
Author: Oleg Broytman <ph...@ph...>
Date: Fri May 5 22:31:12 2017 +0300
TODO: PyPy
[skip ci]
diff --git a/docs/TODO.rst b/docs/TODO.rst
index b2d3f9d..2ae19ac 100644
--- a/docs/TODO.rst
+++ b/docs/TODO.rst
@@ -1,6 +1,8 @@
TODO
----
+* PyPy.
+
* Quote table/column names that are reserved keywords (order => "order",
values => `values` for MySQL).
-----------------------------------------------------------------------
Summary of changes:
docs/TODO.rst | 2 ++
1 file changed, 2 insertions(+)
hooks/post-receive
--
SQLObject development repository
|
|
From: Oleg B. <no...@so...> - 2017-05-05 17:58:20
|
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
discards c689da55a95f3ce96188ccfecf50a0ecc0cd5a6a (commit)
via d8c2122546da28fc7bbdde857a845f2c1533d29a (commit)
This update added new revisions after undoing existing revisions. That is
to say, the old revision is not a strict subset of the new revision. This
situation occurs when you --force push a change and generate a repository
containing something like this:
* -- * -- B -- O -- O -- O (c689da55a95f3ce96188ccfecf50a0ecc0cd5a6a)
\
N -- N -- N (d8c2122546da28fc7bbdde857a845f2c1533d29a)
When this happens we assume that you've already had alert emails for all
of the O revisions, and so we here report only the revisions in the N
branch from the common base, B.
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/d8c2122546da28fc7bbdde857a845f2c1533d29a
commit d8c2122546da28fc7bbdde857a845f2c1533d29a
Author: Oleg Broytman <ph...@ph...>
Date: Fri May 5 01:43:00 2017 +0300
Fix JsonbCol: undump a string returned by ODBC driver
diff --git a/sqlobject/col.py b/sqlobject/col.py
index 4c06489..e5f5301 100644
--- a/sqlobject/col.py
+++ b/sqlobject/col.py
@@ -1942,6 +1942,8 @@ class UuidCol(Col):
class JsonbValidator(SOValidator):
def to_python(self, value, state):
+ if isinstance(value, string_type):
+ return json.loads(value)
return value
def from_python(self, value, state):
-----------------------------------------------------------------------
Summary of changes:
hooks/post-receive
--
SQLObject development repository
|
|
From: Oleg B. <no...@so...> - 2017-05-04 23:33:35
|
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 c689da55a95f3ce96188ccfecf50a0ecc0cd5a6a (commit)
via ba4e8909593ed546de04544cf1d38f87d5287fea (commit)
via e506c2c62b3b34e820a30e0b669c197edc4bc392 (commit)
via d1ff60d0580650455dc4494ba01ef1f59d8bdf17 (commit)
via 732a6e21bae84733dd58f43e05a22931c04b2c67 (commit)
via 3077facd828aebea8b68c5824997a41e4f4df2f3 (commit)
via 70388fa6e6d14c7f9cfca8b642787ff4b1619105 (commit)
via 34e2ab6bcd3291db200bee40c4e8dbad9ff814f7 (commit)
via 2ca0972c0579284abea98f5c1d69fa37df718c1c (commit)
from f09ab7a6c734672d50df14e8d3f364c458eb3ce5 (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/c689da55a95f3ce96188ccfecf50a0ecc0cd5a6a
commit c689da55a95f3ce96188ccfecf50a0ecc0cd5a6a
Author: Oleg Broytman <ph...@ph...>
Date: Fri May 5 01:43:00 2017 +0300
Fix JsobCol: undump a string returned by ODBC driver
diff --git a/sqlobject/col.py b/sqlobject/col.py
index 4c06489..e5f5301 100644
--- a/sqlobject/col.py
+++ b/sqlobject/col.py
@@ -1942,6 +1942,8 @@ class UuidCol(Col):
class JsonbValidator(SOValidator):
def to_python(self, value, state):
+ if isinstance(value, string_type):
+ return json.loads(value)
return value
def from_python(self, value, state):
http://sourceforge.net/p/sqlobject/sqlobject/ci/ba4e8909593ed546de04544cf1d38f87d5287fea
commit ba4e8909593ed546de04544cf1d38f87d5287fea
Author: Oleg Broytman <ph...@ph...>
Date: Thu May 4 23:02:45 2017 +0300
Check error codes from ODBC drivers for DuplicateError
Check error codes for DuplicateError from MySQL and Postgres ODBC drivers.
diff --git a/sqlobject/mysql/mysqlconnection.py b/sqlobject/mysql/mysqlconnection.py
index c49e2e7..225a02f 100644
--- a/sqlobject/mysql/mysqlconnection.py
+++ b/sqlobject/mysql/mysqlconnection.py
@@ -129,7 +129,7 @@ class MySQLConnection(DBAPI):
)
self.CR_SERVER_GONE_ERROR = 2006
self.CR_SERVER_LOST = 2013
- self.ER_DUP_ENTRY = 1062
+ self.ER_DUP_ENTRY = '23000'
global mysql_Bin
if not PY2 and mysql_Bin is None:
diff --git a/sqlobject/postgres/pgconnection.py b/sqlobject/postgres/pgconnection.py
index 420c157..63bd17a 100644
--- a/sqlobject/postgres/pgconnection.py
+++ b/sqlobject/postgres/pgconnection.py
@@ -232,7 +232,8 @@ class PostgresConnection(DBAPI):
msg = ErrorMessage(e)
if getattr(e, 'code', -1) == '23505' or \
getattr(e, 'pgcode', -1) == '23505' or \
- getattr(e, 'sqlstate', -1) == '23505':
+ getattr(e, 'sqlstate', -1) == '23505' or \
+ e.args[0] == '23505':
raise dberrors.DuplicateEntryError(msg)
else:
raise dberrors.IntegrityError(msg)
http://sourceforge.net/p/sqlobject/sqlobject/ci/e506c2c62b3b34e820a30e0b669c197edc4bc392
commit e506c2c62b3b34e820a30e0b669c197edc4bc392
Author: Oleg Broytman <ph...@ph...>
Date: Thu May 4 22:41:40 2017 +0300
Convert '0'/'1' (from ODBC) to bool in BoolCol
diff --git a/sqlobject/col.py b/sqlobject/col.py
index 2937a23..4c06489 100644
--- a/sqlobject/col.py
+++ b/sqlobject/col.py
@@ -792,6 +792,15 @@ class BoolValidator(SOValidator):
if PY2 and hasattr(value, '__nonzero__') \
or not PY2 and hasattr(value, '__bool__'):
return bool(value)
+ try:
+ connection = state.connection or state.soObject._connection
+ except AttributeError:
+ pass
+ else:
+ if connection.dbName == 'postgres' and \
+ connection.driver in ('odbc', 'pyodbc', 'pypyodbc') and \
+ isinstance(value, string_type):
+ return bool(int(value))
raise validators.Invalid(
"expected a bool or an int in the BoolCol '%s', "
"got %s %r instead" % (
diff --git a/sqlobject/tests/test_validation.py b/sqlobject/tests/test_validation.py
index 7a06800..ae62f3c 100644
--- a/sqlobject/tests/test_validation.py
+++ b/sqlobject/tests/test_validation.py
@@ -87,7 +87,9 @@ class TestValidation:
raises(validators.Invalid, setattr, t, 'name2', 1)
raises(validators.Invalid, setattr, t, 'name3', '1')
raises(validators.Invalid, setattr, t, 'name4', '1')
- raises(validators.Invalid, setattr, t, 'name6', '1')
+ if t._connection.dbName != 'postgres' or \
+ t._connection.driver not in ('odbc', 'pyodbc', 'pypyodbc'):
+ raises(validators.Invalid, setattr, t, 'name6', '1')
raises(validators.Invalid, setattr, t, 'name7', 1)
t.name2 = 'you'
assert t.name2 == 'you'
http://sourceforge.net/p/sqlobject/sqlobject/ci/d1ff60d0580650455dc4494ba01ef1f59d8bdf17
commit d1ff60d0580650455dc4494ba01ef1f59d8bdf17
Author: Oleg Broytman <ph...@ph...>
Date: Thu May 4 22:31:27 2017 +0300
Test for __nonzero__ under Python 2, __bool__ under Python 3 in BoolCol
diff --git a/docs/DeveloperGuide.rst b/docs/DeveloperGuide.rst
index 6969978..5e889c8 100644
--- a/docs/DeveloperGuide.rst
+++ b/docs/DeveloperGuide.rst
@@ -92,12 +92,12 @@ have any code. ``SOBoolCol`` has a method to create ``BoolValidator``
and methods to create backend-specific column type. ``BoolValidator``
has identical methods ``from_python`` and ``to_python``; the method
passes ``None``, ``SQLExpression`` and bool values unchanged; int and
-objects that have method ``__nonzero__`` are converted to bool; other
-objects trigger validation error. Bool values that are returned by call
-to ``from_python`` will be converted to SQL strings by
-``BoolConverter``; bool values from ``to_python`` (is is supposed they
-are originated from the backend via DB API driver) are passed to the
-application.
+objects that have method ``__nonzero__`` (``__bool__`` in Python 3) are
+converted to bool; other objects trigger validation error. Bool values
+that are returned by call to ``from_python`` will be converted to SQL
+strings by ``BoolConverter``; bool values from ``to_python`` (is is
+supposed they are originated from the backend via DB API driver) are
+passed to the application.
Objects that are returned from ``from_python`` must be registered with
converters. Another approach for ``from_python`` is to return an object
diff --git a/docs/News.rst b/docs/News.rst
index 54ee2f1..cb22978 100644
--- a/docs/News.rst
+++ b/docs/News.rst
@@ -17,6 +17,8 @@ Minor features
Some of thses scripts are version-dependent so it's better to have them
in the main repo.
+* Test for __nonzero__ under Python 2, __bool__ under Python 3 in BoolCol.
+
Drivers (work in progress)
--------------------------
diff --git a/sqlobject/col.py b/sqlobject/col.py
index 26c9a51..2937a23 100644
--- a/sqlobject/col.py
+++ b/sqlobject/col.py
@@ -789,7 +789,8 @@ class BoolValidator(SOValidator):
return None
if isinstance(value, (bool, sqlbuilder.SQLExpression)):
return value
- if isinstance(value, (int, long)) or hasattr(value, '__nonzero__'):
+ if PY2 and hasattr(value, '__nonzero__') \
+ or not PY2 and hasattr(value, '__bool__'):
return bool(value)
raise validators.Invalid(
"expected a bool or an int in the BoolCol '%s', "
diff --git a/sqlobject/sqlbuilder.py b/sqlobject/sqlbuilder.py
index 2b4cdc7..e87ba70 100644
--- a/sqlobject/sqlbuilder.py
+++ b/sqlobject/sqlbuilder.py
@@ -1510,6 +1510,7 @@ class ImportProxy(SQLExpression):
def __nonzero__(self):
return True
+ __bool__ = __nonzero__
def __getattr__(self, attr):
if self.soClass is None:
diff --git a/sqlobject/tests/test_validation.py b/sqlobject/tests/test_validation.py
index 86f1a10..7a06800 100644
--- a/sqlobject/tests/test_validation.py
+++ b/sqlobject/tests/test_validation.py
@@ -63,6 +63,7 @@ class SOValidationTestInt(SOValidationTest):
class SOValidationTestBool(SOValidationTest):
def __nonzero__(self):
return self.value
+ __bool__ = __nonzero__
class SOValidationTestFloat(SOValidationTest):
http://sourceforge.net/p/sqlobject/sqlobject/ci/732a6e21bae84733dd58f43e05a22931c04b2c67
commit 732a6e21bae84733dd58f43e05a22931c04b2c67
Author: Oleg Broytman <ph...@ph...>
Date: Thu May 4 20:51:15 2017 +0300
appveyor.yml: add 64-bit tests for mssql-pyodbc
diff --git a/appveyor.yml b/appveyor.yml
index a4499b5..eff4614 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -38,21 +38,41 @@ environment:
PYTHON_ARCH: "32"
db: mssql2014
TOX_ENV: "py27-mssql-pyodbc-w32"
+ - PYTHON_HOME: "C:\\Python27-x64"
+ PYTHON_VERSION: "2.7"
+ PYTHON_ARCH: "64"
+ db: mssql2014
+ TOX_ENV: "py27-mssql-pyodbc-w32"
- PYTHON_HOME: "C:\\Python34"
PYTHON_VERSION: "3.4"
PYTHON_ARCH: "32"
db: mssql2014
TOX_ENV: "py34-mssql-pyodbc-w32"
+ - PYTHON_HOME: "C:\\Python34-x64"
+ PYTHON_VERSION: "3.4"
+ PYTHON_ARCH: "64"
+ db: mssql2014
+ TOX_ENV: "py34-mssql-pyodbc-w32"
- PYTHON_HOME: "C:\\Python35"
PYTHON_VERSION: "3.5"
PYTHON_ARCH: "32"
db: mssql2014
TOX_ENV: "py35-mssql-pyodbc-w32"
+ - PYTHON_HOME: "C:\\Python35-x64"
+ PYTHON_VERSION: "3.5"
+ PYTHON_ARCH: "64"
+ db: mssql2014
+ TOX_ENV: "py35-mssql-pyodbc-w32"
- PYTHON_HOME: "C:\\Python36"
PYTHON_VERSION: "3.6"
PYTHON_ARCH: "32"
db: mssql2014
TOX_ENV: "py36-mssql-pyodbc-w32"
+ - PYTHON_HOME: "C:\\Python36-x64"
+ PYTHON_VERSION: "3.6"
+ PYTHON_ARCH: "64"
+ db: mssql2014
+ TOX_ENV: "py36-mssql-pyodbc-w32"
- PYTHON_HOME: "C:\\Python27"
PYTHON_VERSION: "2.7"
PYTHON_ARCH: "32"
http://sourceforge.net/p/sqlobject/sqlobject/ci/3077facd828aebea8b68c5824997a41e4f4df2f3
commit 3077facd828aebea8b68c5824997a41e4f4df2f3
Author: Oleg Broytman <ph...@ph...>
Date: Thu May 4 21:04:57 2017 +0300
Add missing error codes for ODBC drivers
diff --git a/sqlobject/mysql/mysqlconnection.py b/sqlobject/mysql/mysqlconnection.py
index fe2eace..c49e2e7 100644
--- a/sqlobject/mysql/mysqlconnection.py
+++ b/sqlobject/mysql/mysqlconnection.py
@@ -127,6 +127,9 @@ class MySQLConnection(DBAPI):
'MySQL ODBC 5.3 ANSI Driver'),
db, host, port, user, password
)
+ self.CR_SERVER_GONE_ERROR = 2006
+ self.CR_SERVER_LOST = 2013
+ self.ER_DUP_ENTRY = 1062
global mysql_Bin
if not PY2 and mysql_Bin is None:
http://sourceforge.net/p/sqlobject/sqlobject/ci/70388fa6e6d14c7f9cfca8b642787ff4b1619105
commit 70388fa6e6d14c7f9cfca8b642787ff4b1619105
Author: Oleg Broytman <ph...@ph...>
Date: Thu May 4 20:46:11 2017 +0300
Set encoding for ODBC connections for MySQL
diff --git a/sqlobject/mysql/mysqlconnection.py b/sqlobject/mysql/mysqlconnection.py
index bf6c48c..fe2eace 100644
--- a/sqlobject/mysql/mysqlconnection.py
+++ b/sqlobject/mysql/mysqlconnection.py
@@ -177,7 +177,15 @@ class MySQLConnection(DBAPI):
self._setAutoCommit(conn, bool(self.autoCommit))
if dbEncoding:
- if hasattr(conn, 'set_character_set'):
+ if self.driver in ('odbc', 'pyodbc'):
+ conn.setdecoding(self.module.SQL_CHAR, encoding=dbEncoding)
+ conn.setdecoding(self.module.SQL_WCHAR, encoding=dbEncoding)
+ if PY2:
+ conn.setencoding(str, encoding=dbEncoding)
+ conn.setencoding(unicode, encoding=dbEncoding) # noqa
+ else:
+ conn.setencoding(encoding=dbEncoding)
+ elif hasattr(conn, 'set_character_set'):
conn.set_character_set(dbEncoding)
elif self.driver == 'oursql':
conn.charset = dbEncoding
http://sourceforge.net/p/sqlobject/sqlobject/ci/34e2ab6bcd3291db200bee40c4e8dbad9ff814f7
commit 34e2ab6bcd3291db200bee40c4e8dbad9ff814f7
Author: Oleg Broytman <ph...@ph...>
Date: Thu May 4 19:29:15 2017 +0300
tox.ini: set timeout for mssql-pyodbc tests
diff --git a/tox.ini b/tox.ini
index e6812ea..6f27b6a 100644
--- a/tox.ini
+++ b/tox.ini
@@ -21,6 +21,7 @@ deps =
py{34,35,36}: FormEncode >= 1.3.1
PyDispatcher>=2.0.4
py{26,27}: egenix-mx-base
+ mssql-pyodbc: pytest-timeout
mysqldb: mysql-python
mysqlclient: mysqlclient
mysql-connector: mysql-connector <= 2.2.2
@@ -401,7 +402,7 @@ commands =
{envpython} -c "import pyodbc; print(pyodbc.drivers())"
-sqlcmd -U sa -P "Password12!" -S .\SQL2014 -Q "DROP DATABASE sqlobject_test"
sqlcmd -U sa -P "Password12!" -S .\SQL2014 -Q "CREATE DATABASE sqlobject_test"
- pytest --cov=sqlobject -D "mssql://sa:Password12!@localhost\SQL2014/sqlobject_test?driver=pyodbc&odbcdrv=SQL%20Server&debug=1"
+ pytest --cov=sqlobject -D "mssql://sa:Password12!@localhost\SQL2014/sqlobject_test?driver=pyodbc&odbcdrv=SQL%20Server&debug=1" --timeout=30
sqlcmd -U sa -P "Password12!" -S .\SQL2014 -Q "DROP DATABASE sqlobject_test"
[testenv:py27-mssql-pyodbc-w32]
http://sourceforge.net/p/sqlobject/sqlobject/ci/2ca0972c0579284abea98f5c1d69fa37df718c1c
commit 2ca0972c0579284abea98f5c1d69fa37df718c1c
Author: Oleg Broytman <ph...@ph...>
Date: Thu May 4 18:44:35 2017 +0300
Refactor make_odbc_conn_str() to use DB-specific ODBC keywords
diff --git a/sqlobject/dbconnection.py b/sqlobject/dbconnection.py
index 4f29eb0..89f4382 100644
--- a/sqlobject/dbconnection.py
+++ b/sqlobject/dbconnection.py
@@ -734,17 +734,13 @@ class DBAPI(DBConnection):
"""
raise NotImplementedError
- def make_odbc_conn_str(self, db, host=None, port=None,
- user=None, password=None, odb_source=None):
- odbc_conn_parts = ['Driver={%s}' % odb_source, 'Database=%s' % db]
- if host:
- odbc_conn_parts.append('Server=%s' % host)
- if port:
- odbc_conn_parts.append('Port=%d' % port)
- if user:
- odbc_conn_parts.append('UID=%s' % user)
- if password:
- odbc_conn_parts.append('Password=%s' % password)
+ def make_odbc_conn_str(self, odb_source, db, host=None, port=None,
+ user=None, password=None):
+ odbc_conn_parts = ['Driver={%s}' % odb_source]
+ for odbc_keyword, value in \
+ zip(self.odbc_keywords, (host, port, user, password, db)):
+ if value is not None:
+ odbc_conn_parts.append('%s=%s' % (odbc_keyword, value))
self.odbc_conn_str = ';'.join(odbc_conn_parts)
diff --git a/sqlobject/mssql/mssqlconnection.py b/sqlobject/mssql/mssqlconnection.py
index c154dd4..811dcd8 100644
--- a/sqlobject/mssql/mssqlconnection.py
+++ b/sqlobject/mssql/mssqlconnection.py
@@ -12,6 +12,8 @@ class MSSQLConnection(DBAPI):
limit_re = re.compile('^\s*(select )(.*)', re.IGNORECASE)
+ odbc_keywords = ('Server', 'Port', 'User Id', 'Password', 'Database')
+
def __init__(self, db, user, password='', host='localhost', port=None,
autoCommit=0, **kw):
drivers = kw.pop('driver', None) or 'adodb,pymssql'
@@ -50,8 +52,9 @@ class MSSQLConnection(DBAPI):
'Cannot find an MSSQL driver, tried %s' % drivers)
if driver in ('odbc', 'pyodbc', 'pypyodbc'):
- self.make_odbc_conn_str(db, host, port, user, password,
- kw.pop('odbcdrv', 'SQL Server'))
+ self.make_odbc_conn_str(kw.pop('odbcdrv', 'SQL Server'),
+ db, host, port, user, password
+ )
elif driver in ('adodb', 'adodbapi'):
self.module = sqlmodule
diff --git a/sqlobject/mysql/mysqlconnection.py b/sqlobject/mysql/mysqlconnection.py
index 3da502b..bf6c48c 100644
--- a/sqlobject/mysql/mysqlconnection.py
+++ b/sqlobject/mysql/mysqlconnection.py
@@ -25,6 +25,8 @@ class MySQLConnection(DBAPI):
dbName = 'mysql'
schemes = [dbName]
+ odbc_keywords = ('Server', 'Port', 'UID', 'Password', 'Database')
+
def __init__(self, db, user, password='', host='localhost', port=0, **kw):
drivers = kw.pop('driver', None) or 'mysqldb'
for driver in drivers.split(','):
@@ -121,9 +123,10 @@ class MySQLConnection(DBAPI):
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'))
+ self.make_odbc_conn_str(kw.pop('odbcdrv',
+ 'MySQL ODBC 5.3 ANSI Driver'),
+ db, host, port, user, password
+ )
global mysql_Bin
if not PY2 and mysql_Bin is None:
diff --git a/sqlobject/postgres/pgconnection.py b/sqlobject/postgres/pgconnection.py
index c8d9b35..420c157 100644
--- a/sqlobject/postgres/pgconnection.py
+++ b/sqlobject/postgres/pgconnection.py
@@ -27,6 +27,8 @@ class PostgresConnection(DBAPI):
dbName = 'postgres'
schemes = [dbName, 'postgresql']
+ odbc_keywords = ('Server', 'Port', 'UID', 'Password', 'Database')
+
def __init__(self, dsn=None, host=None, port=None, db=None,
user=None, password=None, **kw):
drivers = kw.pop('driver', None) or 'psycopg'
@@ -94,8 +96,9 @@ class PostgresConnection(DBAPI):
self.host = host
self.port = port
if driver in ('odbc', 'pyodbc', 'pypyodbc'):
- self.make_odbc_conn_str(db, host, port, user, password,
- kw.pop('odbcdrv', 'PostgreSQL ANSI'))
+ self.make_odbc_conn_str(kw.pop('odbcdrv', 'PostgreSQL ANSI'),
+ db, host, port, user, password
+ )
sslmode = kw.pop("sslmode", None)
if sslmode:
self.odbc_conn_str += ';sslmode=require'
-----------------------------------------------------------------------
Summary of changes:
appveyor.yml | 20 ++++++++++++++++++++
docs/DeveloperGuide.rst | 12 ++++++------
docs/News.rst | 2 ++
sqlobject/col.py | 14 +++++++++++++-
sqlobject/dbconnection.py | 18 +++++++-----------
sqlobject/mssql/mssqlconnection.py | 7 +++++--
sqlobject/mysql/mysqlconnection.py | 22 ++++++++++++++++++----
sqlobject/postgres/pgconnection.py | 10 +++++++---
sqlobject/sqlbuilder.py | 1 +
sqlobject/tests/test_validation.py | 5 ++++-
tox.ini | 3 ++-
11 files changed, 85 insertions(+), 29 deletions(-)
hooks/post-receive
--
SQLObject development repository
|
|
From: Oleg B. <no...@so...> - 2017-05-02 19:58:55
|
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 f09ab7a6c734672d50df14e8d3f364c458eb3ce5 (commit)
from f53f3383be434b1d0f10e2e8bc05973872dd3101 (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/f09ab7a6c734672d50df14e8d3f364c458eb3ce5
commit f09ab7a6c734672d50df14e8d3f364c458eb3ce5
Author: Oleg Broytman <ph...@ph...>
Date: Tue May 2 22:11:15 2017 +0300
Fix split.sh: recognize both 'c' and 'rc'
[skip ci]
diff --git a/devscripts/split.sh b/devscripts/split.sh
index 9ae68ab..ce5c3c5 100644
--- a/devscripts/split.sh
+++ b/devscripts/split.sh
@@ -1,6 +1,6 @@
split_tag() {
branch=$2
- set -- `echo $1 | sed -e 's/\./ /g' -e 's/a/ alpha /' -e 's/b/ beta /' -e 's/c/ rc /'`
+ set -- `echo $1 | sed -e 's/\./ /g' -e 's/a/ alpha /' -e 's/b/ beta /' -e 's/rc/ rc /' -e 's/\([0-9]\)c/\1 rc /'`
major=$1
minor=$2
micro=$3
diff --git a/devscripts/test-split.sh b/devscripts/test-split.sh
index 6919f57..a5f1749 100755
--- a/devscripts/test-split.sh
+++ b/devscripts/test-split.sh
@@ -1,7 +1,6 @@
#! /bin/sh
. `dirname $0`/split.sh &&
-split_tag 21.12.42c4
test_eq() {
if [ "$1" != "$2" ]; then
@@ -9,6 +8,15 @@ test_eq() {
fi
}
+split_tag 21.12.42c4
+test_eq "$branch" 21.12
+test_eq "$major" 21
+test_eq "$minor" 12
+test_eq "$micro" 42
+test_eq "$state" "release candidate"
+test_eq "$serial" 4
+
+split_tag 21.12.42rc4
test_eq "$branch" 21.12
test_eq "$major" 21
test_eq "$minor" 12
-----------------------------------------------------------------------
Summary of changes:
devscripts/split.sh | 2 +-
devscripts/test-split.sh | 10 +++++++++-
2 files changed, 10 insertions(+), 2 deletions(-)
hooks/post-receive
--
SQLObject development repository
|
|
From: Oleg B. <no...@so...> - 2017-04-28 03:31:58
|
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 f53f3383be434b1d0f10e2e8bc05973872dd3101 (commit)
from f1ffdf88ce7f477ec55eb73a7b0f7bcf15c81fbc (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/f53f3383be434b1d0f10e2e8bc05973872dd3101
commit f53f3383be434b1d0f10e2e8bc05973872dd3101
Author: Oleg Broytman <ph...@ph...>
Date: Fri Apr 28 06:15:55 2017 +0300
Only test master and pull requests; skip tags
diff --git a/.travis.yml b/.travis.yml
index 921df72..87812e2 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,3 +1,9 @@
+# Only test master and pull requests; skip tags.
+# Other branches can allow themselves.
+branches:
+ only:
+ - master
+
# Prefer docker container with setuid/sudo
sudo: required
diff --git a/appveyor.yml b/appveyor.yml
index 46c89c0..a4499b5 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -3,6 +3,14 @@
# and Michael Sverdlik's appveyor-utils (https://github.com/cloudify-cosmo/appveyor-utils)
version: '{branch}-{build}'
+# Only test master and pull requests; skip tags.
+# Other branches can allow themselves.
+branches:
+ only:
+ - master
+skip_branch_with_pr: false
+skip_tags: true
+
cache:
- '%LOCALAPPDATA%\pip\Cache'
-----------------------------------------------------------------------
Summary of changes:
.travis.yml | 6 ++++++
appveyor.yml | 8 ++++++++
2 files changed, 14 insertions(+)
hooks/post-receive
--
SQLObject development repository
|
|
From: Oleg B. <no...@so...> - 2017-04-27 20:27:41
|
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 f1ffdf88ce7f477ec55eb73a7b0f7bcf15c81fbc (commit)
via 67d58541fc48c0e1358e1b6ecc2b26a816d5a8c0 (commit)
via aea36335819e189316cffc84705dc464f4ff8120 (commit)
via 5dfacb25fb61bcc6f08aaad2bd3934f2919c92ee (commit)
via ee8c1492c6b80ca971fee2778e2bc781d2e9b84f (commit)
from 1450275af30b8896373c091e5398fb942c3f1890 (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/f1ffdf88ce7f477ec55eb73a7b0f7bcf15c81fbc
commit f1ffdf88ce7f477ec55eb73a7b0f7bcf15c81fbc
Author: Oleg Broytman <ph...@ph...>
Date: Thu Apr 27 23:20:14 2017 +0300
build-all-docs: avoid overriding robots.txt and generate sitemap.xml
[skip ci]
diff --git a/devscripts/build-all-docs b/devscripts/build-all-docs
index 5e8f286..e659782 100755
--- a/devscripts/build-all-docs
+++ b/devscripts/build-all-docs
@@ -3,8 +3,16 @@
build_docs() {
git checkout "$1" &&
../build-docs &&
- rsync -ahP --del docs/html/ ../SQLObject-docs/"$2"/
+ rsync -ahP --del --exclude=/robots.txt docs/html/ ../SQLObject-docs/"$2"/
}
-cd "`dirname \"$0\"`"/SQLObject &&
-build_docs 3.2.0 && exec build_docs master devel
+PROG_DIR="`dirname \"$0\"`" &&
+cd "$PROG_DIR" &&
+PROG_DIR="`pwd`" &&
+
+cd "$PROG_DIR"/SQLObject &&
+build_docs 3.2.0 &&
+build_docs master devel &&
+
+cd ../SQLObject-docs &&
+exec sitemap_gen.py --config="$PROG_DIR"/sqlobject.org-sitemapconfig.xml
diff --git a/devscripts/sqlobject.org-sitemapconfig.xml b/devscripts/sqlobject.org-sitemapconfig.xml
new file mode 100644
index 0000000..dc37055
--- /dev/null
+++ b/devscripts/sqlobject.org-sitemapconfig.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ sitemap_gen.py configuration script for sqlobject.org
+-->
+
+ <site
+ base_url="http://sqlobject.org/"
+ store_into="sitemap.xml"
+ default_encoding="utf-8"
+ verbose="1"
+ sitemap_type="web"
+ suppress_search_engine_notify="1"
+ >
+
+ <directory
+ url="http://sqlobject.org/"
+ path="."
+ default_file="index.html"
+ />
+
+ <!-- Exclude URLs within UNIX-style hidden files or directories -->
+ <filter action="drop" type="regexp" pattern="/\.[^/]*" />
+
+</site>
http://sourceforge.net/p/sqlobject/sqlobject/ci/67d58541fc48c0e1358e1b6ecc2b26a816d5a8c0
commit 67d58541fc48c0e1358e1b6ecc2b26a816d5a8c0
Author: Oleg Broytman <ph...@ph...>
Date: Mon Apr 24 01:26:24 2017 +0300
Remove set-commit-date.py
[skip ci]
diff --git a/devscripts/release b/devscripts/release
index ee15d01..0e24a8a 100755
--- a/devscripts/release
+++ b/devscripts/release
@@ -4,8 +4,8 @@ cd "`dirname \"$0\"`"/SQLObject &&
umask 022 &&
chmod -R a+rX . &&
+set-commit-date.py &&
../build-docs &&
-../set-commit-date.py &&
python setup.py build_py &&
python setup.py build --executable '/usr/bin/env python' &&
diff --git a/devscripts/set-commit-date.py b/devscripts/set-commit-date.py
deleted file mode 100755
index dc6a5fb..0000000
--- a/devscripts/set-commit-date.py
+++ /dev/null
@@ -1,47 +0,0 @@
-#! /usr/bin/env python
-
-# Find commit date/time for every commit, list files in the commit
-# and set the file's modification time to the date/time of the latest commit.
-
-# Adapted from https://git.wiki.kernel.org/index.php/ExampleScripts#Setting_the_timestamps_of_the_files_to_the_commit_timestamp_of_the_commit_which_last_touched_them # noqa
-
-import os
-import subprocess
-
-separator = '----- GIT LOG SEPARATOR -----'
-
-git_log = subprocess.Popen(['git', 'log', '-m', '--first-parent',
- '--name-only', '--no-color',
- '--format=%s%%n%%ct' % separator],
- stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
- universal_newlines=True)
-filenames = set()
-# stages: 1 - start of commit, 2 - timestamp, 3 - empty line, 4 - files
-stage = 1
-while True:
- line = git_log.stdout.readline()
- if not line: # EOF
- break
- line = line.strip()
- if (stage in (1, 4)) and (line == separator): # Start of a commit
- stage = 2
- elif stage == 2:
- stage = 3
- time = int(line)
- elif stage == 3:
- if line == separator: # Null-merge (git merge -s ours), no files
- stage = 2
- continue
- stage = 4
- assert line == '', line
- elif stage == 4:
- filename = line
- if filename not in filenames:
- filenames.add(filename)
- if os.path.exists(filename):
- os.utime(filename, (time, time))
- else:
- raise ValueError("stage: %d, line: %s" % (stage, line))
-
-git_log.wait()
-git_log.stdout.close()
http://sourceforge.net/p/sqlobject/sqlobject/ci/aea36335819e189316cffc84705dc464f4ff8120
commit aea36335819e189316cffc84705dc464f4ff8120
Author: Oleg Broytman <ph...@ph...>
Date: Thu Apr 20 21:36:31 2017 +0300
Stop running tests at AppVeyor with pymssql
Too many timeouts and problems.
diff --git a/appveyor.yml b/appveyor.yml
index 2b459a2..46c89c0 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -25,17 +25,6 @@ environment:
CMD_IN_ENV: "cmd /E:ON /V:ON /C .\\run_with_env.cmd"
matrix:
- # from https://www.appveyor.com/docs/installed-software/#python
- - PYTHON_HOME: "C:\\Python27"
- PYTHON_VERSION: "2.7"
- PYTHON_ARCH: "32"
- db: mssql2014
- TOX_ENV: "py27-pymssql-w32"
- - PYTHON_HOME: "C:\\Python34"
- PYTHON_VERSION: "3.4"
- PYTHON_ARCH: "32"
- db: mssql2014
- TOX_ENV: "py34-pymssql-w32"
- PYTHON_HOME: "C:\\Python27"
PYTHON_VERSION: "2.7"
PYTHON_ARCH: "32"
@@ -233,7 +222,6 @@ install:
- ps: Get-OdbcDriver -Platform 32-bit | Select-Object -ExpandProperty Name
- ps: Get-OdbcDriver -Platform 64-bit | Select-Object -ExpandProperty Name
# Enable TCP for mssql
- # (from appveyor documentation)
- ps: |
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | Out-Null
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement") | Out-Null
diff --git a/docs/News.rst b/docs/News.rst
index d9d5307..54ee2f1 100644
--- a/docs/News.rst
+++ b/docs/News.rst
@@ -38,6 +38,9 @@ Tests
* Stop running tests at Travis with Python 2.6.
+* Stop running tests at AppVeyor with pymssql - too many timeouts and
+ problems.
+
SQLObject 3.2.0
===============
diff --git a/tox.ini b/tox.ini
index 02d2d4d..e6812ea 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,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}-{pymssql,mssql-pyodbc,mysql-connector,mysql-pyodbc,mysql-pypyodbc,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-pyodbc,mysql-connector,mysql-pyodbc,mysql-pypyodbc,postgres-psycopg,postgres-pyodbc,postgres-pypyodbc,sqlite,sqlite-memory}-w32
# Base test environment settings
[testenv]
@@ -33,7 +33,6 @@ deps =
pypyodbc: pypyodbc
firebird-fdb: fdb
firebirdsql: firebirdsql
- pymssql: pymssql
passenv = CI TRAVIS TRAVIS_* APPVEYOR DISTUTILS_USE_SDK MSSdk INCLUDE LIB PGPASSWORD WINDIR
# Don't fail or warn on uninstalled commands
whitelist_externals =
@@ -397,26 +396,6 @@ commands =
flake8 .
# Windows testing
-[pymssql-w32]
-commands =
- {[testenv]commands}
- -sqlcmd -U sa -P "Password12!" -S .\SQL2014 -Q "DROP DATABASE sqlobject_test"
- sqlcmd -U sa -P "Password12!" -S .\SQL2014 -Q "CREATE DATABASE sqlobject_test"
- pytest --cov=sqlobject -D "mssql://sa:Password12!@localhost\SQL2014/sqlobject_test?driver=pymssql&timeout=30&debug=1"
- sqlcmd -U sa -P "Password12!" -S .\SQL2014 -Q "DROP DATABASE sqlobject_test"
-
-[testenv:py27-pymssql-w32]
-commands = {[pymssql-w32]commands}
-
-[testenv:py34-pymssql-w32]
-commands = {[pymssql-w32]commands}
-
-[testenv:py35-pymssql-w32]
-commands = {[pymssql-w32]commands}
-
-[testenv:py36-pymssql-w32]
-commands = {[pymssql-w32]commands}
-
[mssql-pyodbc-w32]
commands =
{envpython} -c "import pyodbc; print(pyodbc.drivers())"
http://sourceforge.net/p/sqlobject/sqlobject/ci/5dfacb25fb61bcc6f08aaad2bd3934f2919c92ee
commit 5dfacb25fb61bcc6f08aaad2bd3934f2919c92ee
Author: Oleg Broytman <ph...@ph...>
Date: Thu Apr 20 22:06:04 2017 +0300
Add support for PyODBC and PyPyODBC for MS SQL
Run tests at AppVeyor.
diff --git a/appveyor.yml b/appveyor.yml
index e7d182c..2b459a2 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -30,12 +30,32 @@ environment:
PYTHON_VERSION: "2.7"
PYTHON_ARCH: "32"
db: mssql2014
- TOX_ENV: "py27-mssql-w32"
+ TOX_ENV: "py27-pymssql-w32"
- PYTHON_HOME: "C:\\Python34"
PYTHON_VERSION: "3.4"
PYTHON_ARCH: "32"
db: mssql2014
- TOX_ENV: "py34-mssql-w32"
+ TOX_ENV: "py34-pymssql-w32"
+ - PYTHON_HOME: "C:\\Python27"
+ PYTHON_VERSION: "2.7"
+ PYTHON_ARCH: "32"
+ db: mssql2014
+ TOX_ENV: "py27-mssql-pyodbc-w32"
+ - PYTHON_HOME: "C:\\Python34"
+ PYTHON_VERSION: "3.4"
+ PYTHON_ARCH: "32"
+ db: mssql2014
+ TOX_ENV: "py34-mssql-pyodbc-w32"
+ - PYTHON_HOME: "C:\\Python35"
+ PYTHON_VERSION: "3.5"
+ PYTHON_ARCH: "32"
+ db: mssql2014
+ TOX_ENV: "py35-mssql-pyodbc-w32"
+ - PYTHON_HOME: "C:\\Python36"
+ PYTHON_VERSION: "3.6"
+ PYTHON_ARCH: "32"
+ db: mssql2014
+ TOX_ENV: "py36-mssql-pyodbc-w32"
- PYTHON_HOME: "C:\\Python27"
PYTHON_VERSION: "2.7"
PYTHON_ARCH: "32"
diff --git a/docs/News.rst b/docs/News.rst
index dff7e8e..d9d5307 100644
--- a/docs/News.rst
+++ b/docs/News.rst
@@ -21,9 +21,9 @@ Drivers (work in progress)
--------------------------
* Add support for PyODBC and PyPyODBC (pure-python ODBC DB API driver) for
- MySQL and PostgreSQL. Driver names are ``pyodbc``, ``pypyodbc`` or
- ``odbc`` (try ``pyodbc`` and ``pypyodbc``). There are some problems with
- pyodbc and many problems with pypyodbc.
+ MySQL, PostgreSQL and MS SQL. Driver names are ``pyodbc``, ``pypyodbc``
+ or ``odbc`` (try ``pyodbc`` and ``pypyodbc``). There are some problems
+ with pyodbc and many problems with pypyodbc.
Documentation
-------------
diff --git a/sqlobject/mssql/mssqlconnection.py b/sqlobject/mssql/mssqlconnection.py
index 1350514..c154dd4 100644
--- a/sqlobject/mssql/mssqlconnection.py
+++ b/sqlobject/mssql/mssqlconnection.py
@@ -24,10 +24,23 @@ class MSSQLConnection(DBAPI):
import adodbapi as sqlmodule
elif driver == 'pymssql':
import pymssql as sqlmodule
+ 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 MSSQL driver "%s", '
- 'expected adodb or pymssql' % driver)
+ 'expected adodb, pymssql, '
+ 'odbc, pyodbc or pypyodbc' % driver)
except ImportError:
pass
else:
@@ -35,9 +48,13 @@ class MSSQLConnection(DBAPI):
else:
raise ImportError(
'Cannot find an MSSQL driver, tried %s' % drivers)
- self.module = sqlmodule
- if sqlmodule.__name__ == 'adodbapi':
+ if driver in ('odbc', 'pyodbc', 'pypyodbc'):
+ self.make_odbc_conn_str(db, host, port, user, password,
+ kw.pop('odbcdrv', 'SQL Server'))
+
+ elif driver in ('adodb', 'adodbapi'):
+ self.module = sqlmodule
self.dbconnection = sqlmodule.connect
# ADO uses unicode only (AFAIK)
self.usingUnicodeStrings = True
@@ -64,7 +81,8 @@ class MSSQLConnection(DBAPI):
kw.pop("ncli", None)
kw.pop("sspi", None)
- else: # pymssql
+ elif driver == 'pymssql':
+ self.module = sqlmodule
self.dbconnection = sqlmodule.connect
sqlmodule.Binary = lambda st: str(st)
# don't know whether pymssql uses unicode
@@ -89,6 +107,7 @@ class MSSQLConnection(DBAPI):
keys_dict[attr] = value
return keys_dict
self.make_conn_str = _make_conn_str
+ self.driver = driver
self.autoCommit = int(autoCommit)
self.user = user
@@ -118,17 +137,22 @@ class MSSQLConnection(DBAPI):
return c.fetchone()[0]
def makeConnection(self):
- conn_descr = self.make_conn_str(self)
- if isinstance(conn_descr, dict):
- con = self.dbconnection(**conn_descr)
+ 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:
- con = self.dbconnection(conn_descr)
- cur = con.cursor()
+ conn_descr = self.make_conn_str(self)
+ if isinstance(conn_descr, dict):
+ conn = self.dbconnection(**conn_descr)
+ else:
+ conn = self.dbconnection(conn_descr)
+ cur = conn.cursor()
cur.execute('SET ANSI_NULLS ON')
cur.execute("SELECT CAST('12345.21' AS DECIMAL(10, 2))")
self.decimalSeparator = str(cur.fetchone()[0])[-3]
cur.close()
- return con
+ return conn
HAS_IDENTITY = """
select 1
@@ -302,9 +326,6 @@ class MSSQLConnection(DBAPI):
option = "OFF"
c = conn.cursor()
c.execute("SET AUTOCOMMIT " + option)
- # from mx.ODBC.Windows import SQL
- # connection.setconnectoption(
- # SQL.AUTOCOMMIT, SQL.AUTOCOMMIT_ON if auto else SQL.AUTOCOMMIT_OFF)
# precision and scale is needed for decimal columns
def guessClass(self, t, size, precision, scale):
diff --git a/tox.ini b/tox.ini
index 0dfb792..02d2d4d 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,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
+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}-{pymssql,mssql-pyodbc,mysql-connector,mysql-pyodbc,mysql-pypyodbc,postgres-psycopg,postgres-pyodbc,postgres-pypyodbc,sqlite,sqlite-memory}-w32
# Base test environment settings
[testenv]
@@ -33,7 +33,7 @@ deps =
pypyodbc: pypyodbc
firebird-fdb: fdb
firebirdsql: firebirdsql
- mssql: pymssql
+ pymssql: pymssql
passenv = CI TRAVIS TRAVIS_* APPVEYOR DISTUTILS_USE_SDK MSSdk INCLUDE LIB PGPASSWORD WINDIR
# Don't fail or warn on uninstalled commands
whitelist_externals =
@@ -397,7 +397,7 @@ commands =
flake8 .
# Windows testing
-[mssql-w32]
+[pymssql-w32]
commands =
{[testenv]commands}
-sqlcmd -U sa -P "Password12!" -S .\SQL2014 -Q "DROP DATABASE sqlobject_test"
@@ -405,17 +405,37 @@ commands =
pytest --cov=sqlobject -D "mssql://sa:Password12!@localhost\SQL2014/sqlobject_test?driver=pymssql&timeout=30&debug=1"
sqlcmd -U sa -P "Password12!" -S .\SQL2014 -Q "DROP DATABASE sqlobject_test"
-[testenv:py27-mssql-w32]
-commands = {[mssql-w32]commands}
+[testenv:py27-pymssql-w32]
+commands = {[pymssql-w32]commands}
-[testenv:py34-mssql-w32]
-commands = {[mssql-w32]commands}
+[testenv:py34-pymssql-w32]
+commands = {[pymssql-w32]commands}
-[testenv:py35-mssql-w32]
-commands = {[mssql-w32]commands}
+[testenv:py35-pymssql-w32]
+commands = {[pymssql-w32]commands}
-[testenv:py36-mssql-w32]
-commands = {[mssql-w32]commands}
+[testenv:py36-pymssql-w32]
+commands = {[pymssql-w32]commands}
+
+[mssql-pyodbc-w32]
+commands =
+ {envpython} -c "import pyodbc; print(pyodbc.drivers())"
+ -sqlcmd -U sa -P "Password12!" -S .\SQL2014 -Q "DROP DATABASE sqlobject_test"
+ sqlcmd -U sa -P "Password12!" -S .\SQL2014 -Q "CREATE DATABASE sqlobject_test"
+ pytest --cov=sqlobject -D "mssql://sa:Password12!@localhost\SQL2014/sqlobject_test?driver=pyodbc&odbcdrv=SQL%20Server&debug=1"
+ sqlcmd -U sa -P "Password12!" -S .\SQL2014 -Q "DROP DATABASE sqlobject_test"
+
+[testenv:py27-mssql-pyodbc-w32]
+commands = {[mssql-pyodbc-w32]commands}
+
+[testenv:py34-mssql-pyodbc-w32]
+commands = {[mssql-pyodbc-w32]commands}
+
+[testenv:py35-mssql-pyodbc-w32]
+commands = {[mssql-pyodbc-w32]commands}
+
+[testenv:py36-mssql-pyodbc-w32]
+commands = {[mssql-pyodbc-w32]commands}
[mysql-connector-w32]
... 41 lines suppressed ...
hooks/post-receive
--
SQLObject development repository
|
|
From: Oleg B. <no...@so...> - 2017-04-17 20:46:46
|
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 1450275af30b8896373c091e5398fb942c3f1890 (commit)
via 3fac10b6e2434543ff543b2bdff63907f97298dd (commit)
from e7608833bcadbcdef50b01321aeae42e76dfdde1 (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/1450275af30b8896373c091e5398fb942c3f1890
commit 1450275af30b8896373c091e5398fb942c3f1890
Author: Oleg Broytman <ph...@ph...>
Date: Mon Apr 17 22:33:54 2017 +0300
Fix release script (version)
[skip ci]
diff --git a/devscripts/release b/devscripts/release
index 3a6fc74..ee15d01 100755
--- a/devscripts/release
+++ b/devscripts/release
@@ -23,13 +23,17 @@ done
find build -name '*.py[co]' -delete &&
python setup.py bdist_wheel --universal &&
+version=`python setup.py --version`
+. `dirname $0`/split.sh &&
+split_tag $version
+
if [ "$state" = final ]; then
cp -a dist/* "$HOME"/tmp/ &&
rsync -ahP4 dist/* frs.sourceforge.net:/home/frs/project/sqlobject/sqlobject/"$version"/ &&
rsync -ahP4 ANNOUNCE.rst frs.sourceforge.net:/home/frs/project/sqlobject/sqlobject/"$version"/README.rst || exit 1
fi
-twine register dist/SQLObject-"`python setup.py --version`".tar.gz &&
+twine register dist/SQLObject-"$version".tar.gz &&
twine upload --sign dist/* &&
exec rm -rf build dist docs/html SQLObject.egg-info
http://sourceforge.net/p/sqlobject/sqlobject/ci/3fac10b6e2434543ff543b2bdff63907f97298dd
commit 3fac10b6e2434543ff543b2bdff63907f97298dd
Author: Oleg Broytman <ph...@ph...>
Date: Sat Apr 15 20:50:57 2017 +0300
[setup.cfg] Remove outdated ez_setup.py
[skip ci]
diff --git a/setup.cfg b/setup.cfg
index 4c5fd41..d0e62d0 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -4,7 +4,7 @@ tag_date = 1
tag_svn_revision = 0
[flake8]
-exclude = .git,.tox,docs/europython/*.py,ez_setup.py
+exclude = .git,.tox,docs/europython/*.py
# E305: expected 2 blank lines after class or function definition, found 1
ignore = E305
-----------------------------------------------------------------------
Summary of changes:
devscripts/release | 6 +++++-
setup.cfg | 2 +-
2 files changed, 6 insertions(+), 2 deletions(-)
hooks/post-receive
--
SQLObject development repository
|
|
From: Oleg B. <no...@so...> - 2017-04-10 18:34:43
|
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 e7608833bcadbcdef50b01321aeae42e76dfdde1 (commit)
via c322285189d17bc0a9ad10f53ec8864dd9066cff (commit)
from 69d08334b97bb12e89429d5ab0758247ef09a71b (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/e7608833bcadbcdef50b01321aeae42e76dfdde1
commit e7608833bcadbcdef50b01321aeae42e76dfdde1
Author: Oleg Broytman <ph...@ph...>
Date: Mon Apr 10 21:31:12 2017 +0300
Remove gmane
[skip ci]
diff --git a/ANNOUNCE.rst b/ANNOUNCE.rst
index e636be5..e4759b6 100644
--- a/ANNOUNCE.rst
+++ b/ANNOUNCE.rst
@@ -54,9 +54,6 @@ http://sqlobject.org/devel/
Mailing list:
https://lists.sourceforge.net/mailman/listinfo/sqlobject-discuss
-Archives:
-http://news.gmane.org/gmane.comp.python.sqlobject
-
Download:
https://pypi.python.org/pypi/SQLObject/3.3.0a0.dev20170110
diff --git a/setup.py b/setup.py
index d4b4324..ed917f2 100755
--- a/setup.py
+++ b/setup.py
@@ -173,9 +173,6 @@ http://sqlobject.org
Mailing list:
https://lists.sourceforge.net/mailman/listinfo/sqlobject-discuss
-Archives:
-http://news.gmane.org/gmane.comp.python.sqlobject
-
Download:
https://pypi.python.org/pypi/SQLObject/@@
http://sourceforge.net/p/sqlobject/sqlobject/ci/c322285189d17bc0a9ad10f53ec8864dd9066cff
commit c322285189d17bc0a9ad10f53ec8864dd9066cff
Author: Oleg Broytman <ph...@ph...>
Date: Mon Apr 10 21:28:38 2017 +0300
Stop updating http://sqlobject.readthedocs.org/
It's enough to have http://sqlobject.org/
[skip ci]
diff --git a/docs/News.rst b/docs/News.rst
index f2697d6..0b93b2e 100644
--- a/docs/News.rst
+++ b/docs/News.rst
@@ -24,6 +24,12 @@ Drivers (work in progress)
MySQL and PostgreSQL. Driver names are ``pyodbc``, ``pypyodbc`` or
``odbc`` (try ``pyodbc`` and ``pypyodbc``). There are some problems.
+Documentation
+-------------
+
+* Stop updating http://sqlobject.readthedocs.org/ - it's enough to have
+ http://sqlobject.org/
+
Tests
-----
-----------------------------------------------------------------------
Summary of changes:
ANNOUNCE.rst | 3 ---
docs/News.rst | 6 ++++++
setup.py | 3 ---
3 files changed, 6 insertions(+), 6 deletions(-)
hooks/post-receive
--
SQLObject development repository
|
|
From: Oleg B. <no...@so...> - 2017-04-09 15:19:52
|
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 69d08334b97bb12e89429d5ab0758247ef09a71b (commit)
from e1a698ed6ccef20cd9645d1c88cc2b4f289d2366 (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/69d08334b97bb12e89429d5ab0758247ef09a71b
commit 69d08334b97bb12e89429d5ab0758247ef09a71b
Author: Oleg Broytman <ph...@ph...>
Date: Sun Apr 9 18:16:48 2017 +0300
[devscripts] Adapt set-commit-date.py to Python 3
Turn on universal_newlines.
[skip ci]
diff --git a/devscripts/set-commit-date.py b/devscripts/set-commit-date.py
index c5d49d4..dc6a5fb 100755
--- a/devscripts/set-commit-date.py
+++ b/devscripts/set-commit-date.py
@@ -13,7 +13,8 @@ separator = '----- GIT LOG SEPARATOR -----'
git_log = subprocess.Popen(['git', 'log', '-m', '--first-parent',
'--name-only', '--no-color',
'--format=%s%%n%%ct' % separator],
- stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+ stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
+ universal_newlines=True)
filenames = set()
# stages: 1 - start of commit, 2 - timestamp, 3 - empty line, 4 - files
stage = 1
-----------------------------------------------------------------------
Summary of changes:
devscripts/set-commit-date.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
hooks/post-receive
--
SQLObject development repository
|
|
From: Oleg B. <no...@so...> - 2017-04-08 23:37:50
|
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 e1a698ed6ccef20cd9645d1c88cc2b4f289d2366 (commit)
from ab3889be6919f4be63e8c841ff294748935f4499 (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/e1a698ed6ccef20cd9645d1c88cc2b4f289d2366
commit e1a698ed6ccef20cd9645d1c88cc2b4f289d2366
Author: Oleg Broytman <ph...@ph...>
Date: Sun Apr 9 02:33:30 2017 +0300
[devscripts] setup: set umask to 022 -rwxr-xr-x
[skip ci]
diff --git a/devscripts/setup b/devscripts/setup
index 315e84a..946696e 100755
--- a/devscripts/setup
+++ b/devscripts/setup
@@ -1,6 +1,6 @@
#! /bin/sh
-umask 002 # -rwxrwxr-x
+umask 022 # -rwxr-xr-x
cd "`dirname \"$0\"`"/SQLObject &&
python2.6 setup.py install -O2 &&
-----------------------------------------------------------------------
Summary of changes:
devscripts/setup | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
hooks/post-receive
--
SQLObject development repository
|