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 a034697c25b17b1d165fea66162f32f50235882f (commit)
via 4cdbbda4f41562ab6d7172232cea99d19a88bec2 (commit)
via 925a55bb33ad1099ec567a722b3028d0faf746f8 (commit)
via 414e326c61c715d9db3ff3fdf49742f2909cb6eb (commit)
via fa7f2d8ee36fb86e25a7cc8dabbea9ea569dcb2b (commit)
via 0e95c3bb1454ad593e4f71c7e6143496ea0884e2 (commit)
via ceba96dac3a68e6231947adfeea7ab5886d50295 (commit)
via 038679d11db5425f328852c8da98bf82c100c249 (commit)
via 3f3a7cefe899534b3ebe67cd93bbbdc358ab4316 (commit)
via 6dd8296d5c7c3925a03d2eb3efd4c12ded1e13f1 (commit)
from f031a362564a27da8523eb749c5e7e5f7cedaae4 (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/a034697c25b17b1d165fea66162f32f50235882f
commit a034697c25b17b1d165fea66162f32f50235882f
Author: Oleg Broytman <ph...@ph...>
Date: Thu Dec 24 22:50:22 2015 +0300
Release 3.0.0a2
diff --git a/README.txt b/README.txt
index f619d90..dabed60 100644
--- a/README.txt
+++ b/README.txt
@@ -1,4 +1,4 @@
-SQLObject 3.0.0a1
+SQLObject 3.0.0a2
=================
Thanks for looking at SQLObject. SQLObject is an object-relational
diff --git a/setup.py b/setup.py
index dfe945e..b532d22 100755
--- a/setup.py
+++ b/setup.py
@@ -82,7 +82,7 @@ and `GitHub <https://github.com/sqlobject>`_.
maintainer_email="ph...@ph...",
url="http://sqlobject.org/devel/",
download_url="https://pypi.python.org/pypi/SQLObject/"
- "%sdev-20150327" % version,
+ "%sdev-20151224" % version,
license="LGPL",
packages=["sqlobject"] +
['sqlobject.%s' % package for package in subpackages],
diff --git a/sqlobject/__version__.py b/sqlobject/__version__.py
index 4df07a7..05e6604 100644
--- a/sqlobject/__version__.py
+++ b/sqlobject/__version__.py
@@ -1,8 +1,8 @@
-version = '3.0.0a1'
+version = '3.0.0a2'
major = 3
minor = 0
micro = 0
release_level = 'alpha'
-serial = 1
+serial = 2
version_info = (major, minor, micro, release_level, serial)
http://sourceforge.net/p/sqlobject/sqlobject/ci/4cdbbda4f41562ab6d7172232cea99d19a88bec2
commit 4cdbbda4f41562ab6d7172232cea99d19a88bec2
Merge: 414e326 925a55b
Author: Oleg Broytman <ph...@ph...>
Date: Thu Dec 24 22:44:06 2015 +0300
Null-merge branch '2.2'
http://sourceforge.net/p/sqlobject/sqlobject/ci/414e326c61c715d9db3ff3fdf49742f2909cb6eb
commit 414e326c61c715d9db3ff3fdf49742f2909cb6eb
Author: Oleg Broytman <ph...@ph...>
Date: Thu Dec 24 19:46:05 2015 +0300
Do not allow failures
diff --git a/.travis.yml b/.travis.yml
index 92ecc8f..9b7db21 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -17,10 +17,5 @@ install: pip install tox
matrix:
fast_finish: true
- allow_failures:
- - env: TOXENV=py34-sqlite
- - env: TOXENV=py34-postgres
- - env: TOXENV=py34-mysqlclient
- - env: TOXENV=py34-flake8
script: tox -e ${TOXENV}
http://sourceforge.net/p/sqlobject/sqlobject/ci/fa7f2d8ee36fb86e25a7cc8dabbea9ea569dcb2b
commit fa7f2d8ee36fb86e25a7cc8dabbea9ea569dcb2b
Author: Oleg Broytman <ph...@ph...>
Date: Thu Dec 24 19:40:56 2015 +0300
Update docs
[skip ci]
diff --git a/docs/News.txt b/docs/News.txt
index e33eca0..cdccde9 100644
--- a/docs/News.txt
+++ b/docs/News.txt
@@ -16,6 +16,9 @@ Features
* Support for Python 2 and Python 3 with one codebase!
(Python version >= 3.4 currently required.)
+* Columns for ForeignKey are created using idType of the referenced
+ table -- merged from `SQLObject 2.2.0`_.
+
Minor features
--------------
@@ -41,6 +44,9 @@ Tests
* Speedup SQLite connections in tests -- merged from `SQLObject 2.2.0`_.
+* Added new test helper setupCyclicClasses to setup classes with mutual
+ references -- merged from `SQLObject 2.2.0`_.
+
SQLObject 2.2.0
===============
http://sourceforge.net/p/sqlobject/sqlobject/ci/0e95c3bb1454ad593e4f71c7e6143496ea0884e2
commit 0e95c3bb1454ad593e4f71c7e6143496ea0884e2
Merge: f031a36 ceba96d
Author: Oleg Broytman <ph...@ph...>
Date: Thu Dec 24 19:32:00 2015 +0300
Merge branch '2.2'
diff --cc docs/Authors.txt
index 91b7301,dbb648c..d52dc92
--- a/docs/Authors.txt
+++ b/docs/Authors.txt
@@@ -30,8 -30,8 +30,9 @@@ Contributions have been made by
* Andrew Ziem <ahz001 at gmail.com>
* Andrew Trusty <atrusty at gatech.edu>
* Ian Cordasco <graffatcolmingov at gmail.com>
+* Lukasz Dobrzanski <lukasz.m.dobrzanski at gmail.com>
* Gregor Horvath <gh at gregor-horvath.com>
+ * Nathan Edwards <nje5 at georgetown.edu>
* Oleg Broytman <ph...@ph...>
.. image:: http://sflogo.sourceforge.net/sflogo.php?group_id=74338&type=10
diff --cc sqlobject/col.py
index 2b2ed29,794532f..bc57813
--- a/sqlobject/col.py
+++ b/sqlobject/col.py
@@@ -889,14 -830,39 +892,42 @@@ class SOKeyCol(SOCol)
def _mssqlType(self):
key_type = {int: "INT NULL", str: "TEXT"}
- return key_type[self.soClass.sqlmeta.idType]
+ return key_type[self._idType()]
+
class KeyCol(Col):
baseClass = SOKeyCol
+
+ class ForeignKeyValidator(SOValidator):
+
+ def __init__(self, *args, **kw):
+ super(ForeignKeyValidator, self).__init__(*args, **kw)
+ self.fkIDType = None
+
+ def from_python(self, value, state):
+ if value is None:
+ return None
+ # Avoid importing the main module
+ # to get the SQLObject class for isinstance
+ if hasattr(value, 'sqlmeta'):
+ return value
+ if self.fkIDType is None:
+ otherTable = findClass(self.soCol.foreignKey,
+ self.soCol.soClass.sqlmeta.registry)
+ self.fkIDType = otherTable.sqlmeta.idType
+ try:
+ value = self.fkIDType(value)
+ return value
+ except (ValueError, TypeError):
+ pass
+ raise validators.Invalid("expected a %r for the ForeignKey '%s', "
+ "got %s %r instead" %
+ (self.fkIDType, self.name,
+ type(value), value), value, state)
+
++
class SOForeignKey(SOKeyCol):
def __init__(self, **kw):
@@@ -906,10 -872,17 +937,18 @@@
kw['origName'] = kw['name']
kw['name'] = style.instanceAttrToIDAttr(kw['name'])
else:
- kw['name'] = style.instanceAttrToIDAttr(style.pythonClassToAttr(foreignKey))
+ kw['name'] = style.instanceAttrToIDAttr(
+ style.pythonClassToAttr(foreignKey))
super(SOForeignKey, self).__init__(**kw)
+ def createValidators(self):
+ return [ForeignKeyValidator(name=self.name)] + \
+ super(SOForeignKey, self).createValidators()
+
+ def _idType(self):
+ other = findClass(self.foreignKey, self.soClass.sqlmeta.registry)
+ return other.sqlmeta.idType
+
def sqliteCreateSQL(self):
sql = SOKeyCol.sqliteCreateSQL(self)
other = findClass(self.foreignKey, self.soClass.sqlmeta.registry)
diff --cc sqlobject/tests/dbtest.py
index 2778db7,1473e7b..6a5027e
--- a/sqlobject/tests/dbtest.py
+++ b/sqlobject/tests/dbtest.py
@@@ -5,8 -4,9 +5,8 @@@ from __future__ import print_functio
import logging
import os
-import re
import sys
- from py.test import raises
+ from py.test import raises, skip
import sqlobject
import sqlobject.conftest as conftest
@@@ -330,7 -320,23 +330,24 @@@ def setupLogging()
logger = logging.getLogger()
logger.addHandler(hdlr)
++
+ def setupCyclicClasses(*classes):
+ if not supports('dropTableCascade'):
+ skip("dropTableCascade isn't supported")
+ conn = getConnection()
+ for soClass in classes:
+ soClass.setConnection(conn)
+ soClass.dropTable(ifExists=True, cascade=True)
+
+ constraints = []
+ for soClass in classes:
+ constraints += soClass.createTable(ifNotExists=True,
+ applyConstraints=False)
+ for constraint in constraints:
+ conn.query(constraint)
+
-__all__ = ['getConnection', 'getConnectionURI', 'setupClass', 'Dummy', 'raises',
- 'inserts', 'supports', 'deprecated_module',
- 'setup_module', 'teardown_module', 'setupLogging',
- 'setupCyclicClasses',
++
+__all__ = ['Dummy', 'deprecated_module', 'getConnection', 'getConnectionURI',
- 'inserts', 'raises', 'setupClass', 'setupLogging', 'setup_module',
- 'supports', 'teardown_module',
++ 'inserts', 'raises', 'setupClass', 'setupCyclicClasses',
++ 'setupLogging', 'setup_module', 'supports', 'teardown_module',
]
diff --cc sqlobject/tests/test_ForeignKey.py
index a7659b4,30c4127..2168c41
--- a/sqlobject/tests/test_ForeignKey.py
+++ b/sqlobject/tests/test_ForeignKey.py
@@@ -93,3 -85,35 +94,39 @@@ def test_otherColumn()
getConnection().cache.clear()
assert test_fkey.key1 == test_composer1
assert test_other.key2 == test_composer2
+
++
+ class TestFKValidationA(SQLObject):
+ name = StringCol()
+ bfk = ForeignKey("TestFKValidationB")
+ cfk = ForeignKey("TestFKValidationC", default=None)
+
++
+ class TestFKValidationB(SQLObject):
+ name = StringCol()
+ afk = ForeignKey("TestFKValidationA")
+
++
+ class TestFKValidationC(SQLObject):
+ class sqlmeta:
+ idType = str
+ name = StringCol()
+
++
+ def test_foreignkey_validation():
+ setupCyclicClasses(TestFKValidationA, TestFKValidationB, TestFKValidationC)
+ a = TestFKValidationA(name="testa", bfk=None)
+ b = TestFKValidationB(name="testb", afk=a)
+ c = TestFKValidationC(id='testc', name="testc")
+ a.bfk = b
+ a.cfk = c
+ assert a.bfk == b
+ assert a.cfk == c
+ assert b.afk == a
+
+ raises(validators.Invalid,
+ TestFKValidationA, name="testa", bfk='testb', cfk='testc')
+
+ a = TestFKValidationA(name="testa", bfk=1, cfk='testc')
+ assert a.bfkID == 1
+ assert a.cfkID == 'testc'
-----------------------------------------------------------------------
Summary of changes:
.travis.yml | 5 ----
README.txt | 2 +-
docs/Authors.txt | 1 +
docs/News.txt | 12 +++++++++
setup.py | 2 +-
sqlobject/__version__.py | 4 +-
sqlobject/col.py | 45 +++++++++++++++++++++++++++++++++--
sqlobject/tests/dbtest.py | 23 ++++++++++++++++--
sqlobject/tests/test_ForeignKey.py | 37 +++++++++++++++++++++++++++++
9 files changed, 116 insertions(+), 15 deletions(-)
hooks/post-receive
--
SQLObject development repository
|