Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-psycopg2cffi for
openSUSE:Factory checked in at 2021-10-12 21:51:42
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-psycopg2cffi (Old)
and /work/SRC/openSUSE:Factory/.python-psycopg2cffi.new.2443 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-psycopg2cffi"
Tue Oct 12 21:51:42 2021 rev:2 rq:924941 version:2.9.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-psycopg2cffi/python-psycopg2cffi.changes
2020-06-10 00:47:32.254807075 +0200
+++
/work/SRC/openSUSE:Factory/.python-psycopg2cffi.new.2443/python-psycopg2cffi.changes
2021-10-12 21:51:42.664074235 +0200
@@ -1,0 +2,15 @@
+Tue Oct 12 10:18:07 UTC 2021 - ecsos <[email protected]>
+
+- Update to 2.9.0
+ * New features:
+ - Add execute_batch and execute_values to psycopg2cffi.extras in #98
+ - psycopg2cffi.extras: add fetch argument to execute_values() in #119
+ * Bug fixes:
+ - Fix for async keyword argument when creating a connection in #104
+ - Allow adapters to be passed as arguments of cursor's execute() in #107
+ - Fix installation with old cffi by dand-oss in #116
+ * Test changes:
+ - Dropped support for python 2.6, 3.3, 3.4 in #109
+ - Added support for python 3.8 in #108
+
+-------------------------------------------------------------------
Old:
----
psycopg2cffi-2.8.1.tar.gz
New:
----
psycopg2cffi-2.9.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-psycopg2cffi.spec ++++++
--- /var/tmp/diff_new_pack.nbrNTO/_old 2021-10-12 21:51:43.208075014 +0200
+++ /var/tmp/diff_new_pack.nbrNTO/_new 2021-10-12 21:51:43.212075019 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-psycopg2cffi
#
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2021 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,14 +17,15 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
+%define skip_python2 1
Name: python-psycopg2cffi
-Version: 2.8.1
+Version: 2.9.0
Release: 0
Summary: Implementation of the psycopg2 module using cffi
License: LGPL-3.0-or-later
URL: https://github.com/chtd/psycopg2cffi
Source:
https://files.pythonhosted.org/packages/source/p/psycopg2cffi/psycopg2cffi-%{version}.tar.gz
-BuildRequires: %{python_module devel}
+BuildRequires: %{python_module devel >= 3.5}
BuildRequires: %{python_module setuptools}
BuildRequires: fdupes
BuildRequires: postgresql-server-devel
@@ -39,7 +40,7 @@
%python_subpackages
%description
-Implementation of the psycopg2 module using cffi.
+This is a implementation of the psycopg2 module using cffi.
%prep
%setup -q -n psycopg2cffi-%{version}
++++++ psycopg2cffi-2.8.1.tar.gz -> psycopg2cffi-2.9.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/psycopg2cffi-2.8.1/PKG-INFO
new/psycopg2cffi-2.9.0/PKG-INFO
--- old/psycopg2cffi-2.8.1/PKG-INFO 2018-07-31 19:34:01.000000000 +0200
+++ new/psycopg2cffi-2.9.0/PKG-INFO 2021-01-27 14:00:54.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: psycopg2cffi
-Version: 2.8.1
+Version: 2.9.0
Summary: .. image:: https://travis-ci.org/chtd/psycopg2cffi.svg?branch=master
Home-page: http://github.com/chtd/psycopg2cffi
Author: Konstantin Lopuhin
@@ -33,7 +33,7 @@
OS X 10.8 - 10.10.
It should be possible to make it work on Windows, but I did not test
it.
- This module works under CPython 2.6+, CPython 3.2+, PyPy 2 and PyPy 3
+ This module works under CPython 2.7+, CPython 3.5+, PyPy 2 and PyPy 3
(PyPy version should be at least 2.0, which is ancient history now).
To use this package with Django or SQLAlchemy invoke a compatibility
@@ -86,6 +86,25 @@
Release notes
-------------
+ 2.9.0 (27 Jan 2021)
+ +++++++++++++++++++
+
+ New features:
+
+ - Add execute_batch and execute_values to psycopg2cffi.extras by
@fake-name in #98
+ - psycopg2cffi.extras: add fetch argument to execute_values() by
@intelfx in #119
+
+ Bug fixes:
+
+ - Fix for async keyword argument when creating a connection by @donalm
in #104
+ - Allow adapters to be passed as arguments of cursor's execute() by
@amigrave in #107
+ - Fix installation with old cffi by dand-oss in #116
+
+ Test changes:
+
+ - Dropped support for python 2.6, 3.3, 3.4 by @thedrow in #109
+ - Added support for python 3.8 by @thedrow in #108
+
2.8.1 (31 July 2018)
++++++++++++++++++++
@@ -195,14 +214,11 @@
Classifier: Development Status :: 3 - Alpha
Classifier: License :: OSI Approved :: GNU Library or Lesser General Public
License (LGPL)
Classifier: Intended Audience :: Developers
-Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
-Classifier: Programming Language :: Python :: 3.2
-Classifier: Programming Language :: Python :: 3.3
-Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Programming Language :: SQL
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/psycopg2cffi-2.8.1/README.rst
new/psycopg2cffi-2.9.0/README.rst
--- old/psycopg2cffi-2.8.1/README.rst 2018-07-31 19:33:15.000000000 +0200
+++ new/psycopg2cffi-2.9.0/README.rst 2021-01-27 13:57:03.000000000 +0100
@@ -25,7 +25,7 @@
OS X 10.8 - 10.10.
It should be possible to make it work on Windows, but I did not test it.
-This module works under CPython 2.6+, CPython 3.2+, PyPy 2 and PyPy 3
+This module works under CPython 2.7+, CPython 3.5+, PyPy 2 and PyPy 3
(PyPy version should be at least 2.0, which is ancient history now).
To use this package with Django or SQLAlchemy invoke a compatibility
@@ -78,6 +78,25 @@
Release notes
-------------
+2.9.0 (27 Jan 2021)
++++++++++++++++++++
+
+New features:
+
+- Add execute_batch and execute_values to psycopg2cffi.extras by @fake-name in
#98
+- psycopg2cffi.extras: add fetch argument to execute_values() by @intelfx in
#119
+
+Bug fixes:
+
+- Fix for async keyword argument when creating a connection by @donalm in #104
+- Allow adapters to be passed as arguments of cursor's execute() by @amigrave
in #107
+- Fix installation with old cffi by dand-oss in #116
+
+Test changes:
+
+- Dropped support for python 2.6, 3.3, 3.4 by @thedrow in #109
+- Added support for python 3.8 by @thedrow in #108
+
2.8.1 (31 July 2018)
++++++++++++++++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/psycopg2cffi-2.8.1/psycopg2cffi/__init__.py
new/psycopg2cffi-2.9.0/psycopg2cffi/__init__.py
--- old/psycopg2cffi-2.8.1/psycopg2cffi/__init__.py 2018-07-31
19:33:22.000000000 +0200
+++ new/psycopg2cffi-2.9.0/psycopg2cffi/__init__.py 2021-01-27
13:57:03.000000000 +0100
@@ -10,7 +10,7 @@
from psycopg2cffi._impl.exceptions import *
from psycopg2cffi._impl.typecasts import BINARY, DATETIME, NUMBER, ROWID,
STRING
-__version__ = '2.8.1'
+__version__ = '2.9.0'
apilevel = '2.0'
paramstyle = 'pyformat'
threadsafety = 2
@@ -88,11 +88,11 @@
if port is not None:
items.append(('port', port))
- kwasync = {}
+ async_ = False
if 'async' in kwargs:
- kwasync['async'] = kwargs.pop('async')
+ async_ = kwargs.pop('async')
if 'async_' in kwargs:
- kwasync['async_'] = kwargs.pop('async_')
+ async_ = kwargs.pop('async_')
items.extend([(k, v) for (k, v) in kwargs.items() if v is not None])
@@ -108,7 +108,7 @@
dsn = " ".join(["%s=%s" % (k, _param_escape(str(v)))
for (k, v) in items])
- conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
+ conn = _connect(dsn, connection_factory=connection_factory, async_=async_)
if cursor_factory is not None:
conn.cursor_factory = cursor_factory
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/psycopg2cffi-2.8.1/psycopg2cffi/_impl/adapters.py
new/psycopg2cffi-2.9.0/psycopg2cffi/_impl/adapters.py
--- old/psycopg2cffi-2.8.1/psycopg2cffi/_impl/adapters.py 2017-08-11
13:15:20.000000000 +0200
+++ new/psycopg2cffi-2.9.0/psycopg2cffi/_impl/adapters.py 2019-10-23
19:52:36.000000000 +0200
@@ -289,7 +289,10 @@
"""Helper method"""
if param is None:
return b'NULL'
- adapter = adapt(param)
+ if isinstance(param, _BaseAdapter):
+ adapter = param
+ else:
+ adapter = adapt(param)
try:
adapter.prepare(conn)
except AttributeError:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/psycopg2cffi-2.8.1/psycopg2cffi/extras.py
new/psycopg2cffi-2.9.0/psycopg2cffi/extras.py
--- old/psycopg2cffi-2.8.1/psycopg2cffi/extras.py 2018-07-31
19:19:12.000000000 +0200
+++ new/psycopg2cffi-2.9.0/psycopg2cffi/extras.py 2021-01-27
13:57:03.000000000 +0100
@@ -999,6 +999,166 @@
return caster
+
+def _paginate(seq, page_size):
+ """Consume an iterable and return it in chunks.
+
+ Every chunk is at most `page_size`. Never return an empty chunk.
+ """
+ page = []
+ it = iter(seq)
+ while 1:
+ try:
+ for i in range(page_size):
+ page.append(next(it))
+ yield page
+ page = []
+ except StopIteration:
+ if page:
+ yield page
+ return
+
+
+def execute_batch(cur, sql, argslist, page_size=100):
+ r"""Execute groups of statements in fewer server roundtrips.
+
+ Execute *sql* several times, against all parameters set (sequences or
+ mappings) found in *argslist*.
+
+ The function is semantically similar to
+
+ .. parsed-literal::
+
+ *cur*\.\ `~cursor.executemany`\ (\ *sql*\ , *argslist*\ )
+
+ but has a different implementation: Psycopg will join the statements into
+ fewer multi-statement commands, each one containing at most *page_size*
+ statements, resulting in a reduced number of server roundtrips.
+
+ After the execution of the function the `cursor.rowcount` property will
+ **not** contain a total result.
+
+ """
+ for page in _paginate(argslist, page_size=page_size):
+ sqls = [cur.mogrify(sql, args) for args in page]
+ cur.execute(b";".join(sqls))
+
+
+def execute_values(cur, sql, argslist, template=None, page_size=100,
fetch=False):
+ '''Execute a statement using :sql:`VALUES` with a sequence of parameters.
+
+ :param cur: the cursor to use to execute the query.
+
+ :param sql: the query to execute. It must contain a single ``%s``
+ placeholder, which will be replaced by a `VALUES list`__.
+ Example: ``"INSERT INTO mytable (id, f1, f2) VALUES %s"``.
+
+ :param argslist: sequence of sequences or dictionaries with the arguments
+ to send to the query. The type and content must be consistent with
+ *template*.
+
+ :param template: the snippet to merge to every item in *argslist* to
+ compose the query.
+
+ - If the *argslist* items are sequences it should contain positional
+ placeholders (e.g. ``"(%s, %s, %s)"``, or ``"(%s, %s, 42)``" if there
+ are constants value...).
+
+ - If the *argslist* items are mappings it should contain named
+ placeholders (e.g. ``"(%(id)s, %(f1)s, 42)"``).
+
+ If not specified, assume the arguments are sequence and use a simple
+ positional template (i.e. ``(%s, %s, ...)``), with the number of
+ placeholders sniffed by the first element in *argslist*.
+
+ :param page_size: maximum number of *argslist* items to include in every
+ statement. If there are more items the function will execute more than
+ one statement.
+
+ :param fetch: if `!True` return the query results into a list (like in a
+ `~cursor.fetchall()`). Useful for queries with :sql:`RETURNING`
+ clause.
+
+ .. __: https://www.postgresql.org/docs/current/static/queries-values.html
+
+ After the execution of the function the `cursor.rowcount` property will
+ **not** contain a total result.
+
+ While :sql:`INSERT` is an obvious candidate for this function it is
+ possible to use it with other statements, for example::
+
+ >>> cur.execute(
+ ... "create table test (id int primary key, v1 int, v2 int)")
+
+ >>> execute_values(cur,
+ ... "INSERT INTO test (id, v1, v2) VALUES %s",
+ ... [(1, 2, 3), (4, 5, 6), (7, 8, 9)])
+
+ >>> execute_values(cur,
+ ... """UPDATE test SET v1 = data.v1 FROM (VALUES %s) AS data (id, v1)
+ ... WHERE test.id = data.id""",
+ ... [(1, 20), (4, 50)])
+
+ >>> cur.execute("select * from test order by id")
+ >>> cur.fetchall()
+ [(1, 20, 3), (4, 50, 6), (7, 8, 9)])
+
+ '''
+ # we can't just use sql % vals because vals is bytes: if sql is bytes
+ # there will be some decoding error because of stupid codec used, and Py3
+ # doesn't implement % on bytes.
+ if not isinstance(sql, bytes):
+ sql = sql.encode(_ext.encodings[cur.connection.encoding])
+ pre, post = _split_sql(sql)
+
+ result = [] if fetch else None
+ for page in _paginate(argslist, page_size=page_size):
+ if template is None:
+ template = b'(' + b','.join([b'%s'] * len(page[0])) + b')'
+ parts = pre[:]
+ for args in page:
+ parts.append(cur.mogrify(template, args))
+ parts.append(b',')
+ parts[-1:] = post
+ cur.execute(b''.join(parts))
+ if fetch:
+ result.extend(cur.fetchall())
+
+ return result
+
+
+def _split_sql(sql):
+ """Split *sql* on a single ``%s`` placeholder.
+
+ Split on the %s, perform %% replacement and return pre, post lists of
+ snippets.
+ """
+ curr = pre = []
+ post = []
+ tokens = _re.split(br'(%.)', sql)
+ for token in tokens:
+ if len(token) != 2 or token[:1] != b'%':
+ curr.append(token)
+ continue
+
+ if token[1:] == b's':
+ if curr is pre:
+ curr = post
+ else:
+ raise ValueError(
+ "the query contains more than one '%s' placeholder")
+ elif token[1:] == b'%':
+ curr.append(b'%')
+ else:
+ raise ValueError("unsupported format character: '%s'"
+ % token[1:].decode('ascii', 'replace'))
+
+ if curr is pre:
+ raise ValueError("the query doesn't contain any '%s' placeholder")
+
+ return pre, post
+
+
# expose the json adaptation stuff into the module
from psycopg2cffi._json import json, Json, register_json, register_default_json
from psycopg2cffi._json import register_default_json, register_default_jsonb
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/psycopg2cffi-2.8.1/psycopg2cffi.egg-info/PKG-INFO
new/psycopg2cffi-2.9.0/psycopg2cffi.egg-info/PKG-INFO
--- old/psycopg2cffi-2.8.1/psycopg2cffi.egg-info/PKG-INFO 2018-07-31
19:34:01.000000000 +0200
+++ new/psycopg2cffi-2.9.0/psycopg2cffi.egg-info/PKG-INFO 2021-01-27
14:00:54.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: psycopg2cffi
-Version: 2.8.1
+Version: 2.9.0
Summary: .. image:: https://travis-ci.org/chtd/psycopg2cffi.svg?branch=master
Home-page: http://github.com/chtd/psycopg2cffi
Author: Konstantin Lopuhin
@@ -33,7 +33,7 @@
OS X 10.8 - 10.10.
It should be possible to make it work on Windows, but I did not test
it.
- This module works under CPython 2.6+, CPython 3.2+, PyPy 2 and PyPy 3
+ This module works under CPython 2.7+, CPython 3.5+, PyPy 2 and PyPy 3
(PyPy version should be at least 2.0, which is ancient history now).
To use this package with Django or SQLAlchemy invoke a compatibility
@@ -86,6 +86,25 @@
Release notes
-------------
+ 2.9.0 (27 Jan 2021)
+ +++++++++++++++++++
+
+ New features:
+
+ - Add execute_batch and execute_values to psycopg2cffi.extras by
@fake-name in #98
+ - psycopg2cffi.extras: add fetch argument to execute_values() by
@intelfx in #119
+
+ Bug fixes:
+
+ - Fix for async keyword argument when creating a connection by @donalm
in #104
+ - Allow adapters to be passed as arguments of cursor's execute() by
@amigrave in #107
+ - Fix installation with old cffi by dand-oss in #116
+
+ Test changes:
+
+ - Dropped support for python 2.6, 3.3, 3.4 by @thedrow in #109
+ - Added support for python 3.8 by @thedrow in #108
+
2.8.1 (31 July 2018)
++++++++++++++++++++
@@ -195,14 +214,11 @@
Classifier: Development Status :: 3 - Alpha
Classifier: License :: OSI Approved :: GNU Library or Lesser General Public
License (LGPL)
Classifier: Intended Audience :: Developers
-Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
-Classifier: Programming Language :: Python :: 3.2
-Classifier: Programming Language :: Python :: 3.3
-Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Programming Language :: SQL
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/psycopg2cffi-2.8.1/setup.py
new/psycopg2cffi-2.9.0/setup.py
--- old/psycopg2cffi-2.8.1/setup.py 2018-07-31 18:16:45.000000000 +0200
+++ new/psycopg2cffi-2.9.0/setup.py 2021-01-27 13:58:55.000000000 +0100
@@ -42,14 +42,11 @@
'Development Status :: 3 - Alpha',
'License :: OSI Approved :: GNU Library or Lesser General Public
License (LGPL)',
'Intended Audience :: Developers',
- 'Programming Language :: Python :: 2.6',
'Programming Language :: Python :: 2.7',
- 'Programming Language :: Python :: 3.2',
- 'Programming Language :: Python :: 3.3',
- 'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7',
+ 'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: Implementation :: CPython',
'Programming Language :: Python :: Implementation :: PyPy',
'Programming Language :: SQL',
@@ -75,7 +72,7 @@
],
))
else:
- from distutils.command.build_py import build_py as _build_py
+ from setuptools.command.build_py import build_py as _build_py
class build_py(_build_py):
has_been_run = False