openSUSE Commits
Threads by month
- ----- 2024 -----
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
August 2021
- 1 participants
- 1985 discussions
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package transifex-client for openSUSE:Factory checked in at 2021-08-28 22:29:26
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/transifex-client (Old)
and /work/SRC/openSUSE:Factory/.transifex-client.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "transifex-client"
Sat Aug 28 22:29:26 2021 rev:16 rq:914751 version:0.13.9
Changes:
--------
--- /work/SRC/openSUSE:Factory/transifex-client/transifex-client.changes 2020-06-23 21:06:50.210276895 +0200
+++ /work/SRC/openSUSE:Factory/.transifex-client.new.1899/transifex-client.changes 2021-08-28 22:29:50.690020403 +0200
@@ -1,0 +2,5 @@
+Thu Aug 26 10:49:07 UTC 2021 - pgajdos(a)suse.com
+
+- %check: do not use setup.py test
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ transifex-client.spec ++++++
--- /var/tmp/diff_new_pack.8wD5ab/_old 2021-08-28 22:29:51.278021056 +0200
+++ /var/tmp/diff_new_pack.8wD5ab/_new 2021-08-28 22:29:51.278021056 +0200
@@ -1,7 +1,7 @@
#
# spec file for package transifex-client
#
-# 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
@@ -35,7 +35,7 @@
Requires: python3-setuptools
Requires: python3-urllib3 >= 1.24.2
Requires(post): update-alternatives
-Requires(postun): update-alternatives
+Requires(postun):update-alternatives
BuildArch: noarch
%description
@@ -68,7 +68,7 @@
ln -s -f %{_sysconfdir}/alternatives/tx %{buildroot}%{_bindir}/tx
%check
-python3 setup.py test
+python3 -m unittest
%post
%{_sbindir}/update-alternatives --install %{_bindir}/tx tx %{_bindir}/transifex-tx 20
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-user_agent for openSUSE:Factory checked in at 2021-08-28 22:29:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-user_agent (Old)
and /work/SRC/openSUSE:Factory/.python-user_agent.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-user_agent"
Sat Aug 28 22:29:25 2021 rev:6 rq:914750 version:0.1.9
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-user_agent/python-user_agent.changes 2020-05-19 14:48:19.104049066 +0200
+++ /work/SRC/openSUSE:Factory/.python-user_agent.new.1899/python-user_agent.changes 2021-08-28 22:29:50.146019798 +0200
@@ -1,0 +2,5 @@
+Thu Aug 26 08:51:30 UTC 2021 - pgajdos(a)suse.com
+
+- %check: really test the package, use %pytest rpm macro
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-user_agent.spec ++++++
--- /var/tmp/diff_new_pack.y6SIV5/_old 2021-08-28 22:29:50.554020252 +0200
+++ /var/tmp/diff_new_pack.y6SIV5/_new 2021-08-28 22:29:50.558020256 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-user_agent
#
-# 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
@@ -31,7 +31,7 @@
BuildRequires: python-rpm-macros
Requires: python-six
Requires(post): update-alternatives
-Requires(postun): update-alternatives
+Requires(postun):update-alternatives
BuildArch: noarch
# SECTION test requirements
BuildRequires: %{python_module pytest}
@@ -53,7 +53,8 @@
%python_expand %fdupes %{buildroot}%{$python_sitelib}
%check
-%python_exec setup.py test
+# test_changelog, test_ua_script*: no ua in the PATH
+%pytest -k 'not (test_ua_script or test_changelog)'
%post
%python_install_alternative ua
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package wine for openSUSE:Factory checked in at 2021-08-28 22:29:23
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/wine (Old)
and /work/SRC/openSUSE:Factory/.wine.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "wine"
Sat Aug 28 22:29:23 2021 rev:351 rq:914747 version:6.16
Changes:
--------
--- /work/SRC/openSUSE:Factory/wine/wine.changes 2021-08-16 10:17:50.446637091 +0200
+++ /work/SRC/openSUSE:Factory/.wine.new.1899/wine.changes 2021-08-28 22:29:47.910017313 +0200
@@ -1,0 +2,11 @@
+Sat Aug 28 07:17:43 UTC 2021 - Marcus Meissner <meissner(a)suse.com>
+
+- updated to 6.16 development release
+ - Initial version of a HID-based joystick backend.
+ - Improved high-DPI theming support.
+ - More preparation work for the GDI syscall interface.
+ - Better CodeView support in WineDump.
+ - Various bug fixes.
+- update staging to 6.16 release
+
+-------------------------------------------------------------------
Old:
----
wine-6.15.tar.xz
wine-6.15.tar.xz.sign
wine-staging-6.15.tar.xz
New:
----
wine-6.16.tar.xz
wine-6.16.tar.xz.sign
wine-staging-6.16.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ wine.spec ++++++
--- /var/tmp/diff_new_pack.2BdE9p/_old 2021-08-28 22:29:49.030018557 +0200
+++ /var/tmp/diff_new_pack.2BdE9p/_new 2021-08-28 22:29:49.034018562 +0200
@@ -29,8 +29,8 @@
%endif
# needs to be on top due to usage of %version macro below
-%define realver 6.15
-Version: 6.15
+%define realver 6.16
+Version: 6.16
Release: 0
%if "%{flavor}" != ""
@@ -158,7 +158,7 @@
ExclusiveArch: %{ix86} x86_64 ppc armv7l armv7hl aarch64
%if %{staging}
# upstream patch target version
-%define staging_version 6.15
+%define staging_version 6.16
Source100: wine-staging-%{staging_version}.tar.xz
BuildRequires: gtk3-devel
BuildRequires: libOSMesa-devel
++++++ _service ++++++
--- /var/tmp/diff_new_pack.2BdE9p/_old 2021-08-28 22:29:49.090018624 +0200
+++ /var/tmp/diff_new_pack.2BdE9p/_new 2021-08-28 22:29:49.090018624 +0200
@@ -3,7 +3,7 @@
<param name="versionformat">@PARENT_TAG@</param>
<param name="versionrewrite-pattern">v(.*)</param>
<param name="url">https://github.com/wine-staging/wine-staging.git</param>
- <param name="revision">refs/tags/v6.15</param>
+ <param name="revision">refs/tags/v6.16</param>
<param name="match-tag">v*.*</param>
<param name="scm">git</param>
</service>
++++++ wine-6.15.tar.xz -> wine-6.16.tar.xz ++++++
/work/SRC/openSUSE:Factory/wine/wine-6.15.tar.xz /work/SRC/openSUSE:Factory/.wine.new.1899/wine-6.16.tar.xz differ: char 26, line 1
++++++ wine-staging-6.15.tar.xz -> wine-staging-6.16.tar.xz ++++++
/work/SRC/openSUSE:Factory/wine/wine-staging-6.15.tar.xz /work/SRC/openSUSE:Factory/.wine.new.1899/wine-staging-6.16.tar.xz differ: char 15, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-aioitertools for openSUSE:Factory checked in at 2021-08-28 22:29:23
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-aioitertools (Old)
and /work/SRC/openSUSE:Factory/.python-aioitertools.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-aioitertools"
Sat Aug 28 22:29:23 2021 rev:3 rq:914749 version:0.8.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-aioitertools/python-aioitertools.changes 2021-05-13 22:18:59.163495261 +0200
+++ /work/SRC/openSUSE:Factory/.python-aioitertools.new.1899/python-aioitertools.changes 2021-08-28 22:29:49.402018971 +0200
@@ -1,0 +2,13 @@
+Tue Aug 17 10:11:54 UTC 2021 - John Paul Adrian Glaubitz <adrian.glaubitz(a)suse.com>
+
+- Update to 0.8.0:
+ - Added `builtins.any()` and `builtins.all()` (#44)
+ - `builtins.next()` takes an optional `default` parameter (#40, #41)
+ - `asyncio.gather()` now handles cancellation (#64)
+ - Better exception handling in `itertools.tee()` (#47)
+ - Removed dependency on typing_extensions for Python 3.8 and newer (#49)
+ - Improved documentation and formatting
+- Drop patches for issues fixed upstream
+ - stdlib-typing_extensions.patch
+
+-------------------------------------------------------------------
Old:
----
aioitertools-0.7.1.tar.gz
stdlib-typing_extensions.patch
New:
----
aioitertools-0.8.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-aioitertools.spec ++++++
--- /var/tmp/diff_new_pack.Gs9G80/_old 2021-08-28 22:29:49.902019527 +0200
+++ /var/tmp/diff_new_pack.Gs9G80/_new 2021-08-28 22:29:49.906019531 +0200
@@ -19,16 +19,13 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%define skip_python2 1
Name: python-aioitertools
-Version: 0.7.1
+Version: 0.8.0
Release: 0
Summary: itertools and builtins for AsyncIO and mixed iterables
License: MIT
Group: Development/Languages/Python
URL: https://aioitertools.omnilib.dev
Source: https://files.pythonhosted.org/packages/source/a/aioitertools/aioitertools-…
-# PATCH-FIX-UPSTREAM stdlib-typing_extensions.patch gh#omnilib/aioitertools#49 mcepl(a)suse.com
-# Improve dependencies for Python 3.8+
-Patch0: stdlib-typing_extensions.patch
BuildRequires: %{python_module asyncio}
BuildRequires: %{python_module setuptools}
BuildRequires: %{python_module typing_extensions if %python-base < 3.8}
++++++ aioitertools-0.7.1.tar.gz -> aioitertools-0.8.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aioitertools-0.7.1/.flake8 new/aioitertools-0.8.0/.flake8
--- old/aioitertools-0.7.1/.flake8 1970-01-01 01:00:00.000000000 +0100
+++ new/aioitertools-0.8.0/.flake8 2021-05-16 22:57:53.159477500 +0200
@@ -0,0 +1,13 @@
+[flake8]
+ignore =
+ # mccabe complexity
+ C901
+
+ # covered by black/usort
+ E1
+ E2
+ E3
+ E4
+max-line-length = 88
+per-file-ignores =
+ __init__.py: F401
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aioitertools-0.7.1/CHANGELOG.md new/aioitertools-0.8.0/CHANGELOG.md
--- old/aioitertools-0.7.1/CHANGELOG.md 2020-11-09 04:56:44.066201000 +0100
+++ new/aioitertools-0.8.0/CHANGELOG.md 2021-08-05 04:24:00.792124300 +0200
@@ -1,6 +1,31 @@
aioitertools
============
+v0.8.0
+------
+
+Feature release:
+
+- Added `builtins.any()` and `builtins.all()` (#44)
+- `builtins.next()` takes an optional `default` parameter (#40, #41)
+- `asyncio.gather()` now handles cancellation (#64)
+- Better exception handling in `itertools.tee()` (#47)
+- Removed dependency on typing_extensions for Python 3.8 and newer (#49)
+- Improved documentation and formatting
+
+```
+$ git shortlog -s v0.7.1...v0.8.0
+ 1 Bryan Forbes
+ 2 Jason Fried
+ 15 John Reese
+ 1 Kevin Stone
+ 3 Roger Aiudi
+ 3 Sunyeop Lee
+ 1 Yop
+ 10 pyup.io bot
+```
+
+
v0.7.1
------
@@ -176,7 +201,7 @@
- Unit tests for all builtins
```
-$ git shortlog -s ce32bdb1777f84e8f64b9470d81b84b754389dd9...v0.1.0
- 1 John Reese
+$ git shortlog -s v0.1.0
+ 2 John Reese
```
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aioitertools-0.7.1/PKG-INFO new/aioitertools-0.8.0/PKG-INFO
--- old/aioitertools-0.7.1/PKG-INFO 1970-01-01 01:00:00.000000000 +0100
+++ new/aioitertools-0.8.0/PKG-INFO 1970-01-01 01:00:00.000000000 +0100
@@ -1,7 +1,109 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.1
Name: aioitertools
-Version: 0.7.1
+Version: 0.8.0
Summary: itertools and builtins for AsyncIO and mixed iterables
Home-page: https://aioitertools.omnilib.dev
Author: John Reese
Author-email: john(a)noswap.com
+Requires-Python: >=3.6
+Description-Content-Type: text/markdown
+Classifier: Development Status :: 4 - Beta
+Classifier: Framework :: AsyncIO
+Classifier: Intended Audience :: Developers
+Classifier: License :: OSI Approved :: MIT License
+Classifier: Topic :: Software Development :: Libraries
+Requires-Dist: typing_extensions>=3.7; python_version < '3.8'
+Project-URL: Documentation, https://aioitertools.omnilib.dev/en/latest/
+Project-URL: Github, https://github.com/omnilib/aioitertools
+
+aioitertools
+============
+
+Implementation of itertools, builtins, and more for AsyncIO and mixed-type iterables.
+
+[![build status](https://github.com/omnilib/aioitertools/workflows/Build/badge.svg)]…
+[![code coverage](https://img.shields.io/codecov/c/gh/omnilib/aioitertools)](https://codecov.io/gh/omnilib/aioitertools)
+[![version](https://img.shields.io/pypi/v/aioitertools.svg)](https://pypi.org/project/aioitertools)
+[![license](https://img.shields.io/pypi/l/aioitertools.svg)](https://github.com/omnilib/aioitertools/blob/master/LICENSE)
+[![code style](https://img.shields.io/badge/code%20style-black-000000.svg)](https:/…
+
+
+Install
+-------
+
+aioitertools requires Python 3.6 or newer.
+You can install it from PyPI:
+
+ $ pip install aioitertools
+
+
+Usage
+-----
+
+aioitertools shadows the standard library whenever possible to provide
+asynchronous version of the modules and functions you already know. It's
+fully compatible with standard iterators and async iterators alike, giving
+you one unified,��familiar interface for interacting with iterable objects:
+
+```python
+from aioitertools import iter, next, map, zip
+
+something = iter(...)
+first_item = await next(something)
+
+async for item in iter(something):
+ ...
+
+
+async def fetch(url):
+ response = await aiohttp.request(...)
+ return response.json
+
+async for value in map(fetch, MANY_URLS):
+ ...
+
+
+async for a, b in zip(something, something_else):
+ ...
+```
+
+
+aioitertools emulates the entire `itertools` module, offering the same
+function signatures, but as async generators. All functions support
+standard iterables and async iterables alike, and can take functions or
+coroutines:
+
+```python
+from aioitertools import chain, islice
+
+async def generator1(...):
+ yield ...
+
+async def generator2(...):
+ yield ...
+
+async for value in chain(generator1(), generator2()):
+ ...
+
+async for value in islice(generator1(), 2, None, 2):
+ ...
+```
+
+
+See [builtins.py][], [itertools.py][], and [more_itertools.py][] for full
+documentation of functions and abilities.
+
+
+License
+-------
+
+aioitertools is copyright [John Reese](https://jreese.sh), and licensed under
+the MIT license. I am providing code in this repository to you under an open
+source license. This is my personal repository; the license you receive to
+my code is from me and not from my employer. See the `LICENSE` file for details.
+
+
+[builtins.py]: https://github.com/omnilib/aioitertools/blob/master/aioitertools/builtins.py
+[itertools.py]: https://github.com/omnilib/aioitertools/blob/master/aioitertools/itertools.…
+[more_itertools.py]: https://github.com/omnilib/aioitertools/blob/master/aioitertools/more_itert…
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aioitertools-0.7.1/aioitertools/__init__.py new/aioitertools-0.8.0/aioitertools/__init__.py
--- old/aioitertools-0.7.1/aioitertools/__init__.py 2020-11-09 04:47:28.899267000 +0100
+++ new/aioitertools-0.8.0/aioitertools/__init__.py 2021-08-05 04:22:56.171010700 +0200
@@ -8,7 +8,20 @@
__author__ = "John Reese"
from . import asyncio
from .__version__ import __version__
-from .builtins import enumerate, iter, list, map, max, min, next, set, sum, zip
+from .builtins import (
+ all,
+ any,
+ enumerate,
+ iter,
+ list,
+ map,
+ max,
+ min,
+ next,
+ set,
+ sum,
+ zip,
+)
from .itertools import (
accumulate,
chain,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aioitertools-0.7.1/aioitertools/__version__.py new/aioitertools-0.8.0/aioitertools/__version__.py
--- old/aioitertools-0.7.1/aioitertools/__version__.py 2020-11-09 04:56:44.081393200 +0100
+++ new/aioitertools-0.8.0/aioitertools/__version__.py 2021-08-05 04:24:00.800830100 +0200
@@ -1 +1 @@
-__version__ = "0.7.1"
+__version__ = "0.8.0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aioitertools-0.7.1/aioitertools/asyncio.py new/aioitertools-0.8.0/aioitertools/asyncio.py
--- old/aioitertools-0.7.1/aioitertools/asyncio.py 2020-11-09 04:47:28.889947000 +0100
+++ new/aioitertools-0.8.0/aioitertools/asyncio.py 2021-08-05 04:22:56.166504100 +0200
@@ -11,7 +11,8 @@
import time
from typing import Any, Awaitable, Dict, Iterable, List, Optional, Set, Tuple, cast
-from .types import AsyncIterator, T
+from .builtins import maybe_await, iter as aiter
+from .types import AsyncIterator, MaybeAwaitable, AnyIterable, T
async def as_completed(
@@ -26,7 +27,7 @@
Unlike `asyncio.as_completed`, this yields actual results, and does not require
awaiting each item in the iterable.
- Example:
+ Example::
async for value in as_completed(futures):
... # use value immediately
@@ -52,8 +53,8 @@
# returns Tuple[Set[Future], Set[Future]. Because mypy doesn't like assigning
# these values to existing Set[Awaitable] or even Set[Union[Awaitable, Future]],
# we need to first cast the results to something that we can actually use
- # asyncio.Future: https://github.com/python/typeshed/blob/72ff7b94e534c610ddf8939bacbc55343e9…
- # asyncio.wait(): https://github.com/python/typeshed/blob/72ff7b94e534c610ddf8939bacbc55343e9…
+ # asyncio.Future: https://github.com/python/typeshed/blob/72ff7b94e534c610ddf8939bacbc55343e9… # noqa: E501
+ # asyncio.wait(): https://github.com/python/typeshed/blob/72ff7b94e534c610ddf8939bacbc55343e9… # noqa: E501
done, pending = cast(
Tuple[Set[Awaitable[T]], Set[Awaitable[T]]],
await asyncio.wait(
@@ -74,10 +75,19 @@
return_exceptions: bool = False,
limit: int = -1
) -> List[Any]:
- """Like asyncio.gather but with a limit on concurrency.
+ """
+ Like asyncio.gather but with a limit on concurrency.
+
+ Note that all results are buffered.
+
+ If gather is cancelled all tasks that were internally created and still pending
+ will be cancelled as well.
- Much of the complexity of gather comes with it support for cancel, which we
- omit here. Note that all results are buffered.
+ Example::
+
+ futures = [some_coro(i) for i in range(10)]
+
+ results = await gather(*futures, limit=2)
"""
# For detecting input duplicates and reconciling them at the end
@@ -112,14 +122,22 @@
# pending might be empty if the last items of args were dupes;
# asyncio.wait([]) will raise an exception.
if pending:
- done, pending = await asyncio.wait(
- pending, loop=loop, return_when=asyncio.FIRST_COMPLETED
- )
- for x in done:
- if return_exceptions and x.exception():
- ret[pos[x]] = x.exception()
- else:
- ret[pos[x]] = x.result()
+ try:
+ done, pending = await asyncio.wait(
+ pending, loop=loop, return_when=asyncio.FIRST_COMPLETED
+ )
+ for x in done:
+ if return_exceptions and x.exception():
+ ret[pos[x]] = x.exception()
+ else:
+ ret[pos[x]] = x.result()
+ except asyncio.CancelledError:
+ # Since we created these tasks we should cancel them
+ for x in pending:
+ x.cancel()
+ # we insure that all tasks are cancelled before we raise
+ await asyncio.gather(*pending, loop=loop, return_exceptions=True)
+ raise
if not pending and next_arg == len(args):
break
@@ -129,3 +147,22 @@
ret[lst[i]] = ret[lst[0]]
return ret
+
+
+async def gather_iter(
+ itr: AnyIterable[MaybeAwaitable[T]],
+ loop: Optional[asyncio.AbstractEventLoop] = None,
+ return_exceptions: bool = False,
+ limit: int = -1,
+) -> List[T]:
+ """
+ Wrapper around gather to handle gathering an iterable instead of *args.
+
+ Note that the iterable values don't have to be awaitable.
+ """
+ return await gather(
+ *[maybe_await(i) async for i in aiter(itr)],
+ loop=loop,
+ return_exceptions=return_exceptions,
+ limit=limit,
+ )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aioitertools-0.7.1/aioitertools/builtins.py new/aioitertools-0.8.0/aioitertools/builtins.py
--- old/aioitertools-0.7.1/aioitertools/builtins.py 2020-11-09 04:47:28.821214700 +0100
+++ new/aioitertools-0.8.0/aioitertools/builtins.py 2021-08-05 04:22:57.200909100 +0200
@@ -13,6 +13,7 @@
import asyncio
import builtins
+from enum import Enum
from typing import (
Any,
AsyncIterable,
@@ -28,8 +29,59 @@
overload,
)
+from . import asyncio as ait_asyncio
from .helpers import Orderable, maybe_await
-from .types import T1, T2, T3, T4, T5, AnyIterable, AnyIterator, AnyStop, R, T
+from .types import (
+ T1,
+ T2,
+ T3,
+ T4,
+ T5,
+ AnyIterable,
+ AnyIterator,
+ AnyStop,
+ R,
+ T,
+ MaybeAwaitable,
+)
+
+
+class Sentinel(Enum):
+ """
+ :meta private:
+ """
+
+ MISSING = object()
+
+
+async def all(itr: AnyIterable[MaybeAwaitable[Any]]) -> bool:
+ """
+ Return True if all values are truthy in a mixed iterable, else False.
+ The iterable will be fully consumed and any awaitables will
+ automatically be awaited.
+
+ Example::
+
+ if await all(it):
+ ...
+
+ """
+ return builtins.all(await ait_asyncio.gather_iter(itr))
+
+
+async def any(itr: AnyIterable[MaybeAwaitable[Any]]) -> bool:
+ """
+ Return True if any value is truthy in a mixed iterable, else False.
+ The iterable will be fully consumed and any awaitables will
+ automatically be awaited.
+
+ Example::
+
+ if await any(it):
+ ...
+
+ """
+ return builtins.any(await ait_asyncio.gather_iter(itr))
def iter(itr: AnyIterable[T]) -> AsyncIterator[T]:
@@ -41,9 +93,9 @@
Standard iterables will be wrapped in an async generator yielding
each item in the iterable in the same order.
- Examples:
+ Examples::
- async for iter(range(10)):
+ async for value in iter(range(10)):
...
"""
@@ -60,32 +112,49 @@
return gen()
+@overload
async def next(itr: AnyIterator[T]) -> T:
+ ...
+
+
+@overload
+async def next(itr: AnyIterator[T1], default: T2) -> Union[T1, T2]:
+ ...
+
+
+async def next(
+ itr: AnyIterator[T1], default: Union[T2, Sentinel] = Sentinel.MISSING
+) -> Union[T1, T2]:
"""
Return the next item of any mixed iterator.
Calls builtins.next() on standard iterators, and awaits itr.__anext__()
on async iterators.
- Example:
+ Example::
value = await next(it)
"""
- if isinstance(itr, AsyncIterator):
- return await itr.__anext__()
-
try:
- return builtins.next(itr)
- except StopIteration:
- raise StopAsyncIteration
+ if isinstance(itr, AsyncIterator):
+ return await itr.__anext__()
+
+ try:
+ return builtins.next(itr)
+ except StopIteration:
+ raise StopAsyncIteration
+ except StopAsyncIteration:
+ if default is Sentinel.MISSING:
+ raise
+ return default
async def list(itr: AnyIterable[T]) -> List[T]:
"""
Consume a mixed iterable and return a list of items in order.
- Example:
+ Example::
await list(range(5))
-> [0, 1, 2, 3, 4]
@@ -98,7 +167,7 @@
"""
Consume a mixed iterable and return a set of items.
- Example:
+ Example::
await set([0, 1, 2, 3, 0, 1, 2, 3])
-> {0, 1, 2, 3}
@@ -113,7 +182,7 @@
"""
Consume a mixed iterable and yield the current index and item.
- Example:
+ Example::
async for index, value in enumerate(...):
...
@@ -129,7 +198,7 @@
"""
Modify item of a mixed iterable using the given function or coroutine.
- Example:
+ Example::
async for response in map(func, data):
...
@@ -158,7 +227,7 @@
"""
Return the largest item in an iterable or the largest of two or more arguments.
- Example:
+ Example::
await min(range(5))
-> 4
@@ -217,7 +286,7 @@
"""
Return the smallest item in an iterable or the smallest of two or more arguments.
- Example:
+ Example::
await min(range(5))
-> 0
@@ -262,7 +331,7 @@
"""
Compute the sum of a mixed iterable, adding each value with the start value.
- Example:
+ Example::
await sum(generator())
-> 1024
@@ -280,7 +349,6 @@
return value
-# pylint: disable=undefined-variable,multiple-statements,too-many-arguments
@overload
def zip(__iter1: AnyIterable[T1]) -> AsyncIterator[Tuple[T1]]: # pragma: no cover
pass
@@ -334,12 +402,11 @@
pass
-# pylint: enable=undefined-variable,multiple-statements,too-many-arguments
async def zip(*itrs: AnyIterable[Any]) -> AsyncIterator[Tuple[Any, ...]]:
"""
Yield a tuple of items from mixed iterables until the shortest is consumed.
- Example:
+ Example::
async for a, b, c in zip(i, j, k):
...
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aioitertools-0.7.1/aioitertools/helpers.py new/aioitertools-0.8.0/aioitertools/helpers.py
--- old/aioitertools-0.7.1/aioitertools/helpers.py 2020-11-09 04:47:28.965547800 +0100
+++ new/aioitertools-0.8.0/aioitertools/helpers.py 2021-08-05 04:22:56.191383400 +0200
@@ -2,12 +2,16 @@
# Licensed under the MIT license
import inspect
+import sys
from typing import Awaitable, Union
-from typing_extensions import Protocol
-
from .types import T
+if sys.version_info < (3, 8):
+ from typing_extensions import Protocol
+else:
+ from typing import Protocol
+
class Orderable(Protocol): # pragma: no cover
def __lt__(self, other):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aioitertools-0.7.1/aioitertools/itertools.py new/aioitertools-0.8.0/aioitertools/itertools.py
--- old/aioitertools-0.7.1/aioitertools/itertools.py 2020-11-09 04:47:29.179919700 +0100
+++ new/aioitertools-0.8.0/aioitertools/itertools.py 2021-08-05 04:22:56.255954300 +0200
@@ -43,7 +43,7 @@
Accepts both a standard function or a coroutine for accumulation.
- Example:
+ Example::
data = [1, 2, 3, 4]
@@ -73,7 +73,7 @@
Consumes the first iterable lazily, in entirety, then the second, and so on.
- Example:
+ Example::
async for value in chain([1, 2, 3], [7, 8, 9]):
... # 1, 2, 3, 7, 8, 9
@@ -102,7 +102,7 @@
Simple wrapper around itertools.combinations for asyncio.
This will consume the entire iterable before yielding values.
- Example:
+ Example::
async for value in combinations(range(4), 3):
... # (0, 1, 2), (0, 1, 3), (0, 2, 3), (1, 2, 3)
@@ -122,7 +122,7 @@
Simple wrapper around itertools.combinations_with_replacement.
This will consume the entire iterable before yielding values.
- Example:
+ Example::
async for value in combinations_with_replacement("ABC", 2):
... # ("A", "A"), ("A", "B"), ("A", "C"), ("B", "B"), ...
@@ -141,7 +141,7 @@
Stops when either the iterable or the selectors have been exhausted.
- Example:
+ Example::
async for value in compress(range(5), [1, 0, 0, 1, 1]):
... # 0, 3, 4
@@ -155,7 +155,7 @@
"""
Yield an infinite series, starting at the given value and increasing by step.
- Example:
+ Example::
async for value in counter(10, -1):
... # 10, 9, 8, 7, ...
@@ -175,7 +175,7 @@
Lazily consumes the iterable when the next value is needed, and caching
the values in memory for future iterations of the series.
- Example:
+ Example::
async for value in cycle([1, 2]):
... # 1, 2, 1, 2, 1, 2, ...
@@ -199,7 +199,7 @@
Accepts both standard functions and coroutines for the predicate.
- Example:
+ Example::
def pred(x):
return x < 4
@@ -225,7 +225,7 @@
Accepts both standard functions and coroutines for the predicate.
- Example:
+ Example::
def pred(x):
return x < 4
@@ -239,7 +239,6 @@
yield item
-# pylint: disable=undefined-variable,multiple-statements
@overload
def groupby(itr: AnyIterable[T]) -> AsyncIterator[Tuple[T, List[T]]]: # pragma: nocover
pass
@@ -252,7 +251,6 @@
pass
-# pylint: enable=undefined-variable,multiple-statements
async def groupby(
itr: AnyIterable[T], key: Optional[KeyFunction[T, R]] = None
) -> AsyncIterator[Tuple[Any, List[T]]]:
@@ -264,7 +262,7 @@
coroutines for the key function. Suggest sorting by the key
function before using groupby.
- Example:
+ Example::
data = ["A", "a", "b", "c", "C", "c"]
@@ -274,7 +272,7 @@
"""
if key is None:
- key = lambda x: x
+ key = lambda x: x # noqa: E731
grouping: List[T] = []
@@ -298,7 +296,6 @@
yield j, grouping
-# pylint: disable=undefined-variable,multiple-statements
@overload
def islice(
itr: AnyIterable[T], __stop: Optional[int]
@@ -313,7 +310,6 @@
pass
-# pylint: enable=undefined-variable,multiple-statements
async def islice(itr: AnyIterable[T], *args: Optional[int]) -> AsyncIterator[T]:
"""
Yield selected items from the given iterable.
@@ -324,7 +320,7 @@
Starting from the start index (or zero), stopping at the stop
index (or until exhausted), skipping items if step > 0.
- Example:
+ Example::
data = range(10)
@@ -372,7 +368,7 @@
Simple wrapper around itertools.combinations for asyncio.
This will consume the entire iterable before yielding values.
- Example:
+ Example::
async for value in permutations(range(3)):
... # (0, 1, 2), (0, 2, 1), (1, 0, 2), ...
@@ -384,7 +380,7 @@
async def product(
- *itrs: AnyIterable[T], repeat: int = 1 # pylint: disable=redefined-outer-name
+ *itrs: AnyIterable[T], repeat: int = 1
) -> AsyncIterator[Tuple[T, ...]]:
"""
Yield cartesian products of all iterables.
@@ -392,7 +388,7 @@
Simple wrapper around itertools.combinations for asyncio.
This will consume all iterables before yielding any values.
- Example:
+ Example::
async for value in product("abc", "xy"):
... # ("a", "x"), ("a", "y"), ("b", "x"), ...
@@ -410,7 +406,7 @@
"""
Yield the given value repeatedly, forever or up to n times.
- Example:
+ Example::
async for value in repeat(7):
... # 7, 7, 7, 7, 7, 7, ...
@@ -432,7 +428,7 @@
Each iterable contained within will be unpacked and consumed before
executing the function or coroutine.
- Example:
+ Example::
data = [(1, 1), (1, 1, 1), (2, 2)]
@@ -453,7 +449,7 @@
Accepts both standard functions and coroutines for the predicate.
- Example:
+ Example::
def pred(x):
return x < 4
@@ -483,7 +479,7 @@
used in keeping values in the queues until the other iterators finish
consuming them.
- Example:
+ Example::
it1, it2 = tee(range(5), n=2)
@@ -500,15 +496,23 @@
async def gen(k: int, q: asyncio.Queue) -> AsyncIterator[T]:
if k == 0:
- async for value in iter(itr):
- await asyncio.gather(*[queue.put(value) for queue in queues[1:]])
- yield value
+ try:
+ async for value in iter(itr):
+ await asyncio.gather(
+ *[queue.put((None, value)) for queue in queues[1:]]
+ )
+ yield value
+ except Exception as e:
+ await asyncio.gather(*[queue.put((e, None)) for queue in queues[1:]])
+ raise
- await asyncio.gather(*[queue.put(sentinel) for queue in queues[1:]])
+ await asyncio.gather(*[queue.put((None, sentinel)) for queue in queues[1:]])
else:
while True:
- value = await q.get()
+ error, value = await q.get()
+ if error is not None:
+ raise error
if value is sentinel:
break
yield value
@@ -525,7 +529,7 @@
If shorter iterables are exhausted, the default value will be used
until all iterables are exhausted.
- Example:
+ Example::
a = range(3)
b = range(5)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aioitertools-0.7.1/aioitertools/more_itertools.py new/aioitertools-0.8.0/aioitertools/more_itertools.py
--- old/aioitertools-0.7.1/aioitertools/more_itertools.py 2020-11-09 04:47:28.950679500 +0100
+++ new/aioitertools-0.8.0/aioitertools/more_itertools.py 2021-08-05 04:22:56.186720100 +0200
@@ -17,7 +17,7 @@
If there are too few items in iterable, all of them are returned.
n needs to be at least 0. If it is 0, an empty list is returned.
- Example:
+ Example::
first_two = await take(2, [1, 2, 3, 4, 5])
@@ -34,7 +34,7 @@
The last chunk will be shorter if the total number of items is not
divisible by n.
- Example:
+ Example::
async for chunk in chunked([1, 2, 3, 4, 5], n=2):
... # first iteration: chunk == [1, 2]; last one: chunk == [5]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aioitertools-0.7.1/aioitertools/tests/asyncio.py new/aioitertools-0.8.0/aioitertools/tests/asyncio.py
--- old/aioitertools-0.7.1/aioitertools/tests/asyncio.py 2020-11-09 04:47:29.478941200 +0100
+++ new/aioitertools-0.8.0/aioitertools/tests/asyncio.py 2021-08-05 04:22:56.366293200 +0200
@@ -59,7 +59,7 @@
fns = [fn(1), asyncio.ensure_future(fn(2))]
if hasattr(asyncio, "create_task"):
# 3.7 only
- fns.append(asyncio.create_task(fn(3))) # pylint: disable=no-member
+ fns.append(asyncio.create_task(fn(3)))
else:
fns.append(fn(3))
@@ -74,8 +74,7 @@
async def fn(arg):
nonlocal counter, max_counter
counter += 1
- if max_counter < counter:
- max_counter = counter
+ max_counter = max(max_counter, counter)
await asyncio.sleep(0.001)
counter -= 1
return arg
@@ -127,3 +126,34 @@
)
self.assertEqual(result[1], 0.001)
self.assertIsInstance(result[0], MyException)
+
+ @async_test
+ async def test_gather_cancel(self):
+ cancelled = False
+ started = False
+
+ async def _fn():
+ nonlocal started, cancelled
+ try:
+ started = True
+ await asyncio.sleep(10) # might as well be forever
+ except asyncio.CancelledError:
+ nonlocal cancelled
+ cancelled = True
+ raise
+
+ async def _gather():
+ await aio.gather(_fn())
+
+ if hasattr(asyncio, "create_task"):
+ # 3.7+ only
+ task = asyncio.create_task(_gather())
+ else:
+ task = asyncio.ensure_future(_gather())
+ # to insure the gather actually runs
+ await asyncio.sleep(0)
+ task.cancel()
+ with self.assertRaises(asyncio.CancelledError):
+ await task
+ self.assertTrue(started)
+ self.assertTrue(cancelled)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aioitertools-0.7.1/aioitertools/tests/builtins.py new/aioitertools-0.8.0/aioitertools/tests/builtins.py
--- old/aioitertools-0.7.1/aioitertools/tests/builtins.py 2020-11-09 04:47:29.375778400 +0100
+++ new/aioitertools-0.8.0/aioitertools/tests/builtins.py 2021-08-05 04:22:56.331863200 +0200
@@ -10,10 +10,59 @@
slist = ["A", "B", "C"]
srange = range(3)
+srange1 = range(1, 4)
+srange0 = range(1)
class BuiltinsTest(TestCase):
+ # aioitertools.all()
+
+ @async_test
+ async def test_all_list(self):
+ self.assertTrue(await ait.all([True, 1, "string"]))
+ self.assertFalse(await ait.all([True, 0, "string"]))
+
+ @async_test
+ async def test_all_range(self):
+ self.assertTrue(await ait.all(srange1))
+ self.assertFalse(await ait.all(srange))
+
+ @async_test
+ async def test_all_generator(self):
+ self.assertTrue(await ait.all(x for x in srange1))
+ self.assertFalse(await ait.all(x for x in srange))
+
+ @async_test
+ async def test_all_async_generator(self):
+ self.assertTrue(await ait.all(ait.iter(srange1)))
+ self.assertFalse(await ait.all(ait.iter(srange)))
+
+ # aioitertools.any()
+
+ @async_test
+ async def test_any_list(self):
+ self.assertTrue(await ait.any([False, 1, ""]))
+ self.assertFalse(await ait.any([False, 0, ""]))
+
+ @async_test
+ async def test_any_range(self):
+ self.assertTrue(await ait.any(srange))
+ self.assertTrue(await ait.any(srange1))
+ self.assertFalse(await ait.any(srange0))
+
+ @async_test
+ async def test_any_generator(self):
+ self.assertTrue(await ait.any(x for x in srange))
+ self.assertTrue(await ait.any(x for x in srange1))
+ self.assertFalse(await ait.any(x for x in srange0))
+
+ @async_test
+ async def test_any_async_generator(self):
+ self.assertTrue(await ait.any(ait.iter(srange)))
+ self.assertTrue(await ait.any(ait.iter(srange1)))
+ self.assertFalse(await ait.any(ait.iter(srange0)))
+
# aioitertools.iter()
@async_test
@@ -134,6 +183,21 @@
with self.assertRaises(StopAsyncIteration):
await ait.next(it)
+ @async_test
+ async def test_next_default_iterable(self):
+ it = iter(["A"])
+
+ self.assertEqual(await ait.next(it, "?"), "A")
+ # End of iteration
+ self.assertEqual(await ait.next(it, "?"), "?")
+
+ @async_test
+ async def test_next_default_async_iterable(self):
+ it = ait.iter(["A"])
+ self.assertEqual(await ait.next(it, "?"), "A")
+ # End of iteration
+ self.assertEqual(await ait.next(it, "?"), "?")
+
# aioitertools.list()
@async_test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aioitertools-0.7.1/aioitertools/tests/itertools.py new/aioitertools-0.8.0/aioitertools/tests/itertools.py
--- old/aioitertools-0.7.1/aioitertools/tests/itertools.py 2020-11-09 04:47:30.139533000 +0100
+++ new/aioitertools-0.8.0/aioitertools/tests/itertools.py 2021-08-05 04:22:56.567801200 +0200
@@ -695,6 +695,33 @@
await ait.next(it)
@async_test
+ async def test_tee_propagate_exception(self):
+ class MyError(Exception):
+ pass
+
+ async def gen():
+ yield 1
+ yield 2
+ raise MyError
+
+ async def consumer(it):
+ result = 0
+ async for item in it:
+ result += item
+ return result
+
+ it1, it2 = ait.tee(gen())
+
+ values = await asyncio.gather(
+ consumer(it1),
+ consumer(it2),
+ return_exceptions=True,
+ )
+
+ for value in values:
+ self.assertIsInstance(value, MyError)
+
+ @async_test
async def test_zip_longest_range(self):
a = range(3)
b = range(5)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aioitertools-0.7.1/aioitertools/tests/more_itertools.py new/aioitertools-0.8.0/aioitertools/tests/more_itertools.py
--- old/aioitertools-0.7.1/aioitertools/tests/more_itertools.py 2020-11-09 04:47:29.533481100 +0100
+++ new/aioitertools-0.8.0/aioitertools/tests/more_itertools.py 2021-08-05 04:22:56.383290300 +0200
@@ -15,7 +15,7 @@
async def _empty() -> AsyncIterable[int]:
return
- yield 0 # pylint: disable=unreachable
+ yield 0
class MoreItertoolsTest(TestCase):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aioitertools-0.7.1/aioitertools/types.py new/aioitertools-0.8.0/aioitertools/types.py
--- old/aioitertools-0.7.1/aioitertools/types.py 2020-11-09 04:47:28.931515000 +0100
+++ new/aioitertools-0.8.0/aioitertools/types.py 2021-08-05 04:22:56.181237700 +0200
@@ -29,3 +29,4 @@
Accumulator = Union[Callable[[T, T], T], Callable[[T, T], Awaitable[T]]]
KeyFunction = Union[Callable[[T], R], Callable[[T], Awaitable[R]]]
Predicate = Union[Callable[[T], object], Callable[[T], Awaitable[object]]]
+MaybeAwaitable = Union[T, Awaitable[T]]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aioitertools-0.7.1/docs/_static/custom.css new/aioitertools-0.8.0/docs/_static/custom.css
--- old/aioitertools-0.7.1/docs/_static/custom.css 2020-05-01 03:16:20.685631300 +0200
+++ new/aioitertools-0.8.0/docs/_static/custom.css 2021-05-16 22:28:42.578924400 +0200
@@ -17,4 +17,8 @@
div.omnilib-badges a:hover {
color: #777;
border: none;
-}
\ No newline at end of file
+}
+
+dl.class, dl.function, dl.attribute {
+ margin-bottom: 15px;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aioitertools-0.7.1/docs/conf.py new/aioitertools-0.8.0/docs/conf.py
--- old/aioitertools-0.7.1/docs/conf.py 2020-05-01 03:20:29.020955000 +0200
+++ new/aioitertools-0.8.0/docs/conf.py 2021-08-05 03:54:56.994592200 +0200
@@ -35,6 +35,14 @@
"sphinx.ext.intersphinx",
]
+autodoc_default_options = {
+ "show-inheritance": True,
+ "members": True,
+ "inherited-members": True,
+}
+autodoc_member_order = "bysource"
+autodoc_typehints = "description"
+
# Add any paths that contain templates here, relative to this directory.
templates_path = ["_templates"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aioitertools-0.7.1/makefile new/aioitertools-0.8.0/makefile
--- old/aioitertools-0.7.1/makefile 2020-11-09 00:25:34.085005300 +0100
+++ new/aioitertools-0.8.0/makefile 2021-05-16 23:04:10.655338300 +0200
@@ -22,7 +22,7 @@
python -m black aioitertools
lint:
- python -m pylint --rcfile .pylint aioitertools
+ python -m flake8 aioitertools
python -m usort check aioitertools
python -m black --check aioitertools
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aioitertools-0.7.1/pyproject.toml new/aioitertools-0.8.0/pyproject.toml
--- old/aioitertools-0.7.1/pyproject.toml 2020-11-09 04:54:38.147944200 +0100
+++ new/aioitertools-0.8.0/pyproject.toml 2021-03-07 00:15:44.518752300 +0100
@@ -8,7 +8,7 @@
author-email = "john(a)noswap.com"
description-file = "README.md"
home-page = "https://aioitertools.omnilib.dev"
-requires = ["typing_extensions>=3.7"]
+requires = ["typing_extensions>=3.7; python_version < '3.8'"]
requires-python = ">=3.6"
classifiers = [
"Development Status :: 4 - Beta",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aioitertools-0.7.1/requirements-dev.txt new/aioitertools-0.8.0/requirements-dev.txt
--- old/aioitertools-0.7.1/requirements-dev.txt 2020-11-09 04:44:53.892360200 +0100
+++ new/aioitertools-0.8.0/requirements-dev.txt 2021-08-05 03:56:49.667648300 +0200
@@ -1,10 +1,10 @@
-attribution==1.4.0
-black==20.8b1
-codecov==2.1.10
-coverage[toml]==5.3
-flit==3.0.0
-mypy==0.790
-pylint==2.4.4 # pyup: <2.5
-sphinx==3.3.0
-usort==0.6.0
+attribution==1.5.2
+black==21.7b0
+codecov==2.1.11
+coverage[toml]==5.5
+flake8==3.9.2
+flit==3.2.0
+mypy==0.910
+sphinx==4.1.1
+usort==0.6.2
git+https://github.com/miyakogi/m2r@66f4a5a500cdd9fc59085106bff082c9cadafaf3
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aioitertools-0.7.1/requirements.txt new/aioitertools-0.8.0/requirements.txt
--- old/aioitertools-0.7.1/requirements.txt 2020-05-06 04:47:36.350556000 +0200
+++ new/aioitertools-0.8.0/requirements.txt 2021-03-07 00:15:44.519299500 +0100
@@ -1 +1 @@
-typing_extensions>=3.7
\ No newline at end of file
+typing_extensions>=3.7;python_version<"3.8"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aioitertools-0.7.1/setup.py new/aioitertools-0.8.0/setup.py
--- old/aioitertools-0.7.1/setup.py 1970-01-01 01:00:00.000000000 +0100
+++ new/aioitertools-0.8.0/setup.py 1970-01-01 01:00:00.000000000 +0100
@@ -9,17 +9,17 @@
package_data = \
{'': ['*']}
-install_requires = \
-['typing_extensions>=3.7']
+extras_require = \
+{":python_version < '3.8'": ['typing_extensions>=3.7']}
setup(name='aioitertools',
- version='0.7.1',
+ version='0.8.0',
description='itertools and builtins for AsyncIO and mixed iterables',
author='John Reese',
author_email='john(a)noswap.com',
url='https://aioitertools.omnilib.dev',
packages=packages,
package_data=package_data,
- install_requires=install_requires,
+ extras_require=extras_require,
python_requires='>=3.6',
)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-python-poppler for openSUSE:Factory checked in at 2021-08-28 22:29:21
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-python-poppler (Old)
and /work/SRC/openSUSE:Factory/.python-python-poppler.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-python-poppler"
Sat Aug 28 22:29:21 2021 rev:3 rq:914745 version:0.2.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-python-poppler/python-python-poppler.changes 2021-03-24 16:12:24.303904565 +0100
+++ /work/SRC/openSUSE:Factory/.python-python-poppler.new.1899/python-python-poppler.changes 2021-08-28 22:29:39.910008756 +0200
@@ -1,0 +2,7 @@
+Fri Aug 27 20:15:33 UTC 2021 - Ben Greiner <code(a)bnavigator.de>
+
+- remove dangling series file
+- skip failing test due to poppler 21.08.0 crash
+ gh#cbrunet/python-poppler#39
+
+-------------------------------------------------------------------
Old:
----
series
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-python-poppler.spec ++++++
--- /var/tmp/diff_new_pack.llcL0t/_old 2021-08-28 22:29:40.890009773 +0200
+++ /var/tmp/diff_new_pack.llcL0t/_new 2021-08-28 22:29:40.894009777 +0200
@@ -27,7 +27,6 @@
Group: Development/Libraries/Python
URL: https://github.com/cbrunet/python-poppler
Source: python-poppler-%{version}.tar.xz
-Source1: series
Patch: use-system-pybind11.patch
Patch1: fix-image-argb.patch
BuildRequires: %{python_module devel}
@@ -41,7 +40,7 @@
BuildRequires: python-rpm-macros
BuildRequires: python3
BuildRequires: pkgconfig(poppler)
-# some tests require this this
+# some tests require this
BuildRequires: poppler-data
%python_subpackages
@@ -70,11 +69,14 @@
%python_expand %fdupes %{buildroot}%{$python_sitearch}
%check
-%pytest_arch tests
+# gh#cbrunet/python-poppler#39
+donttest="test_get_pdf_version_of_locked_document"
+%pytest_arch tests -k "not ($donttest)"
%files %{python_files}
%license LICENSE.txt
%doc README.md
-%{python_sitearch}/
+%{python_sitearch}/poppler
+%{python_sitearch}/python_poppler-%{version}*-info
%changelog
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package libqt5-creator for openSUSE:Factory checked in at 2021-08-28 22:29:20
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libqt5-creator (Old)
and /work/SRC/openSUSE:Factory/.libqt5-creator.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libqt5-creator"
Sat Aug 28 22:29:20 2021 rev:92 rq:914746 version:5.0.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/libqt5-creator/libqt5-creator.changes 2021-07-20 15:40:18.085562235 +0200
+++ /work/SRC/openSUSE:Factory/.libqt5-creator.new.1899/libqt5-creator.changes 2021-08-28 22:29:37.070005808 +0200
@@ -1,0 +2,12 @@
+Thu Aug 26 11:49:45 UTC 2021 - Christophe Giboudeaux <christophe(a)krop.fr>
+
+- Update to 5.0.0
+ * https://www.qt.io/blog/qt-creator-5.0-released
+
+-------------------------------------------------------------------
+Thu Aug 12 15:36:37 UTC 2021 - Christophe Giboudeaux <christophe(a)krop.fr>
+
+- Update to 5.0.0-rc1
+- Rebase 0001-Disable-some-plugins.patch
+
+-------------------------------------------------------------------
Old:
----
qt-creator-opensource-src-4.15.2.tar.xz
New:
----
qt-creator-opensource-src-5.0.0.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libqt5-creator.spec ++++++
--- /var/tmp/diff_new_pack.b6liF0/_old 2021-08-28 22:29:39.102007917 +0200
+++ /var/tmp/diff_new_pack.b6liF0/_new 2021-08-28 22:29:39.106007921 +0200
@@ -26,16 +26,20 @@
%global libexecdirname lib
%endif
+%ifnarch ppc ppc64 ppc64le s390 s390x
+%bcond_without qtwebengine
+%endif
+
# Private QML imports
-%global __requires_exclude qmlimport\\((CameraGeometry|GridGeometry|HelperWidgets|LightUtils|LineGeometry|MouseArea3D|QtQuickDesignerTheme|SelectionBoxGeometry|StudioControls|StudioTheme).*
+%global __requires_exclude qmlimport\\((CameraGeometry|GridGeometry|HelperWidgets|LightUtils|LineGeometry|MouseArea3D|QtQuickDesignerColorPalette|QtQuickDesignerTheme|SelectionBoxGeometry|StudioControls|StudioTheme).*
# Has mocks for quite a few components, which are only pulled in when actually used
%global __requires_exclude_from %{_datadir}/qtcreator/qml/qmlpuppet/
-%define major_ver 4.15
+%define major_ver 5.0
%define qt5_version 5.14.0
-%define tar_version 4.15.2
+%define tar_version 5.0.0
Name: libqt5-creator
-Version: 4.15.2
+Version: 5.0.0
Release: 0
Summary: Integrated Development Environment targeting Qt apps
# src/plugins/cmakeprojectmanager/configmodelitemdelegate.* -> LGPL-2.1-only OR LGPL-3.0-only
@@ -90,6 +94,7 @@
BuildRequires: pkgconfig(libzstd)
Requires: hicolor-icon-theme
Requires: libqt5-qtquickcontrols
+Requires: libqt5-qtquicktimeline
# Make sure to rebuild against latest Qt5 (using the last package in chain - libQt5Designer5)
# Explicitly require libQt5Script5 (needed by plugins). Qt Creator crashes with old versions on project load.
%requires_eq libQt5Designer5
@@ -114,7 +119,7 @@
# clangcodemodel hardcodes clang include paths: QTCREATORBUG-21972
%requires_eq libclang%{_llvm_sonum}
%endif
-%ifnarch ppc ppc64 ppc64le s390 s390x
+%if %{with qtwebengine}
BuildRequires: cmake(Qt5WebEngine) >= %{qt5_version}
BuildRequires: cmake(Qt5WebEngineWidgets) >= %{qt5_version}
%endif
@@ -152,14 +157,15 @@
# https://bugreports.qt.io/browse/QTCREATORBUG-24357 suggests disabling
# the clangpchmanagerbackend and clangrefactoringbackend builds
%cmake \
- -DCMAKE_INSTALL_LIBDIR=%{_lib} \
- -DCMAKE_INSTALL_LIBEXECDIR=%{libexecdirname} \
- -DCLANGTOOLING_LINK_CLANG_DYLIB=ON \
- -DBUILD_WITH_PCH=OFF \
- -DWITH_DOCS=ON \
- -DBUILD_LIBRARY_QLITEHTML=OFF \
- -DBUILD_EXECUTABLE_CLANGPCHMANAGERBACKEND=OFF \
- -DBUILD_EXECUTABLE_CLANGREFACTORINGBACKEND=OFF
+ -DCMAKE_INSTALL_LIBDIR:STRING=%{_lib} \
+ -DCMAKE_INSTALL_LIBEXECDIR:STRING=%{libexecdirname} \
+ -DCLANGTOOLING_LINK_CLANG_DYLIB:BOOL=ON \
+ -DBUILD_WITH_PCH:BOOL=OFF \
+ -DWITH_DOCS:BOOL=ON \
+ -DBUILD_LIBRARY_QLITEHTML:BOOL=OFF \
+%if %{with qtwebengine}
+ -DBUILD_HELVIEWERBACKEND_QTWEBENGINE:BOOL=ON
+%endif
%cmake_build
++++++ 0001-Disable-some-plugins.patch ++++++
--- /var/tmp/diff_new_pack.b6liF0/_old 2021-08-28 22:29:39.126007942 +0200
+++ /var/tmp/diff_new_pack.b6liF0/_new 2021-08-28 22:29:39.126007942 +0200
@@ -1,4 +1,4 @@
-From a808339287ec6dcd5981d3b28e5b0414a6a206ff Mon Sep 17 00:00:00 2001
+From 51d1d57485576dc4f735b5228dec6cf7c1c3e424 Mon Sep 17 00:00:00 2001
From: Christophe Giboudeaux <christophe(a)krop.fr>
Date: Wed, 15 Jul 2020 10:09:31 +0200
Subject: [PATCH] Disable some plugins
@@ -11,12 +11,11 @@
[1] https://reviews.llvm.org/D53072
---
- src/plugins/CMakeLists.txt | 2 --
- src/plugins/help/CMakeLists.txt | 4 ++--
- 2 files changed, 2 insertions(+), 4 deletions(-)
+ src/plugins/CMakeLists.txt | 2 --
+ 1 file changed, 2 deletions(-)
diff --git a/src/plugins/CMakeLists.txt b/src/plugins/CMakeLists.txt
-index 871f999b..e6d82385 100644
+index 4b6e3c43..c78bb33c 100644
--- a/src/plugins/CMakeLists.txt
+++ b/src/plugins/CMakeLists.txt
@@ -7,7 +7,6 @@ add_subdirectory(serialterminal)
@@ -27,16 +26,14 @@
add_subdirectory(welcome)
# Level 2: (only depends on Level 1 and below)
-@@ -41,7 +40,6 @@ add_subdirectory(vcsbase)
+@@ -40,7 +39,6 @@ add_subdirectory(vcsbase)
# Level 5:
add_subdirectory(bazaar)
add_subdirectory(beautifier)
-add_subdirectory(clangformat)
- add_subdirectory(clangrefactoring)
add_subdirectory(clearcase)
add_subdirectory(cvs)
-diff --git a/src/plugins/help/CMakeLists.txt b/src/plugins/help/CMakeLists.txt
-index 6ec6faba..0e577cb4 100644
+ add_subdirectory(designer)
--
-2.30.1
+2.32.0
++++++ qt-creator-opensource-src-4.15.2.tar.xz -> qt-creator-opensource-src-5.0.0.tar.xz ++++++
/work/SRC/openSUSE:Factory/libqt5-creator/qt-creator-opensource-src-4.15.2.tar.xz /work/SRC/openSUSE:Factory/.libqt5-creator.new.1899/qt-creator-opensource-src-5.0.0.tar.xz differ: char 26, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-tinydb for openSUSE:Factory checked in at 2021-08-28 22:29:18
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-tinydb (Old)
and /work/SRC/openSUSE:Factory/.python-tinydb.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-tinydb"
Sat Aug 28 22:29:18 2021 rev:10 rq:914744 version:4.5.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-tinydb/python-tinydb.changes 2021-04-10 15:28:06.322429842 +0200
+++ /work/SRC/openSUSE:Factory/.python-tinydb.new.1899/python-tinydb.changes 2021-08-28 22:29:34.690003340 +0200
@@ -1,0 +2,16 @@
+Fri Aug 27 11:09:53 UTC 2021 - pgajdos(a)suse.com
+
+- version update to 4.5.1
+ v4.5.1 (2021-07-17)
+ ^^^^^^^^^^^^^^^^^^^
+ - Fix: Correctly install ``typing-extensions`` on Python 3.7
+ (see `issue 413 <https://github.com/msiemens/tinydb/issues/413>`__)
+ v4.5.0 (2021-06-25)
+ ^^^^^^^^^^^^^^^^^^^
+ - Feature: Better type hinting/IntelliSense for PyCharm, VS Code and MyPy
+ (see `issue 372 <https://github.com/msiemens/tinydb/issues/372>`__).
+ PyCharm and VS Code should work out of the box, for MyPy see
+ :ref:`MyPy Type Checking <mypy_type_checking>`
+- actually test the package
+
+-------------------------------------------------------------------
Old:
----
tinydb-4.4.0.tar.gz
New:
----
tinydb-4.5.1.tar.gz
v4.5.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-tinydb.spec ++++++
--- /var/tmp/diff_new_pack.yoeLCK/_old 2021-08-28 22:29:36.038004738 +0200
+++ /var/tmp/diff_new_pack.yoeLCK/_new 2021-08-28 22:29:36.042004743 +0200
@@ -19,15 +19,18 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%define skip_python2 1
Name: python-tinydb
-Version: 4.4.0
+Version: 4.5.1
Release: 0
Summary: A document-oriented database
License: MIT
Group: Productivity/Databases/Servers
URL: https://github.com/msiemens/tinydb
Source: https://files.pythonhosted.org/packages/source/t/tinydb/tinydb-%{version}.t…
+# https://github.com/msiemens/tinydb/issues/324
+Source1: https://github.com/msiemens/tinydb/archive/refs/tags/v%{version}.tar.gz
BuildRequires: %{python_module PyYAML}
-BuildRequires: %{python_module pytest-runner}
+BuildRequires: %{python_module pytest-mypy}
+BuildRequires: %{python_module pytest}
BuildRequires: %{python_module setuptools}
BuildRequires: dos2unix
BuildRequires: fdupes
@@ -42,7 +45,7 @@
external database server.
%prep
-%setup -q -n tinydb-%{version}
+%setup -q -n tinydb-%{version} -b1
sed -i '/pytest-cov/d' setup.py
chmod a-x LICENSE
dos2unix LICENSE
@@ -59,7 +62,8 @@
%python_expand %fdupes %{buildroot}%{$python_sitelib}
%check
-%python_exec setup.py test
+mv pytest.ini{,.notused}
+%pytest
%files %{python_files}
%license LICENSE
++++++ tinydb-4.4.0.tar.gz -> tinydb-4.5.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinydb-4.4.0/PKG-INFO new/tinydb-4.5.1/PKG-INFO
--- old/tinydb-4.4.0/PKG-INFO 2021-02-11 20:31:23.965108600 +0100
+++ new/tinydb-4.5.1/PKG-INFO 2021-07-17 10:35:20.332101300 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: tinydb
-Version: 4.4.0
+Version: 4.5.1
Summary: TinyDB is a tiny, document oriented database optimized for your happiness :)
Home-page: https://github.com/msiemens/tinydb
License: MIT
@@ -25,6 +25,7 @@
Classifier: Topic :: Database :: Database Engines/Servers
Classifier: Topic :: Utilities
Classifier: Typing :: Typed
+Requires-Dist: typing-extensions (>=3.10.0,<4.0.0); python_version <= "3.7"
Project-URL: Changelog, https://github.com/msiemens/tinydb/en/latest/changelog.html
Project-URL: Documentation, https://tinydb.readthedocs.org/
Project-URL: Issues, https://github.com/msiemens/tinydb/issues
@@ -68,7 +69,7 @@
e.g. `PyMongo <https://api.mongodb.org/python/current/>`_) nor any dependencies
from PyPI.
-- **works on Python 3.5+ and PyPy:** TinyDB works on all modern versions of Python
+- **works on Python 3.6+ and PyPy3:** TinyDB works on all modern versions of Python
and PyPy.
- **powerfully extensible:** You can easily extend TinyDB by writing new
@@ -84,7 +85,7 @@
Supported Python Versions
*************************
-TinyDB has been tested with Python 3.5 - 3.8 and PyPy.
+TinyDB has been tested with Python 3.6 - 3.9 and PyPy3.
Example Code
************
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinydb-4.4.0/README.rst new/tinydb-4.5.1/README.rst
--- old/tinydb-4.4.0/README.rst 2021-02-11 20:30:49.629945300 +0100
+++ new/tinydb-4.5.1/README.rst 2021-07-17 10:34:48.420737300 +0200
@@ -36,7 +36,7 @@
e.g. `PyMongo <https://api.mongodb.org/python/current/>`_) nor any dependencies
from PyPI.
-- **works on Python 3.5+ and PyPy:** TinyDB works on all modern versions of Python
+- **works on Python 3.6+ and PyPy3:** TinyDB works on all modern versions of Python
and PyPy.
- **powerfully extensible:** You can easily extend TinyDB by writing new
@@ -52,7 +52,7 @@
Supported Python Versions
*************************
-TinyDB has been tested with Python 3.5 - 3.8 and PyPy.
+TinyDB has been tested with Python 3.6 - 3.9 and PyPy3.
Example Code
************
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinydb-4.4.0/pyproject.toml new/tinydb-4.5.1/pyproject.toml
--- old/tinydb-4.4.0/pyproject.toml 2021-02-11 20:30:49.629945300 +0100
+++ new/tinydb-4.5.1/pyproject.toml 2021-07-17 10:34:48.424737200 +0200
@@ -1,6 +1,6 @@
[tool.poetry]
name = "tinydb"
-version = "4.4.0"
+version = "4.5.1"
description = "TinyDB is a tiny, document oriented database optimized for your happiness :)"
authors = ["Markus Siemens <markus(a)m-siemens.de>"]
license = "MIT"
@@ -21,7 +21,6 @@
"Topic :: Database :: Database Engines/Servers",
"Topic :: Utilities",
"Programming Language :: Python :: 3",
- "Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
@@ -42,6 +41,7 @@
[tool.poetry.dependencies]
python = "^3.5"
+typing-extensions = { version = "^3.10.0", python = "<=3.7" }
[tool.poetry.dev-dependencies]
pytest = "^5.2.2"
@@ -52,7 +52,9 @@
coveralls = "^1.8.2"
pyyaml = "^5.1.2"
pytest-mypy = { version = "^0.4.1", markers = "platform_python_implementation != 'PyPy'" }
+types-PyYAML = "^5.4.3"
+typing-extensions = { version = "^3.10.0" }
[build-system]
-requires = ["poetry>=0.12"]
-build-backend = "poetry.masonry.api"
+requires = ["poetry-core"]
+build-backend = "poetry.core.masonry.api"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinydb-4.4.0/setup.py new/tinydb-4.5.1/setup.py
--- old/tinydb-4.4.0/setup.py 2021-02-11 20:31:23.964544000 +0100
+++ new/tinydb-4.5.1/setup.py 2021-07-17 10:35:20.331332700 +0200
@@ -7,11 +7,14 @@
package_data = \
{'': ['*']}
+extras_require = \
+{':python_version <= "3.7"': ['typing-extensions>=3.10.0,<4.0.0']}
+
setup_kwargs = {
'name': 'tinydb',
- 'version': '4.4.0',
+ 'version': '4.5.1',
'description': 'TinyDB is a tiny, document oriented database optimized for your happiness :)',
- 'long_description': ".. image:: https://raw.githubusercontent.com/msiemens/tinydb/master/artwork/logo.png\n :scale: 100%\n :height: 150px\n\n|Build Status| |Coverage| |Version|\n\nQuick Links\n***********\n\n- `Example Code`_\n- `Supported Python Versions`_\n- `Documentation <http://tinydb.readthedocs.org/>`_\n- `Changelog <https://tinydb.readthedocs.io/en/latest/changelog.html>`_\n- `Extensions <https://tinydb.readthedocs.io/en/latest/extensions.html>`_\n- `Contributing`_\n\nIntroduction\n************\n\nTinyDB is a lightweight document oriented database optimized for your happiness :)\nIt's written in pure Python and has no external dependencies. The target are\nsmall apps that would be blown away by a SQL-DB or an external database server.\n\nTinyDB is:\n\n- **tiny:** The current source code has 1800 lines of code (with about 40%\n documentation) and 1600 lines tests.\n\n- **document oriented:** Like MongoDB_, you can store any document\n (represented as ``dict``) in
TinyDB.\n\n- **optimized for your happiness:** TinyDB is designed to be simple and\n fun to use by providing a simple and clean API.\n\n- **written in pure Python:** TinyDB neither needs an external server (as\n e.g. `PyMongo <https://api.mongodb.org/python/current/>`_) nor any dependencies\n from PyPI.\n\n- **works on Python 3.5+ and PyPy:** TinyDB works on all modern versions of Python\n and PyPy.\n\n- **powerfully extensible:** You can easily extend TinyDB by writing new\n storages or modify the behaviour of storages with Middlewares.\n\n- **100% test coverage:** No explanation needed.\n\nTo dive straight into all the details, head over to the `TinyDB docs\n<https://tinydb.readthedocs.io/>`_. You can also discuss everything related\nto TinyDB like general development, extensions or showcase your TinyDB-based\nprojects on the `discussion forum <http://forum.m-siemens.de/.>`_.\n\nSupported Python Versions\n*************************\n\nTinyDB has been tested with Python 3.5 - 3
.8 and PyPy.\n\nExample Code\n************\n\n.. code-block:: python\n\n >>> from tinydb import TinyDB, Query\n >>> db = TinyDB('/path/to/db.json')\n >>> db.insert({'int': 1, 'char': 'a'})\n >>> db.insert({'int': 1, 'char': 'b'})\n\nQuery Language\n==============\n\n.. code-block:: python\n\n >>> User = Query()\n >>> # Search for a field value\n >>> db.search(User.name == 'John')\n [{'name': 'John', 'age': 22}, {'name': 'John', 'age': 37}]\n\n >>> # Combine two queries with logical and\n >>> db.search((User.name == 'John') & (User.age <= 30))\n [{'name': 'John', 'age': 22}]\n\n >>> # Combine two queries with logical or\n >>> db.search((User.name == 'John') | (User.name == 'Bob'))\n [{'name': 'John', 'age': 22}, {'name': 'John', 'age': 37}, {'name': 'Bob', 'age': 42}]\n\n >>> # More possible comparisons: != < > <= >=\n >>> # More possible checks: where(...).matches(regex), where(...).test(your_test_func)\n\nTables\n======\n\n.. cod
e-block:: python\n\n >>> table = db.table('name')\n >>> table.insert({'value': True})\n >>> table.all()\n [{'value': True}]\n\nUsing Middlewares\n=================\n\n.. code-block:: python\n\n >>> from tinydb.storages import JSONStorage\n >>> from tinydb.middlewares import CachingMiddleware\n >>> db = TinyDB('/path/to/db.json', storage=CachingMiddleware(JSONStorage))\n\n\nContributing\n************\n\nWhether reporting bugs, discussing improvements and new ideas or writing\nextensions: Contributions to TinyDB are welcome! Here's how to get started:\n\n1. Check for open issues or open a fresh issue to start a discussion around\n a feature idea or a bug\n2. Fork `the repository <https://github.com/msiemens/tinydb/>`_ on Github,\n create a new branch off the `master` branch and start making your changes\n (known as `GitHub Flow <https://guides.github.com/introduction/flow/index.html>`_)\n3. Write a test which shows that the bug was fixed or that the feature
works\n as expected\n4. Send a pull request and bug the maintainer until it gets merged and\n published ���\n\n.. |Build Status| image:: https://img.shields.io/azure-devops/build/msiemens/3e5baa75-12ec-43ac-9728-… :target: https://dev.azure.com/msiemens/github/_build?definitionId=2\n.. |Coverage| image:: http://img.shields.io/coveralls/msiemens/tinydb.svg?style=flat-square\n :target: https://coveralls.io/r/msiemens/tinydb\n.. |Version| image:: http://img.shields.io/pypi/v/tinydb.svg?style=flat-square\n :target: https://pypi.python.org/pypi/tinydb/\n.. _Buzhug: http://buzhug.sourceforge.net/\n.. _CodernityDB: https://github.com/perchouli/codernitydb\n.. _MongoDB: http://mongodb.org/\n",
+ 'long_description': ".. image:: https://raw.githubusercontent.com/msiemens/tinydb/master/artwork/logo.png\n :scale: 100%\n :height: 150px\n\n|Build Status| |Coverage| |Version|\n\nQuick Links\n***********\n\n- `Example Code`_\n- `Supported Python Versions`_\n- `Documentation <http://tinydb.readthedocs.org/>`_\n- `Changelog <https://tinydb.readthedocs.io/en/latest/changelog.html>`_\n- `Extensions <https://tinydb.readthedocs.io/en/latest/extensions.html>`_\n- `Contributing`_\n\nIntroduction\n************\n\nTinyDB is a lightweight document oriented database optimized for your happiness :)\nIt's written in pure Python and has no external dependencies. The target are\nsmall apps that would be blown away by a SQL-DB or an external database server.\n\nTinyDB is:\n\n- **tiny:** The current source code has 1800 lines of code (with about 40%\n documentation) and 1600 lines tests.\n\n- **document oriented:** Like MongoDB_, you can store any document\n (represented as ``dict``) in
TinyDB.\n\n- **optimized for your happiness:** TinyDB is designed to be simple and\n fun to use by providing a simple and clean API.\n\n- **written in pure Python:** TinyDB neither needs an external server (as\n e.g. `PyMongo <https://api.mongodb.org/python/current/>`_) nor any dependencies\n from PyPI.\n\n- **works on Python 3.6+ and PyPy3:** TinyDB works on all modern versions of Python\n and PyPy.\n\n- **powerfully extensible:** You can easily extend TinyDB by writing new\n storages or modify the behaviour of storages with Middlewares.\n\n- **100% test coverage:** No explanation needed.\n\nTo dive straight into all the details, head over to the `TinyDB docs\n<https://tinydb.readthedocs.io/>`_. You can also discuss everything related\nto TinyDB like general development, extensions or showcase your TinyDB-based\nprojects on the `discussion forum <http://forum.m-siemens.de/.>`_.\n\nSupported Python Versions\n*************************\n\nTinyDB has been tested with Python 3.6 -
3.9 and PyPy3.\n\nExample Code\n************\n\n.. code-block:: python\n\n >>> from tinydb import TinyDB, Query\n >>> db = TinyDB('/path/to/db.json')\n >>> db.insert({'int': 1, 'char': 'a'})\n >>> db.insert({'int': 1, 'char': 'b'})\n\nQuery Language\n==============\n\n.. code-block:: python\n\n >>> User = Query()\n >>> # Search for a field value\n >>> db.search(User.name == 'John')\n [{'name': 'John', 'age': 22}, {'name': 'John', 'age': 37}]\n\n >>> # Combine two queries with logical and\n >>> db.search((User.name == 'John') & (User.age <= 30))\n [{'name': 'John', 'age': 22}]\n\n >>> # Combine two queries with logical or\n >>> db.search((User.name == 'John') | (User.name == 'Bob'))\n [{'name': 'John', 'age': 22}, {'name': 'John', 'age': 37}, {'name': 'Bob', 'age': 42}]\n\n >>> # More possible comparisons: != < > <= >=\n >>> # More possible checks: where(...).matches(regex), where(...).test(your_test_func)\n\nTables\n======\n\n.. c
ode-block:: python\n\n >>> table = db.table('name')\n >>> table.insert({'value': True})\n >>> table.all()\n [{'value': True}]\n\nUsing Middlewares\n=================\n\n.. code-block:: python\n\n >>> from tinydb.storages import JSONStorage\n >>> from tinydb.middlewares import CachingMiddleware\n >>> db = TinyDB('/path/to/db.json', storage=CachingMiddleware(JSONStorage))\n\n\nContributing\n************\n\nWhether reporting bugs, discussing improvements and new ideas or writing\nextensions: Contributions to TinyDB are welcome! Here's how to get started:\n\n1. Check for open issues or open a fresh issue to start a discussion around\n a feature idea or a bug\n2. Fork `the repository <https://github.com/msiemens/tinydb/>`_ on Github,\n create a new branch off the `master` branch and start making your changes\n (known as `GitHub Flow <https://guides.github.com/introduction/flow/index.html>`_)\n3. Write a test which shows that the bug was fixed or that the featur
e works\n as expected\n4. Send a pull request and bug the maintainer until it gets merged and\n published ���\n\n.. |Build Status| image:: https://img.shields.io/azure-devops/build/msiemens/3e5baa75-12ec-43ac-9728-… :target: https://dev.azure.com/msiemens/github/_build?definitionId=2\n.. |Coverage| image:: http://img.shields.io/coveralls/msiemens/tinydb.svg?style=flat-square\n :target: https://coveralls.io/r/msiemens/tinydb\n.. |Version| image:: http://img.shields.io/pypi/v/tinydb.svg?style=flat-square\n :target: https://pypi.python.org/pypi/tinydb/\n.. _Buzhug: http://buzhug.sourceforge.net/\n.. _CodernityDB: https://github.com/perchouli/codernitydb\n.. _MongoDB: http://mongodb.org/\n",
'author': 'Markus Siemens',
'author_email': 'markus(a)m-siemens.de',
'maintainer': None,
@@ -19,6 +22,7 @@
'url': 'https://github.com/msiemens/tinydb',
'packages': packages,
'package_data': package_data,
+ 'extras_require': extras_require,
'python_requires': '>=3.5,<4.0',
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinydb-4.4.0/tinydb/database.py new/tinydb-4.5.1/tinydb/database.py
--- old/tinydb-4.4.0/tinydb/database.py 2021-02-11 20:30:49.633945200 +0100
+++ new/tinydb-4.5.1/tinydb/database.py 2021-07-17 10:34:48.424737200 +0200
@@ -1,14 +1,19 @@
"""
This module contains the main component of TinyDB: the database.
"""
-from typing import Dict, Iterator, Set
+from typing import Dict, Iterator, Set, Type
from . import JSONStorage
from .storages import Storage
from .table import Table, Document
+from .utils import with_typehint
+# The table's base class. This is used to add type hinting from the Table
+# class to TinyDB. Currently this supports PyCharm, Pyright/VS Code and MyPy.
+TableBase: Type[Table] = with_typehint(Table)
-class TinyDB:
+
+class TinyDB(TableBase):
"""
The main class of TinyDB.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinydb-4.4.0/tinydb/mypy_plugin.py new/tinydb-4.5.1/tinydb/mypy_plugin.py
--- old/tinydb-4.4.0/tinydb/mypy_plugin.py 1970-01-01 01:00:00.000000000 +0100
+++ new/tinydb-4.5.1/tinydb/mypy_plugin.py 2021-07-17 10:34:48.424737200 +0200
@@ -0,0 +1,38 @@
+from typing import TypeVar, Optional, Callable, Dict
+
+from mypy.nodes import NameExpr
+from mypy.options import Options
+from mypy.plugin import Plugin, DynamicClassDefContext
+
+T = TypeVar('T')
+CB = Optional[Callable[[T], None]]
+DynamicClassDef = DynamicClassDefContext
+
+
+class TinyDBPlugin(Plugin):
+ def __init__(self, options: Options):
+ super().__init__(options)
+
+ self.named_placeholders: Dict[str, str] = {}
+
+ def get_dynamic_class_hook(self, fullname: str) -> CB[DynamicClassDef]:
+ if fullname == 'tinydb.utils.with_typehint':
+ def hook(ctx: DynamicClassDefContext):
+ klass = ctx.call.args[0]
+ assert isinstance(klass, NameExpr)
+
+ type_name = klass.fullname
+ assert type_name is not None
+
+ qualified = self.lookup_fully_qualified(type_name)
+ assert qualified is not None
+
+ ctx.api.add_symbol_table_node(ctx.name, qualified)
+
+ return hook
+
+ return None
+
+
+def plugin(_version: str):
+ return TinyDBPlugin
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinydb-4.4.0/tinydb/queries.py new/tinydb-4.5.1/tinydb/queries.py
--- old/tinydb-4.4.0/tinydb/queries.py 2021-02-11 20:30:49.633945200 +0100
+++ new/tinydb-4.5.1/tinydb/queries.py 2021-07-17 10:34:48.424737200 +0200
@@ -17,17 +17,43 @@
"""
import re
+import sys
from typing import Mapping, Tuple, Callable, Any, Union, List
from .utils import freeze
-__all__ = ('Query', 'where')
+if sys.version_info >= (3, 8):
+ from typing import Protocol
+else:
+ from typing_extensions import Protocol
+
+__all__ = ('Query', 'QueryLike', 'where')
def is_sequence(obj):
return hasattr(obj, '__iter__')
+class QueryLike(Protocol):
+ """
+ A typing protocol that acts like a query.
+
+ Something that we use as a query must have two properties:
+
+ 1. It must be callable, accepting a `Mapping` object and returning a
+ boolean that indicates whether the value matches the query, and
+ 2. it must have a stable hash that will be used for query caching.
+
+ This query protocol is used to make MyPy correctly support the query
+ pattern that TinyDB uses.
+
+ See also https://mypy.readthedocs.io/en/stable/protocols.html#simple-user-defined-pr…
+ """
+ def __call__(self, value: Mapping) -> bool: ...
+
+ def __hash__(self): ...
+
+
class QueryInstance:
"""
A query instance.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinydb-4.4.0/tinydb/table.py new/tinydb-4.5.1/tinydb/table.py
--- old/tinydb-4.4.0/tinydb/table.py 2021-02-11 20:30:49.633945200 +0100
+++ new/tinydb-4.5.1/tinydb/table.py 2021-07-17 10:34:48.424737200 +0200
@@ -16,8 +16,8 @@
Tuple
)
+from .queries import QueryLike
from .storages import Storage
-from .queries import Query
from .utils import LRUCache
__all__ = ('Document', 'Table')
@@ -106,8 +106,8 @@
self._storage = storage
self._name = name
- self._query_cache = self.query_cache_class(capacity=cache_size) \
- # type: LRUCache[Query, List[Document]]
+ self._query_cache: LRUCache[QueryLike, List[Document]] \
+ = self.query_cache_class(capacity=cache_size)
self._next_id = None
@@ -215,7 +215,7 @@
return list(iter(self))
- def search(self, cond: Query) -> List[Document]:
+ def search(self, cond: QueryLike) -> List[Document]:
"""
Search for all documents matching a 'where' cond.
@@ -239,7 +239,7 @@
def get(
self,
- cond: Optional[Query] = None,
+ cond: Optional[QueryLike] = None,
doc_id: Optional[int] = None,
) -> Optional[Document]:
"""
@@ -276,7 +276,7 @@
def contains(
self,
- cond: Optional[Query] = None,
+ cond: Optional[QueryLike] = None,
doc_id: Optional[int] = None
) -> bool:
"""
@@ -301,7 +301,7 @@
def update(
self,
fields: Union[Mapping, Callable[[Mapping], None]],
- cond: Optional[Query] = None,
+ cond: Optional[QueryLike] = None,
doc_ids: Optional[Iterable[int]] = None,
) -> List[int]:
"""
@@ -348,7 +348,7 @@
updated_ids = []
def updater(table: dict):
- _cond = cast('Query', cond)
+ _cond = cast(QueryLike, cond)
# We need to convert the keys iterator to a list because
# we may remove entries from the ``table`` dict during
@@ -392,7 +392,7 @@
def update_multiple(
self,
updates: Iterable[
- Tuple[Union[Mapping, Callable[[Mapping], None]], Query]
+ Tuple[Union[Mapping, Callable[[Mapping], None]], QueryLike]
],
) -> List[int]:
"""
@@ -425,7 +425,7 @@
# during iteration)
for doc_id in list(table.keys()):
for fields, cond in updates:
- _cond = cast('Query', cond)
+ _cond = cast(QueryLike, cond)
# Pass through all documents to find documents matching the
# query. Call the processing callback with the document ID
@@ -441,19 +441,38 @@
return updated_ids
- def upsert(self, document: Mapping, cond: Query) -> List[int]:
+ def upsert(self, document: Mapping, cond: Optional[QueryLike] = None) -> List[int]:
"""
- Update a document, if it exist, insert it otherwise.
+ Update documents, if they exist, insert them otherwise.
- Note: this will update *all* documents matching the query.
+ Note: This will update *all* documents matching the query. Document
+ argument can be a tinydb.table.Document object if you want to specify a
+ doc_id.
:param document: the document to insert or the fields to update
- :param cond: which document to look for
- :returns: a list containing the updated document's ID
+ :param cond: which document to look for, optional if you've passed a
+ Document with a doc_id
+ :returns: a list containing the updated documents' IDs
"""
+ # Extract doc_id
+ if isinstance(document, Document) and hasattr(document, 'doc_id'):
+ doc_ids: Optional[List[int]] = [document.doc_id]
+ else:
+ doc_ids = None
+
+ # Make sure we can actually find a matching document
+ if doc_ids is None and cond is None:
+ raise ValueError("If you don't specify a search query, you must "
+ "specify a doc_id. Hint: use a table.Document "
+ "object.")
+
# Perform the update operation
- updated_docs = self.update(document, cond)
+ try:
+ updated_docs: Optional[List[int]] = self.update(document, cond, doc_ids)
+ except KeyError:
+ # This happens when a doc_id is specified, but it's missing
+ updated_docs = None
# If documents have been updated: return their IDs
if updated_docs:
@@ -465,7 +484,7 @@
def remove(
self,
- cond: Optional[Query] = None,
+ cond: Optional[QueryLike] = None,
doc_ids: Optional[Iterable[int]] = None,
) -> List[int]:
"""
@@ -485,7 +504,7 @@
# We need to convince MyPy (the static type checker) that
# the ``cond is not None`` invariant still holds true when
# the updater function is called
- _cond = cast('Query', cond)
+ _cond = cast(QueryLike, cond)
# We need to convert the keys iterator to a list because
# we may remove entries from the ``table`` dict during
@@ -537,7 +556,7 @@
# Reset document ID counter
self._next_id = None
- def count(self, cond: Query) -> int:
+ def count(self, cond: QueryLike) -> int:
"""
Count the documents matching a query.
@@ -691,7 +710,7 @@
# Convert the document IDs back to strings.
# This is required as some storages (most notably the JSON file format)
- # don't require IDs other than strings.
+ # don't support IDs other than strings.
tables[self.name] = {
str(doc_id): doc
for doc_id, doc in table.items()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinydb-4.4.0/tinydb/utils.py new/tinydb-4.5.1/tinydb/utils.py
--- old/tinydb-4.4.0/tinydb/utils.py 2021-02-11 20:30:49.633945200 +0100
+++ new/tinydb-4.5.1/tinydb/utils.py 2021-07-17 10:34:48.424737200 +0200
@@ -3,13 +3,37 @@
"""
from collections import OrderedDict, abc
-from typing import List, Iterator, TypeVar, Generic, Union, Optional
+from typing import List, Iterator, TypeVar, Generic, Union, Optional, Type, \
+ TYPE_CHECKING
K = TypeVar('K')
V = TypeVar('V')
D = TypeVar('D')
+T = TypeVar('T')
-__all__ = ('LRUCache', 'freeze')
+__all__ = ('LRUCache', 'freeze', 'with_typehint')
+
+
+def with_typehint(baseclass: Type[T]):
+ """
+ Add type hints from a specified class to a base class:
+
+ >>> class Foo(with_typehint(Bar)):
+ ... pass
+
+ This would add type hints from class ``Bar`` to class ``Foo``.
+
+ Note that while PyCharm and Pyright (for VS Code) understand this pattern,
+ MyPy does not. For that reason TinyDB has a MyPy plugin in
+ ``mypy_plugin.py`` that adds support for this pattern.
+ """
+ if TYPE_CHECKING:
+ # In the case of type checking: pretend that the target class inherits
+ # from the specified base class
+ return baseclass
+
+ # Otherwise: just inherit from `object` like a regular Python class
+ return object
class LRUCache(abc.MutableMapping, Generic[K, V]):
@@ -89,7 +113,7 @@
class FrozenDict(dict):
"""
- An immutable dictoinary.
+ An immutable dictionary.
This is used to generate stable hashes for queries that contain dicts.
Usually, Python dicts are not hashable because they are mutable. This
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tinydb-4.4.0/tinydb/version.py new/tinydb-4.5.1/tinydb/version.py
--- old/tinydb-4.4.0/tinydb/version.py 2021-02-11 20:30:49.633945200 +0100
+++ new/tinydb-4.5.1/tinydb/version.py 2021-07-17 10:34:48.424737200 +0200
@@ -1 +1 @@
-__version__ = '4.4.0'
+__version__ = '4.5.1'
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-xvfbwrapper for openSUSE:Factory checked in at 2021-08-28 22:29:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-xvfbwrapper (Old)
and /work/SRC/openSUSE:Factory/.python-xvfbwrapper.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-xvfbwrapper"
Sat Aug 28 22:29:17 2021 rev:7 rq:914741 version:0.2.9
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-xvfbwrapper/python-xvfbwrapper.changes 2020-04-21 13:06:57.400368249 +0200
+++ /work/SRC/openSUSE:Factory/.python-xvfbwrapper.new.1899/python-xvfbwrapper.changes 2021-08-28 22:29:33.666002280 +0200
@@ -1,0 +2,5 @@
+Fri Aug 27 12:27:38 UTC 2021 - pgajdos(a)suse.com
+
+- %check: use %pyunittest rpm macro
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-xvfbwrapper.spec ++++++
--- /var/tmp/diff_new_pack.IHJeku/_old 2021-08-28 22:29:34.134002763 +0200
+++ /var/tmp/diff_new_pack.IHJeku/_new 2021-08-28 22:29:34.134002763 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-xvfbwrapper
#
-# 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
@@ -59,7 +59,7 @@
%python_expand %fdupes %{buildroot}%{$python_sitelib}
%check
-%python_exec setup.py test -v
+%pyunittest discover -v
%files %{python_files}
%doc README.rst
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-application for openSUSE:Factory checked in at 2021-08-28 22:29:15
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-application (Old)
and /work/SRC/openSUSE:Factory/.python-application.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-application"
Sat Aug 28 22:29:15 2021 rev:2 rq:914740 version:3.0.3
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-application/python-application.changes 2019-11-27 13:53:33.464359361 +0100
+++ /work/SRC/openSUSE:Factory/.python-application.new.1899/python-application.changes 2021-08-28 22:29:31.638000174 +0200
@@ -1,0 +2,46 @@
+Fri Aug 27 13:09:15 UTC 2021 - Martin Hauke <mardnh(a)gmx.de>
+
+- Update to version 3.0.3
+ * Fixed writing process pid.
+- Update to version 3.0.2
+ * Fixed queue.
+- Update to version 3.0.1
+ * Fixed crash when using capture_output function.
+- Update to version 3.0.0
+ * Migrate to python3.
+- Update to version 2.8.0
+ * Fixed issue with the syslog handler and null bytes in messages.
+ * Call handleError on SyslogHandler when exception happens during
+ emit.
+ * Added some utility functions for setting up the log system
+ + Added set_handler function to set the main handler used by
+ logging (it will replace all existing handlers on the root
+ logger).
+ + Added capture_output function to capture and divert standard
+ output and standard error to the logging system.
+ * Replaced start_syslog with use_syslog and deprecated the
+ former.
+ * Improved detection of non-interactive mode.
+ * Renamed IfNotInteractive to WhenNotInteractive.
+ * Use the real path for runtime and config directories (follow
+ symlinks).
+ * Added daemon property on Process to check if it's in daemon
+ mode or not.
+ * Check exc_type instead of exc_value in the context manager's
+ __exit__ .
+ * Added module level log function to the log module similar to
+ logging.log .
+ * Use the with statement instead of try/finally.
+ * Fixed broad exception statement.
+ * Normalize names for descriptor method arguments.
+ * Removed docstrings from internal functions.
+ * Refactored configuration and runtime settings on Process.
+ * Make the local_root undefined when running from system binary
+ paths.
+ * Only ignore OSError in unlink wrapper.
+ * Use the new octal notation for file modes.
+ * Fixed spelling in exception message.
+ * Ordered imports alphabetically.
+ * Explicitly use python2 in shebang lines.
+
+-------------------------------------------------------------------
Old:
----
python-application-release-2.7.0.tar.gz
New:
----
python3-application-3.0.3.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-application.spec ++++++
--- /var/tmp/diff_new_pack.gV6G5C/_old 2021-08-28 22:29:32.974001560 +0200
+++ /var/tmp/diff_new_pack.gV6G5C/_new 2021-08-28 22:29:32.974001560 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-application
#
-# Copyright (c) 2019 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
@@ -18,13 +18,13 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-application
-Version: 2.7.0
+Version: 3.0.3
Release: 0
Summary: Basic building blocks for Python applications
License: LGPL-2.1-or-later
Group: Development/Libraries/Python
-URL: https://github.com/AGProjects/python-application
-Source: https://github.com/AGProjects/python-application/archive/release-%{version}…
+URL: https://github.com/AGProjects/python3-application
+Source: https://github.com/AGProjects/python3-application/archive/refs/tags/%{versi…
BuildRequires: %{python_module setuptools}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
@@ -46,7 +46,7 @@
- Manage the version number for applications, modules and packages.
%prep
-%setup -q -n %{name}-release-%{version}
+%setup -q -n python3-application-%{version}
%build
%python_build
@@ -62,6 +62,6 @@
%license LICENSE
%doc ChangeLog NEWS README examples/
%{python_sitelib}/application
-%{python_sitelib}/python_application*
+%{python_sitelib}/python*_application*
%changelog
++++++ python-application-release-2.7.0.tar.gz -> python3-application-3.0.3.tar.gz ++++++
++++ 2705 lines of diff (skipped)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package digikam for openSUSE:Factory checked in at 2021-08-28 22:29:14
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/digikam (Old)
and /work/SRC/openSUSE:Factory/.digikam.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "digikam"
Sat Aug 28 22:29:14 2021 rev:199 rq:914734 version:7.3.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/digikam/digikam.changes 2021-08-26 23:16:22.436195566 +0200
+++ /work/SRC/openSUSE:Factory/.digikam.new.1899/digikam.changes 2021-08-28 22:29:29.953998428 +0200
@@ -1,0 +2,5 @@
+Sat Aug 28 07:54:54 UTC 2021 - Christophe Giboudeaux <christophe(a)krop.fr>
+
+- Fix the libdigikamcore runtime dependency (boo#1189905)
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ digikam.spec ++++++
--- /var/tmp/diff_new_pack.sZu9zs/_old 2021-08-28 22:29:31.173999693 +0200
+++ /var/tmp/diff_new_pack.sZu9zs/_new 2021-08-28 22:29:31.177999697 +0200
@@ -152,7 +152,7 @@
%package -n libdigikamcore%{soversion}
Summary: The main digikam libraries
Group: Development/Libraries/KDE
-Requires: opencv-devel
+%requires_eq %(rpm --qf %%{name} -qf %{_libdir}/libopencv_dnn.so.%{pkg_version opencv-devel})
Recommends: %{name}-plugins
%description -n libdigikamcore%{soversion}
1
0