[Python-modules-commits] [aiopg] 01/04: Import aiopg_0.10.0.orig.tar.gz
Piotr Ożarowski
piotr at moszumanska.debian.org
Thu Jul 21 20:21:32 UTC 2016
This is an automated email from the git hooks/post-receive script.
piotr pushed a commit to branch master
in repository aiopg.
commit b3339dfb13845f2c528a33e0cdbb8e15a35aba44
Author: Piotr Ożarowski <piotr at debian.org>
Date: Thu Jul 21 22:16:20 2016 +0200
Import aiopg_0.10.0.orig.tar.gz
---
CHANGES.txt | 15 +++++++++++++++
PKG-INFO | 41 +++++++++++++++++++++++++++++++----------
README.rst | 22 ++++++++++++++--------
aiopg.egg-info/PKG-INFO | 41 +++++++++++++++++++++++++++++++----------
aiopg/__init__.py | 2 +-
aiopg/connection.py | 18 +++++++++++-------
aiopg/pool.py | 21 ++++++++++++++++-----
aiopg/sa/connection.py | 6 +-----
aiopg/sa/engine.py | 4 ++--
aiopg/utils.py | 13 +++++++++++++
setup.cfg | 2 +-
setup.py | 6 +++---
12 files changed, 139 insertions(+), 52 deletions(-)
diff --git a/CHANGES.txt b/CHANGES.txt
index 07bc8c4..c8da093 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,6 +1,21 @@
CHANGES
-------
+0.10.0 (2016-07-16)
+^^^^^^^^^^^^^^^^^^^
+
+* Refactor tests to use dockerized Postgres server #107
+
+* Reduce default pool minsize to 1 #106
+
+* Explicitly enumerate packages in setup.py #85
+
+* Remove expired connections from pool on acquire #116
+
+* Don't crash when Connection is GC'ed #124
+
+* Use loop.create_future() if available
+
0.9.2 (2016-01-31)
^^^^^^^^^^^^^^^^^^
diff --git a/PKG-INFO b/PKG-INFO
index ec5334c..7c28766 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,8 +1,8 @@
Metadata-Version: 1.1
Name: aiopg
-Version: 0.9.2
+Version: 0.10.0
Summary: Postgres integration with asyncio.
-Home-page: http://aiopg.readthedocs.org
+Home-page: https://aiopg.readthedocs.io
Author: Andrew Svetlov
Author-email: andrew.svetlov at gmail.com
License: BSD
@@ -43,13 +43,12 @@ Description: aiopg
Example of SQLAlchemy optional integration
- -------------------------------------------
+ ------------------------------------------
::
import asyncio
from aiopg.sa import create_engine
- from sqlalchemy.schema import CreateTable
import sqlalchemy as sa
metadata = sa.MetaData()
@@ -58,6 +57,12 @@ Description: aiopg
sa.Column('id', sa.Integer, primary_key=True),
sa.Column('val', sa.String(255)))
+ async def create_table(engine):
+ async with engine.acquire() as conn:
+ await conn.execute('DROP TABLE IF EXISTS tbl')
+ await conn.execute('''CREATE TABLE tbl (
+ id serial PRIMARY KEY,
+ val varchar(255))''')
async def go():
async with create_engine(user='aiopg',
@@ -65,15 +70,16 @@ Description: aiopg
host='127.0.0.1',
password='passwd') as engine:
- async with engine.acquire() as conn:
- await conn.execute(tbl.insert().values(val='abc'))
+ async with engine.acquire() as conn:
+ await conn.execute(tbl.insert().values(val='abc'))
- async for row in conn.execute(tbl.select()):
- print(row.id, row.val)
+ async for row in conn.execute(tbl.select()):
+ print(row.id, row.val)
- asyncio.get_event_loop().run_until_complete(go())
+ loop = asyncio.get_event_loop()
+ loop.run_until_complete(go())
- For ``yield from`` based code see ``./examples`` folder, files with
+ For ``yield from`` based code, see the ``./examples`` folder, files with
``old_style`` part in their names.
.. _PostgreSQL: http://www.postgresql.org/
@@ -89,6 +95,21 @@ Description: aiopg
CHANGES
-------
+ 0.10.0 (2016-07-16)
+ ^^^^^^^^^^^^^^^^^^^
+
+ * Refactor tests to use dockerized Postgres server #107
+
+ * Reduce default pool minsize to 1 #106
+
+ * Explicitly enumerate packages in setup.py #85
+
+ * Remove expired connections from pool on acquire #116
+
+ * Don't crash when Connection is GC'ed #124
+
+ * Use loop.create_future() if available
+
0.9.2 (2016-01-31)
^^^^^^^^^^^^^^^^^^
diff --git a/README.rst b/README.rst
index 704759c..5276407 100644
--- a/README.rst
+++ b/README.rst
@@ -34,13 +34,12 @@ Example
Example of SQLAlchemy optional integration
--------------------------------------------
+------------------------------------------
::
import asyncio
from aiopg.sa import create_engine
- from sqlalchemy.schema import CreateTable
import sqlalchemy as sa
metadata = sa.MetaData()
@@ -49,6 +48,12 @@ Example of SQLAlchemy optional integration
sa.Column('id', sa.Integer, primary_key=True),
sa.Column('val', sa.String(255)))
+ async def create_table(engine):
+ async with engine.acquire() as conn:
+ await conn.execute('DROP TABLE IF EXISTS tbl')
+ await conn.execute('''CREATE TABLE tbl (
+ id serial PRIMARY KEY,
+ val varchar(255))''')
async def go():
async with create_engine(user='aiopg',
@@ -56,15 +61,16 @@ Example of SQLAlchemy optional integration
host='127.0.0.1',
password='passwd') as engine:
- async with engine.acquire() as conn:
- await conn.execute(tbl.insert().values(val='abc'))
+ async with engine.acquire() as conn:
+ await conn.execute(tbl.insert().values(val='abc'))
- async for row in conn.execute(tbl.select()):
- print(row.id, row.val)
+ async for row in conn.execute(tbl.select()):
+ print(row.id, row.val)
- asyncio.get_event_loop().run_until_complete(go())
+ loop = asyncio.get_event_loop()
+ loop.run_until_complete(go())
-For ``yield from`` based code see ``./examples`` folder, files with
+For ``yield from`` based code, see the ``./examples`` folder, files with
``old_style`` part in their names.
.. _PostgreSQL: http://www.postgresql.org/
diff --git a/aiopg.egg-info/PKG-INFO b/aiopg.egg-info/PKG-INFO
index ec5334c..7c28766 100644
--- a/aiopg.egg-info/PKG-INFO
+++ b/aiopg.egg-info/PKG-INFO
@@ -1,8 +1,8 @@
Metadata-Version: 1.1
Name: aiopg
-Version: 0.9.2
+Version: 0.10.0
Summary: Postgres integration with asyncio.
-Home-page: http://aiopg.readthedocs.org
+Home-page: https://aiopg.readthedocs.io
Author: Andrew Svetlov
Author-email: andrew.svetlov at gmail.com
License: BSD
@@ -43,13 +43,12 @@ Description: aiopg
Example of SQLAlchemy optional integration
- -------------------------------------------
+ ------------------------------------------
::
import asyncio
from aiopg.sa import create_engine
- from sqlalchemy.schema import CreateTable
import sqlalchemy as sa
metadata = sa.MetaData()
@@ -58,6 +57,12 @@ Description: aiopg
sa.Column('id', sa.Integer, primary_key=True),
sa.Column('val', sa.String(255)))
+ async def create_table(engine):
+ async with engine.acquire() as conn:
+ await conn.execute('DROP TABLE IF EXISTS tbl')
+ await conn.execute('''CREATE TABLE tbl (
+ id serial PRIMARY KEY,
+ val varchar(255))''')
async def go():
async with create_engine(user='aiopg',
@@ -65,15 +70,16 @@ Description: aiopg
host='127.0.0.1',
password='passwd') as engine:
- async with engine.acquire() as conn:
- await conn.execute(tbl.insert().values(val='abc'))
+ async with engine.acquire() as conn:
+ await conn.execute(tbl.insert().values(val='abc'))
- async for row in conn.execute(tbl.select()):
- print(row.id, row.val)
+ async for row in conn.execute(tbl.select()):
+ print(row.id, row.val)
- asyncio.get_event_loop().run_until_complete(go())
+ loop = asyncio.get_event_loop()
+ loop.run_until_complete(go())
- For ``yield from`` based code see ``./examples`` folder, files with
+ For ``yield from`` based code, see the ``./examples`` folder, files with
``old_style`` part in their names.
.. _PostgreSQL: http://www.postgresql.org/
@@ -89,6 +95,21 @@ Description: aiopg
CHANGES
-------
+ 0.10.0 (2016-07-16)
+ ^^^^^^^^^^^^^^^^^^^
+
+ * Refactor tests to use dockerized Postgres server #107
+
+ * Reduce default pool minsize to 1 #106
+
+ * Explicitly enumerate packages in setup.py #85
+
+ * Remove expired connections from pool on acquire #116
+
+ * Don't crash when Connection is GC'ed #124
+
+ * Use loop.create_future() if available
+
0.9.2 (2016-01-31)
^^^^^^^^^^^^^^^^^^
diff --git a/aiopg/__init__.py b/aiopg/__init__.py
index 8458391..1892d93 100644
--- a/aiopg/__init__.py
+++ b/aiopg/__init__.py
@@ -10,7 +10,7 @@ from .pool import create_pool, Pool
__all__ = ('connect', 'create_pool', 'Connection', 'Cursor', 'Pool',
'version', 'version_info', 'DEFAULT_TIMEOUT')
-__version__ = '0.9.2'
+__version__ = '0.10.0'
version = __version__ + ' , Python ' + sys.version
diff --git a/aiopg/connection.py b/aiopg/connection.py
index 864e8a4..a34874a 100644
--- a/aiopg/connection.py
+++ b/aiopg/connection.py
@@ -11,7 +11,7 @@ from psycopg2.extensions import (
from psycopg2 import extras
from .cursor import Cursor
-from .utils import _ContextManager, PY_35
+from .utils import _ContextManager, PY_35, create_future
__all__ = ('connect',)
@@ -61,7 +61,7 @@ def _connect(dsn=None, *, timeout=TIMEOUT, loop=None, enable_json=True,
if loop is None:
loop = asyncio.get_event_loop()
- waiter = asyncio.Future(loop=loop)
+ waiter = create_future(loop)
conn = Connection(dsn, loop, timeout, waiter, bool(echo), **kwargs)
try:
yield from conn._poll(waiter, timeout)
@@ -170,7 +170,7 @@ class Connection:
if self._waiter is not None:
raise RuntimeError('%s() called while another coroutine is '
'already waiting for incoming data' % func_name)
- self._waiter = asyncio.Future(loop=self._loop)
+ self._waiter = create_future(self._loop)
return self._waiter
@asyncio.coroutine
@@ -182,7 +182,7 @@ class Connection:
def cancel():
if not self._isexecuting():
return
- self._waiter = asyncio.Future(loop=self._loop)
+ self._waiter = create_future(self._loop)
self._conn.cancel()
try:
yield from self._waiter
@@ -252,7 +252,7 @@ class Connection:
if self._waiter is not None and not self._waiter.done():
self._waiter.set_exception(
psycopg2.OperationalError("Connection closed"))
- ret = asyncio.Future(loop=self._loop)
+ ret = create_future(self._loop)
ret.set_result(None)
return ret
@@ -325,7 +325,7 @@ class Connection:
@asyncio.coroutine
def cancel():
- self._waiter = asyncio.Future(loop=self._loop)
+ self._waiter = create_future(self._loop)
self._conn.cancel()
try:
yield from self._waiter
@@ -449,7 +449,11 @@ class Connection:
if PY_341: # pragma: no branch
def __del__(self):
- if not self._conn.closed:
+ try:
+ _conn = self._conn
+ except AttributeError:
+ return
+ if _conn is not None and not _conn.closed:
self.close()
warnings.warn("Unclosed connection {!r}".format(self),
ResourceWarning)
diff --git a/aiopg/pool.py b/aiopg/pool.py
index bc2b93b..64b7591 100644
--- a/aiopg/pool.py
+++ b/aiopg/pool.py
@@ -9,13 +9,14 @@ from psycopg2.extensions import TRANSACTION_STATUS_IDLE
from .connection import connect, TIMEOUT
from .log import logger
from .utils import (PY_35, _PoolContextManager, _PoolConnectionContextManager,
- _PoolCursorContextManager, _PoolAcquireContextManager)
+ _PoolCursorContextManager, _PoolAcquireContextManager,
+ ensure_future, create_future)
PY_341 = sys.version_info >= (3, 4, 1)
-def create_pool(dsn=None, *, minsize=10, maxsize=10,
+def create_pool(dsn=None, *, minsize=1, maxsize=10,
loop=None, timeout=TIMEOUT,
enable_json=True, enable_hstore=True, enable_uuid=True,
echo=False,
@@ -28,7 +29,7 @@ def create_pool(dsn=None, *, minsize=10, maxsize=10,
@asyncio.coroutine
-def _create_pool(dsn=None, *, minsize=10, maxsize=10,
+def _create_pool(dsn=None, *, minsize=1, maxsize=10,
loop=None, timeout=TIMEOUT,
enable_json=True, enable_hstore=True, enable_uuid=True,
echo=False,
@@ -176,6 +177,16 @@ class Pool(asyncio.AbstractServer):
@asyncio.coroutine
def _fill_free_pool(self, override_min):
+ # iterate over free connections and remove timeouted ones
+ n, free = 0, len(self._free)
+ while n < free:
+ conn = self._free[-1]
+ if conn.closed:
+ self._free.pop()
+ else:
+ self._free.rotate()
+ n += 1
+
while self.size < self.minsize:
self._acquiring += 1
try:
@@ -218,7 +229,7 @@ class Pool(asyncio.AbstractServer):
def release(self, conn):
"""Release free connection back to the connection pool.
"""
- fut = asyncio.Future(loop=self._loop)
+ fut = create_future(self._loop)
fut.set_result(None)
if conn in self._terminated:
assert conn.closed, conn
@@ -238,7 +249,7 @@ class Pool(asyncio.AbstractServer):
conn.close()
else:
self._free.append(conn)
- fut = asyncio.async(self._wakeup(), loop=self._loop)
+ fut = ensure_future(self._wakeup(), loop=self._loop)
return fut
@asyncio.coroutine
diff --git a/aiopg/sa/connection.py b/aiopg/sa/connection.py
index 0999b77..7897e89 100644
--- a/aiopg/sa/connection.py
+++ b/aiopg/sa/connection.py
@@ -1,5 +1,4 @@
import asyncio
-import weakref
from sqlalchemy.sql import ClauseElement
from sqlalchemy.sql.dml import UpdateBase
@@ -18,7 +17,6 @@ class SAConnection:
self._connection = connection
self._transaction = None
self._savepoint_seq = 0
- self._weak_results = weakref.WeakSet()
self._engine = engine
self._dialect = engine.dialect
@@ -108,9 +106,7 @@ class SAConnection:
"SQLAlchemy data "
"selection/modification clause")
- ret = ResultProxy(self, cursor, self._dialect)
- self._weak_results.add(ret)
- return ret
+ return ResultProxy(self, cursor, self._dialect)
@asyncio.coroutine
def scalar(self, query, *multiparams, **params):
diff --git a/aiopg/sa/engine.py b/aiopg/sa/engine.py
index 9f7b9c1..8987139 100644
--- a/aiopg/sa/engine.py
+++ b/aiopg/sa/engine.py
@@ -24,7 +24,7 @@ _dialect.supports_sane_multi_rowcount = True # psycopg 2.0.9+
_dialect._has_native_hstore = True
-def create_engine(dsn=None, *, minsize=10, maxsize=10, loop=None,
+def create_engine(dsn=None, *, minsize=1, maxsize=10, loop=None,
dialect=_dialect, timeout=TIMEOUT, **kwargs):
"""A coroutine for Engine creation.
@@ -40,7 +40,7 @@ def create_engine(dsn=None, *, minsize=10, maxsize=10, loop=None,
@asyncio.coroutine
-def _create_engine(dsn=None, *, minsize=10, maxsize=10, loop=None,
+def _create_engine(dsn=None, *, minsize=1, maxsize=10, loop=None,
dialect=_dialect, timeout=TIMEOUT, **kwargs):
if loop is None:
loop = asyncio.get_event_loop()
diff --git a/aiopg/utils.py b/aiopg/utils.py
index 9e675ff..c22120c 100644
--- a/aiopg/utils.py
+++ b/aiopg/utils.py
@@ -10,6 +10,19 @@ else:
base = object
+try:
+ ensure_future = asyncio.ensure_future
+except AttributeError:
+ ensure_future = asyncio.async
+
+
+def create_future(loop):
+ try:
+ return loop.create_future()
+ except AttributeError:
+ return asyncio.Future(loop=loop)
+
+
class _ContextManager(base):
__slots__ = ('_coro', '_obj')
diff --git a/setup.cfg b/setup.cfg
index 00bb0ae..861a9f5 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,5 +1,5 @@
[egg_info]
+tag_build =
tag_date = 0
tag_svn_revision = 0
-tag_build =
diff --git a/setup.py b/setup.py
index 427bf4c..041ddf5 100644
--- a/setup.py
+++ b/setup.py
@@ -1,7 +1,7 @@
import os
import re
import sys
-from setuptools import setup, find_packages
+from setuptools import setup
install_requires = ['psycopg2>=2.5.2']
@@ -56,10 +56,10 @@ setup(name='aiopg',
platforms=['POSIX'],
author='Andrew Svetlov',
author_email='andrew.svetlov at gmail.com',
- url='http://aiopg.readthedocs.org',
+ url='https://aiopg.readthedocs.io',
download_url='https://pypi.python.org/pypi/aiopg',
license='BSD',
- packages=find_packages(),
+ packages=['aiopg', 'aiopg.sa'],
install_requires=install_requires,
extras_require=extras_require,
include_package_data=True)
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/aiopg.git
More information about the Python-modules-commits
mailing list