From 8850cf95e80a5922f17f04c06c697b6fcd46f4d7 Mon Sep 17 00:00:00 2001 From: baztian Date: Tue, 21 Mar 2017 20:16:01 +0100 Subject: [PATCH 1/5] Fix development notes on how to publish a new release. --- README_development.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README_development.rst b/README_development.rst index 84966e0..11bba85 100644 --- a/README_development.rst +++ b/README_development.rst @@ -69,4 +69,4 @@ Build a new release 9. Send new version and tags to github origin. :: - $ git push origin master --tags + $ git push origin master --follow-tags From e99a05d5a84e9aa37ff0bac00bd5591336f54402 Mon Sep 17 00:00:00 2001 From: baztian Date: Tue, 21 Mar 2017 20:16:59 +0100 Subject: [PATCH 2/5] =?UTF-8?q?Bump=20version:=201.1.0=20=E2=86=92=201.1.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .bumpversion.cfg | 2 +- README.rst | 1 + jaydebeapi/__init__.py | 2 +- setup.py | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.bumpversion.cfg b/.bumpversion.cfg index edbb95b..38c1800 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 1.1.0 +current_version = 1.1.1 commit = True tag = True diff --git a/README.rst b/README.rst index 13ab23c..c422597 100644 --- a/README.rst +++ b/README.rst @@ -159,6 +159,7 @@ Changelog ========= - Next version - unreleased +- 1.1.1 - 2017-03-21 - Don't fail on dates before 1900 on Python < 3. diff --git a/jaydebeapi/__init__.py b/jaydebeapi/__init__.py index 4e1c597..c124e6f 100644 --- a/jaydebeapi/__init__.py +++ b/jaydebeapi/__init__.py @@ -17,7 +17,7 @@ # License along with JayDeBeApi. If not, see # . -__version_info__ = (1, 1, 0) +__version_info__ = (1, 1, 1) __version__ = ".".join(str(i) for i in __version_info__) import datetime diff --git a/setup.py b/setup.py index 2f32874..1425345 100644 --- a/setup.py +++ b/setup.py @@ -27,7 +27,7 @@ setup( #basic package data name = 'JayDeBeApi', - version = '1.1.0', + version = '1.1.1', author = 'Bastian Bowe', author_email = 'bastian.dev@gmail.com', license = 'GNU LGPL', From b04ab616d9ddc7426a6fd952d6c8d79d3f824901 Mon Sep 17 00:00:00 2001 From: Pablo Fernandez Date: Thu, 3 Jan 2019 11:07:02 -0300 Subject: [PATCH 3/5] add query timeout to execute and executemany methods --- jaydebeapi/__init__.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/jaydebeapi/__init__.py b/jaydebeapi/__init__.py index c124e6f..dba5cb6 100644 --- a/jaydebeapi/__init__.py +++ b/jaydebeapi/__init__.py @@ -347,7 +347,7 @@ def TimestampFromTicks(ticks): return apply(Timestamp, time.localtime(ticks)[:6]) # DB-API 2.0 Module Interface connect constructor -def connect(jclassname, url, driver_args=None, jars=None, libs=None): +def connect(jclassname, url, driver_args=None, jars=None, libs=None, timeout=None): """Open a connection to a database using a JDBC driver and return a Connection instance. @@ -378,8 +378,7 @@ def connect(jclassname, url, driver_args=None, jars=None, libs=None): libs = [ libs ] else: libs = [] - jconn = _jdbc_connect(jclassname, url, driver_args, jars, libs) - return Connection(jconn, _converters) + return Connection(jconn, _converters, timeout) # DB-API 2.0 Connection Object class Connection(object): @@ -395,10 +394,11 @@ class Connection(object): DataError = DataError NotSupportedError = NotSupportedError - def __init__(self, jconn, converters): + def __init__(self, jconn, converters, timeout=None): self.jconn = jconn self._closed = False self._converters = converters + self._timeout = timeout def close(self): if self._closed: @@ -419,7 +419,7 @@ def rollback(self): _handle_sql_exception() def cursor(self): - return Cursor(self, self._converters) + return Cursor(self, self._converters, self._timeout) # DB-API 2.0 Cursor Object class Cursor(object): @@ -430,9 +430,10 @@ class Cursor(object): _rs = None _description = None - def __init__(self, connection, converters): + def __init__(self, connection, converters, timeout=None): self._connection = connection self._converters = converters + self._timeout = timeout @property def description(self): @@ -486,9 +487,12 @@ def _close_last(self): def _set_stmt_parms(self, prep_stmt, parameters): for i in range(len(parameters)): - # print (i, parameters[i], type(parameters[i])) prep_stmt.setObject(i + 1, parameters[i]) + # https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#setQueryTimeout(int) + if self._timeout is not None: + prep_stmt.setQueryTimeout(int(self._timeout)) # unit: seconds + def execute(self, operation, parameters=None): if self._connection._closed: raise Error() From 2b4a7e561f64cc9898194e92a6997818af26f8b0 Mon Sep 17 00:00:00 2001 From: Pablo Fernandez Date: Thu, 3 Jan 2019 13:54:19 -0300 Subject: [PATCH 4/5] accidentally removed line --- jaydebeapi/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/jaydebeapi/__init__.py b/jaydebeapi/__init__.py index dba5cb6..8199567 100644 --- a/jaydebeapi/__init__.py +++ b/jaydebeapi/__init__.py @@ -378,6 +378,7 @@ def connect(jclassname, url, driver_args=None, jars=None, libs=None, timeout=Non libs = [ libs ] else: libs = [] + jconn = _jdbc_connect(jclassname, url, driver_args, jars, libs) return Connection(jconn, _converters, timeout) # DB-API 2.0 Connection Object From 5c7fee97305ad3f41e265c4c87ce7483653df0f4 Mon Sep 17 00:00:00 2001 From: Pablo Fernandez Date: Thu, 3 Jan 2019 14:38:14 -0300 Subject: [PATCH 5/5] timeout test --- test/test_mock.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/test_mock.py b/test/test_mock.py index 09443a1..03eaa06 100644 --- a/test/test_mock.py +++ b/test/test_mock.py @@ -106,3 +106,12 @@ def test_runtime_exception_on_rollback(self): fail("expected exception") except jaydebeapi.InterfaceError as e: self.assertEquals(str(e), "java.lang.RuntimeException: expected") + + def test_connection_timeout(self): + driver = 'org.jaydebeapi.mockdriver.MockDriver' + url = 'jdbc:jaydebeapi://dummyurl' + conn = jaydebeapi.connect(driver, url, timeout=10) + cursor = conn.cursor() + cursor.execute("dummy stmt") + result = cursor.fetchone() + self.assertIsNotNone(result)