openSUSE Commits
Threads by month
- ----- 2025 -----
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- 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
December 2021
- 1 participants
- 2461 discussions
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package raspberrypi-firmware-dt for openSUSE:Factory checked in at 2021-12-01 20:46:23
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/raspberrypi-firmware-dt (Old)
and /work/SRC/openSUSE:Factory/.raspberrypi-firmware-dt.new.31177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "raspberrypi-firmware-dt"
Wed Dec 1 20:46:23 2021 rev:37 rq:934729 version:2021.11.19
Changes:
--------
--- /work/SRC/openSUSE:Factory/raspberrypi-firmware-dt/raspberrypi-firmware-dt.changes 2021-10-11 15:30:33.898743746 +0200
+++ /work/SRC/openSUSE:Factory/.raspberrypi-firmware-dt.new.31177/raspberrypi-firmware-dt.changes 2021-12-02 02:25:31.992549230 +0100
@@ -1,0 +2,14 @@
+Tue Nov 30 10:59:38 UTC 2021 - Guillaume GARDET <guillaume.gardet(a)opensuse.org>
+
+- Update to 14c1845ff9 (2021-11-19):
+ * Add DTS:
+ - bcm2710-rpi-zero-2-w.dts
+ - bcm2710-rpi-zero-2.dts
+ * Add overlays:
+ - adafruit-st7735r-overlay.dts
+ - fbtft-overlay.dts
+ - imx519-overlay.dts
+ - mcp2515-overlay.dts
+ - mlx90640-overlay.dts
+
+-------------------------------------------------------------------
Old:
----
raspberrypi-firmware-dt-2021.09.17.tar.xz
New:
----
raspberrypi-firmware-dt-2021.11.19.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ raspberrypi-firmware-dt.spec ++++++
--- /var/tmp/diff_new_pack.q4ADV4/_old 2021-12-02 02:25:32.600547109 +0100
+++ /var/tmp/diff_new_pack.q4ADV4/_new 2021-12-02 02:25:32.600547109 +0100
@@ -17,7 +17,7 @@
Name: raspberrypi-firmware-dt
-Version: 2021.09.17
+Version: 2021.11.19
Release: 0
Summary: Device trees for the Raspberry Pi firmware loader
License: GPL-2.0-only
++++++ raspberrypi-firmware-dt-2021.09.17.tar.xz -> raspberrypi-firmware-dt-2021.11.19.tar.xz ++++++
/work/SRC/openSUSE:Factory/raspberrypi-firmware-dt/raspberrypi-firmware-dt-2021.09.17.tar.xz /work/SRC/openSUSE:Factory/.raspberrypi-firmware-dt.new.31177/raspberrypi-firmware-dt-2021.11.19.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 racket for openSUSE:Factory checked in at 2021-11-30 23:15:53
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/racket (Old)
and /work/SRC/openSUSE:Factory/.racket.new.31177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "racket"
Tue Nov 30 23:15:53 2021 rev:14 rq:934581 version:8.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/racket/racket.changes 2021-06-16 20:37:06.839352916 +0200
+++ /work/SRC/openSUSE:Factory/.racket.new.31177/racket.changes 2021-12-02 02:25:29.352558440 +0100
@@ -1,0 +2,16 @@
+Sun Oct 10 07:26:11 UTC 2021 - Fred Fu <moonsolo(a)gmail.com>
+- Update to 8.2:
+ * Racket CS improved the performance of large-integer arithmetic.
+ * Racket has improved support for layered and tethered installation.
+ * Racket CS supports nonatomic allocation via ffi/unsafe.
+ * Cross-compilation works fully with the raco cross tool, which
+ is distributed separately as the ���raco-cross��� package.
+ * DrRacket has performance improvements when editing files with
+ picts containing large bitmaps.
+ * Typed Racket more consistently refines field types of
+ non-polymorphic structs.
+ * Printing of values is unified across the teaching language
+ implementations and the stepper.
+- Rebase racket-doc.patch
+
+-------------------------------------------------------------------
Old:
----
racket-8.1-src.tgz
New:
----
racket-8.2-src.tgz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ racket.spec ++++++
--- /var/tmp/diff_new_pack.RXgJi3/_old 2021-12-02 02:25:29.980556248 +0100
+++ /var/tmp/diff_new_pack.RXgJi3/_new 2021-12-02 02:25:29.984556234 +0100
@@ -18,7 +18,7 @@
Name: racket
-Version: 8.1
+Version: 8.2
Release: 0
Summary: Scheme implementation with teaching tools
License: Apache-2.0 OR MIT
++++++ racket-8.1-src.tgz -> racket-8.2-src.tgz ++++++
/work/SRC/openSUSE:Factory/racket/racket-8.1-src.tgz /work/SRC/openSUSE:Factory/.racket.new.31177/racket-8.2-src.tgz differ: char 5, line 1
++++++ racket-doc.patch ++++++
--- /var/tmp/diff_new_pack.RXgJi3/_old 2021-12-02 02:25:30.068555941 +0100
+++ /var/tmp/diff_new_pack.RXgJi3/_new 2021-12-02 02:25:30.068555941 +0100
@@ -1,16 +1,16 @@
---
- share/pkgs/scribble-lib/help/search.rkt | 3 ++-
+ share/pkgs/scribble-lib/help/search.rkt | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
--- share/pkgs/scribble-lib/help/search.rkt
-+++ share/pkgs/scribble-lib/help/search.rkt 2019-03-28 07:38:19.695803840 +0000
-@@ -43,7 +43,8 @@
- (let* ([path (build-path (find-user-doc-dir) sub)]
- [path (if (file-exists? path) path (build-path (find-doc-dir) sub))])
- (notify path)
-- (if (file-exists? path)
-+ (if (and (file-exists? path)
-+ (file-exists? (build-path (find-doc-dir) "docindex.sqlite")))
- (send-url/file path #:fragment fragment #:query query)
- (let ([part (lambda (pfx x) (if x (string-append pfx x) ""))])
- (send-url (string-append
++++ share/pkgs/scribble-lib/help/search.rkt
+@@ -47,7 +47,8 @@
+ ;; Doesn't exist, but notify and then fall back below:
+ (build-path (find-doc-dir) sub)))
+ (notify path)
+- (if (file-exists? path)
++ (if (and (file-exists? path)
++ (file-exists? (build-path (find-doc-dir) "docindex.sqlite")))
+ (send-url/file path #:fragment fragment #:query query)
+ (let ([part (lambda (pfx x) (if x (string-append pfx x) ""))])
+ (send-url (string-append
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package qpdf for openSUSE:Factory checked in at 2021-12-01 20:46:16
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/qpdf (Old)
and /work/SRC/openSUSE:Factory/.qpdf.new.31177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "qpdf"
Wed Dec 1 20:46:16 2021 rev:56 rq:934623 version:10.4.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/qpdf/qpdf.changes 2021-05-13 22:17:16.411873930 +0200
+++ /work/SRC/openSUSE:Factory/.qpdf.new.31177/qpdf.changes 2021-12-02 02:25:22.348582872 +0100
@@ -1,0 +2,25 @@
+Fri Nov 26 21:59:01 UTC 2021 - Dirk M��ller <dmueller(a)suse.com>
+
+- update to 10.4.0:
+ * From the qpdf CLI, the --allow-weak-crypto is now required to suppress a
+ warning when explicitly creating PDF files using RC4 encryption. While qpdf
+ will always retain the ability to read and write such files, doing so will
+ require explicit acknowledgment moving forward. For qpdf 10.4, this change
+ only affects the command-line tool. Starting in qpdf 11, there will be
+ small API changes to require explicit acknowledgment in those cases as
+ well. For additional information, see Chapter 6, Weak Cryptography.
+ * Fix potential bounds error when handling shell completion that could occur
+ when given bogus input.
+ * Properly handle overlay/underlay on completely empty pages
+ * Fix crash that could occur under certain conditions when using --pages with
+ files that had form fields.
+ * Make QPDF::findPage functions public.
+ * Add methods to Pl_Flate to be able to receive warnings on certain recoverable
+ conditions.
+ * Add an extra check to the library to detect when foreign objects are inserted
+ directly (instead of using QPDF::copyForeignObject) at the time of insertion
+ rather than when the file is written. Catching the error sooner makes it much
+ easier to locate the incorrect code.
+ * Improve diagnostics around parsing --pages command-line options
+
+-------------------------------------------------------------------
Old:
----
qpdf-10.3.2.tar.gz
qpdf-10.3.2.tar.gz.asc
New:
----
qpdf-10.4.0.tar.gz
qpdf-10.4.0.tar.gz.asc
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ qpdf.spec ++++++
--- /var/tmp/diff_new_pack.2FIK0y/_old 2021-12-02 02:25:23.028580500 +0100
+++ /var/tmp/diff_new_pack.2FIK0y/_new 2021-12-02 02:25:23.032580486 +0100
@@ -18,12 +18,12 @@
%define so_version 28
Name: qpdf
-Version: 10.3.2
+Version: 10.4.0
Release: 0
Summary: Command-line tools and library for transforming PDF files
License: Apache-2.0
Group: Development/Libraries/C and C++
-URL: http://qpdf.sourceforge.net/
+URL: https://qpdf.sourceforge.io/
Source: https://github.com/qpdf/qpdf/releases/download/release-qpdf-%{version}/qpdf…
Source1: https://github.com/qpdf/qpdf/releases/download/release-qpdf-%{version}/qpdf…
Source2: qpdf.keyring
@@ -82,10 +82,10 @@
--disable-implicit-crypto \
--docdir='${datarootdir}'/doc/packages/%{name} \
--enable-show-failed-test-output
-make %{?_smp_mflags}
+%make_build
%check
-make %{?_smp_mflags} check
+%make_build check
rm -rf qpdf/qtest # Unicode data can't be redistributed freely
%install
++++++ qpdf-10.3.2.tar.gz -> qpdf-10.4.0.tar.gz ++++++
/work/SRC/openSUSE:Factory/qpdf/qpdf-10.3.2.tar.gz /work/SRC/openSUSE:Factory/.qpdf.new.31177/qpdf-10.4.0.tar.gz differ: char 11, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python38 for openSUSE:Factory checked in at 2021-12-01 20:46:08
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python38 (Old)
and /work/SRC/openSUSE:Factory/.python38.new.31177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python38"
Wed Dec 1 20:46:08 2021 rev:20 rq:934639 version:3.8.12
Changes:
--------
--- /work/SRC/openSUSE:Factory/python38/python38.changes 2021-10-25 15:16:50.957653720 +0200
+++ /work/SRC/openSUSE:Factory/.python38.new.31177/python38.changes 2021-12-02 02:25:17.472599882 +0100
@@ -1,0 +2,10 @@
+Mon Nov 29 00:17:07 UTC 2021 - Matej Cepl <mcepl(a)suse.com>
+
+- Remove shebangs from from python-base libraries in _libdir
+ (bsc#1193179).
+- Readjust patches:
+ - bpo-31046_ensurepip_honours_prefix.patch
+ - decimal.patch
+ - python-3.3.0b1-fix_date_time_compiler.patch
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python38.spec ++++++
--- /var/tmp/diff_new_pack.8802Zr/_old 2021-12-02 02:25:18.188597384 +0100
+++ /var/tmp/diff_new_pack.8802Zr/_new 2021-12-02 02:25:18.192597370 +0100
@@ -123,13 +123,13 @@
# PATCH-FEATURE-UPSTREAM SUSE-FEDORA-multilib.patch bsc#[0-9]+ mcepl(a)suse.com
# Add support for platlib variable
Patch03: SUSE-FEDORA-multilib.patch
-# PATCH-FEATURE-UPSTREAM distutils-reproducible-compile.patch gh#python/cpython#8057 mcepl(a)suse.com
-# Improve reproduceability
-Patch06: distutils-reproducible-compile.patch
# PATCH-FEATURE-UPSTREAM decimal-3.8.patch bsc#1189356 mcepl(a)suse.com
# fix building with mpdecimal
# https://www.bytereef.org/contrib/decimal-3.8.diff
Patch05: decimal-3.8.patch
+# PATCH-FEATURE-UPSTREAM distutils-reproducible-compile.patch gh#python/cpython#8057 mcepl(a)suse.com
+# Improve reproduceability
+Patch06: distutils-reproducible-compile.patch
# support finding packages in /usr/local, install to /usr/local by default
Patch07: python-3.3.0b1-localpath.patch
# replace DATE, TIME and COMPILER by fixed definitions to aid reproducible builds
@@ -426,6 +426,7 @@
# drop Autoconf version requirement
sed -i 's/^AC_PREREQ/dnl AC_PREREQ/' configure.ac
+%if %{primary_interpreter}
# fix shebangs - convert /usr/local/bin/python and /usr/bin/env/python to /usr/bin/python3
for dir in Lib Tools; do
# find *.py, filter to files that contain bad shebangs
@@ -434,6 +435,13 @@
| xargs -0 grep -lE '^#! *(/''usr/.*bin/(env +)?)?python' \
| xargs sed -r -i -e '1s@^#![[:space:]]*(/''usr/(local/)?bin/(env +)?)?python([0-9]+(\.[0-9]+)?)?@#!%{_bindir}/python3@'
done
+%else
+# For non-primary Python, just don't bother (bsc#1193179) and remove all
+# those shebangs
+for dir in Lib Tools; do
+ find $dir -name '*.py' -type f -exec sed -i '1{/^#!.*python/ d}' '{}' \;
+done
+%endif
# drop in-tree libffi and expat
rm -r Modules/_ctypes/libffi* Modules/_ctypes/darwin
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python36 for openSUSE:Factory checked in at 2021-12-01 20:47:00
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python36 (Old)
and /work/SRC/openSUSE:Factory/.python36.new.31177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python36"
Wed Dec 1 20:47:00 2021 rev:24 rq:934644 version:3.6.15
Changes:
--------
--- /work/SRC/openSUSE:Factory/python36/python36.changes 2021-10-30 23:14:31.491093522 +0200
+++ /work/SRC/openSUSE:Factory/.python36.new.31177/python36.changes 2021-12-02 02:25:16.220604250 +0100
@@ -1,0 +2,22 @@
+Mon Nov 29 00:17:07 UTC 2021 - Matej Cepl <mcepl(a)suse.com>
+
+- Remove shebangs from from python-base libraries in _libdir
+ (bsc#1193179).
+- Readjust patches:
+ - bpo-31046_ensurepip_honours_prefix.patch
+ - decimal.patch
+ - python-3.3.0b1-fix_date_time_compiler.patch
+
+-------------------------------------------------------------------
+Sat Nov 27 09:58:46 UTC 2021 - Dirk M��ller <dmueller(a)suse.com>
+
+- build against openssl 1.1 as it is incompatible with openssl 3.0+ (bsc#1190566)
+
+-------------------------------------------------------------------
+Wed Nov 3 09:50:39 UTC 2021 - Andreas Schwab <schwab(a)suse.de>
+
+- 0001-allow-for-reproducible-builds-of-python-packages.patch: ignore
+ permission error when changing the mtime of the source file in presence
+ of SOURCE_DATE_EPOCH
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python36.spec ++++++
--- /var/tmp/diff_new_pack.Z52qBD/_old 2021-12-02 02:25:17.144601026 +0100
+++ /var/tmp/diff_new_pack.Z52qBD/_new 2021-12-02 02:25:17.148601013 +0100
@@ -176,20 +176,20 @@
BuildRequires: automake
BuildRequires: fdupes
BuildRequires: gmp-devel
+BuildRequires: libopenssl-1_1-devel
BuildRequires: lzma-devel
BuildRequires: netcfg
-BuildRequires: openssl-devel
BuildRequires: pkgconfig
-%if 0%{?suse_version} >= 1550
-# The provider for python(abi) is in rpm-build-python
-BuildRequires: rpm-build-python
-%endif
BuildRequires: xz
BuildRequires: pkgconfig(bzip2)
BuildRequires: pkgconfig(expat)
BuildRequires: pkgconfig(libffi)
BuildRequires: pkgconfig(zlib)
#!BuildIgnore: gdk-pixbuf-loader-rsvg
+%if 0%{?suse_version} >= 1550
+# The provider for python(abi) is in rpm-build-python
+BuildRequires: rpm-build-python
+%endif
%if 0%{?suse_version} >= 1500
BuildRequires: pkgconfig(libnsl)
BuildRequires: pkgconfig(libtirpc)
@@ -450,6 +450,7 @@
# drop Autoconf version requirement
sed -i 's/^AC_PREREQ/dnl AC_PREREQ/' configure.ac
+%if %{primary_interpreter}
# fix shebangs - convert /usr/local/bin/python and /usr/bin/env/python to /usr/bin/python3
for dir in Lib Tools; do
# find *.py, filter to files that contain bad shebangs
@@ -458,6 +459,13 @@
| xargs -0 grep -lE '^#! *(/''usr/.*bin/(env +)?)?python' \
| xargs sed -r -i -e '1s@^#![[:space:]]*(/''usr/(local/)?bin/(env +)?)?python([0-9]+(\.[0-9]+)?)?@#!%{_bindir}/python3@'
done
+%else
+# For non-primary Python, just don't bother (bsc#1193179) and remove all
+# those shebangs
+for dir in Lib Tools; do
+ find $dir -name '*.py' -type f -exec sed -i '1{/^#!.*python/ d}' '{}' \;
+done
+%endif
# drop in-tree libffi and expat
rm -r Modules/_ctypes/libffi* Modules/_ctypes/darwin
++++++ 0001-allow-for-reproducible-builds-of-python-packages.patch ++++++
--- /var/tmp/diff_new_pack.Z52qBD/_old 2021-12-02 02:25:17.172600928 +0100
+++ /var/tmp/diff_new_pack.Z52qBD/_new 2021-12-02 02:25:17.176600915 +0100
@@ -21,21 +21,21 @@
Lib/py_compile.py | 4 ++++
1 file changed, 4 insertions(+)
-diff --git a/Lib/py_compile.py b/Lib/py_compile.py
-index 11c5b50..62dcdc7 100644
---- a/Lib/py_compile.py
-+++ b/Lib/py_compile.py
-@@ -137,6 +137,10 @@ def compile(file, cfile=None, dfile=None, doraise=False, optimize=-1):
+Index: Python-3.6.15/Lib/py_compile.py
+===================================================================
+--- Python-3.6.15.orig/Lib/py_compile.py
++++ Python-3.6.15/Lib/py_compile.py
+@@ -137,6 +137,13 @@ def compile(file, cfile=None, dfile=None
except FileExistsError:
pass
source_stats = loader.path_stats(file)
+ sde = os.environ.get('SOURCE_DATE_EPOCH')
+ if sde and source_stats['mtime'] > int(sde):
+ source_stats['mtime'] = int(sde)
-+ os.utime(file, (source_stats['mtime'], source_stats['mtime']))
++ try:
++ os.utime(file, (source_stats['mtime'], source_stats['mtime']))
++ except PermissionError:
++ pass
bytecode = importlib._bootstrap_external._code_to_bytecode(
code, source_stats['mtime'], source_stats['size'])
mode = importlib._bootstrap_external._calc_mode(file)
---
-2.10.2
-
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-zeroconf for openSUSE:Factory checked in at 2021-11-29 17:28:36
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-zeroconf (Old)
and /work/SRC/openSUSE:Factory/.python-zeroconf.new.31177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-zeroconf"
Mon Nov 29 17:28:36 2021 rev:28 rq:934518 version:0.37.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-zeroconf/python-zeroconf.changes 2021-11-07 00:19:30.208553109 +0100
+++ /work/SRC/openSUSE:Factory/.python-zeroconf.new.31177/python-zeroconf.changes 2021-12-02 02:25:12.420617506 +0100
@@ -1,0 +2,13 @@
+Mon Nov 29 11:04:03 UTC 2021 - Dirk M��ller <dmueller(a)suse.com>
+
+- update to 0.37.0:
+ * Adding a listener that does not inherit from RecordUpdateListener now logs
+ an error
+ * The NotRunningException exception is now thrown when Zeroconf is not
+ running (#1033) @bdraco
+ * Before this change the consumer would get a timeout or an EventLoopBlocked
+ exception when calling ServiceInfo.*request when the instance had already been shutdown
+ or had failed to startup.
+ * The EventLoopBlocked exception is now thrown when a coroutine times out
+
+-------------------------------------------------------------------
Old:
----
python-zeroconf-0.36.12.obscpio
New:
----
python-zeroconf-0.37.0.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-zeroconf.spec ++++++
--- /var/tmp/diff_new_pack.8cd50M/_old 2021-12-02 02:25:12.880615901 +0100
+++ /var/tmp/diff_new_pack.8cd50M/_new 2021-12-02 02:25:12.884615887 +0100
@@ -19,7 +19,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%define skip_python2 1
Name: python-zeroconf
-Version: 0.36.12
+Version: 0.37.0
Release: 0
Summary: Pure Python Multicast DNS Service Discovery Library (Bonjour/Avahi compatible)
License: LGPL-2.0-only
++++++ _service ++++++
--- /var/tmp/diff_new_pack.8cd50M/_old 2021-12-02 02:25:12.920615761 +0100
+++ /var/tmp/diff_new_pack.8cd50M/_new 2021-12-02 02:25:12.920615761 +0100
@@ -2,8 +2,8 @@
<service name="obs_scm" mode="disabled">
<param name="url">https://github.com/jstasiak/python-zeroconf</param>
<param name="scm">git</param>
- <param name="revision">0.36.12</param>
- <param name="version">0.36.12</param>
+ <param name="revision">0.37.0</param>
+ <param name="version">0.37.0</param>
</service>
<service name="set_version" mode="disabled"/>
<service mode="buildtime" name="tar" />
++++++ python-zeroconf-0.36.12.obscpio -> python-zeroconf-0.37.0.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-zeroconf-0.36.12/README.rst new/python-zeroconf-0.37.0/README.rst
--- old/python-zeroconf-0.36.12/README.rst 2021-11-05 06:11:04.000000000 +0100
+++ new/python-zeroconf-0.37.0/README.rst 2021-11-18 21:30:53.000000000 +0100
@@ -138,10 +138,36 @@
Changelog
=========
+0.37.0
+======
+
+Technically backwards incompatible:
+
+* Adding a listener that does not inherit from RecordUpdateListener now logs an error (#1034) @bdraco
+* The NotRunningException exception is now thrown when Zeroconf is not running (#1033) @bdraco
+
+ Before this change the consumer would get a timeout or an EventLoopBlocked
+ exception when calling `ServiceInfo.*request` when the instance had already been shutdown
+ or had failed to startup.
+
+* The EventLoopBlocked exception is now thrown when a coroutine times out (#1032) @bdraco
+
+ Previously `concurrent.futures.TimeoutError` would have been raised
+ instead. This is never expected to happen during normal operation.
+
+0.36.13
+=======
+
+* Unavailable interfaces are now skipped during socket bind (#1028) @bdraco
+* Downgraded incoming corrupt packet logging to debug (#1029) @bdraco
+
+ Warning about network traffic we have no control over is confusing
+ to users as they think there is something wrong with zeroconf
+
0.36.12
=======
-* Prevent service lookups from deadlocking if time abruptly moves backwards (#1006) @bdraco
+* Prevented service lookups from deadlocking if time abruptly moves backwards (#1006) @bdraco
The typical reason time moves backwards is via an ntp update
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-zeroconf-0.36.12/setup.cfg new/python-zeroconf-0.37.0/setup.cfg
--- old/python-zeroconf-0.36.12/setup.cfg 2021-11-05 06:11:04.000000000 +0100
+++ new/python-zeroconf-0.37.0/setup.cfg 2021-11-18 21:30:53.000000000 +0100
@@ -1,5 +1,5 @@
[bumpversion]
-current_version = 0.36.12
+current_version = 0.37.0
commit = True
tag = True
tag_name = {new_version}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-zeroconf-0.36.12/tests/test_asyncio.py new/python-zeroconf-0.37.0/tests/test_asyncio.py
--- old/python-zeroconf-0.36.12/tests/test_asyncio.py 2021-11-05 06:11:04.000000000 +0100
+++ new/python-zeroconf-0.37.0/tests/test_asyncio.py 2021-11-18 21:30:53.000000000 +0100
@@ -23,6 +23,7 @@
DNSService,
DNSAddress,
DNSText,
+ NotRunningException,
ServiceStateChange,
Zeroconf,
const,
@@ -1091,6 +1092,15 @@
@pytest.mark.asyncio
+async def test_async_request_non_running_instance():
+ """Test that the async_request throws when zeroconf is not running."""
+ aiozc = AsyncZeroconf(interfaces=['127.0.0.1'])
+ await aiozc.async_close()
+ with pytest.raises(NotRunningException):
+ await aiozc.async_get_service_info("_notfound.local.", "notthere._notfound.local.")
+
+
+(a)pytest.mark.asyncio
async def test_legacy_unicast_response(run_isolated):
"""Verify legacy unicast responses include questions and correct id."""
type_ = "_mservice._tcp.local."
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-zeroconf-0.36.12/tests/test_handlers.py new/python-zeroconf-0.37.0/tests/test_handlers.py
--- old/python-zeroconf-0.36.12/tests/test_handlers.py 2021-11-05 06:11:04.000000000 +0100
+++ new/python-zeroconf-0.37.0/tests/test_handlers.py 2021-11-18 21:30:53.000000000 +0100
@@ -1538,3 +1538,25 @@
# But the one we have not sent yet shoudl still go out later
assert info2.dns_pointer() in outgoing_queue.queue[0].answers
+
+
+(a)pytest.mark.asyncio
+async def test_add_listener_warns_when_not_using_record_update_listener(caplog):
+ """Log when a listener is added that is not using RecordUpdateListener as a base class."""
+
+ aiozc = AsyncZeroconf(interfaces=['127.0.0.1'])
+ zc: Zeroconf = aiozc.zeroconf
+ updated = []
+
+ class MyListener:
+ """A RecordUpdateListener that does not implement update_records."""
+
+ def async_update_records(self, zc: 'Zeroconf', now: float, records: List[r.RecordUpdate]) -> None:
+ """Update multiple records in one shot."""
+ updated.extend(records)
+
+ zc.add_listener(MyListener(), None)
+ await asyncio.sleep(0) # flush out any call soons
+ assert "listeners passed to async_add_listener must inherit from RecordUpdateListener" in caplog.text
+
+ await aiozc.async_close()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-zeroconf-0.36.12/tests/test_logger.py new/python-zeroconf-0.37.0/tests/test_logger.py
--- old/python-zeroconf-0.36.12/tests/test_logger.py 2021-11-05 06:11:04.000000000 +0100
+++ new/python-zeroconf-0.37.0/tests/test_logger.py 2021-11-18 21:30:53.000000000 +0100
@@ -4,7 +4,7 @@
"""Unit tests for logger.py."""
import logging
-from unittest.mock import patch
+from unittest.mock import call, patch
from zeroconf._logger import QuietLogger, set_logger_level_if_unset
@@ -25,6 +25,7 @@
def test_log_warning_once():
"""Test we only log with warning level once."""
+ QuietLogger._seen_logs = {}
quiet_logger = QuietLogger()
with patch("zeroconf._logger.log.warning") as mock_log_warning, patch(
"zeroconf._logger.log.debug"
@@ -45,6 +46,7 @@
def test_log_exception_warning():
"""Test we only log with warning level once."""
+ QuietLogger._seen_logs = {}
quiet_logger = QuietLogger()
with patch("zeroconf._logger.log.warning") as mock_log_warning, patch(
"zeroconf._logger.log.debug"
@@ -63,8 +65,24 @@
assert mock_log_debug.mock_calls
+def test_llog_exception_debug():
+ """Test we only log with a trace once."""
+ QuietLogger._seen_logs = {}
+ quiet_logger = QuietLogger()
+ with patch("zeroconf._logger.log.debug") as mock_log_debug:
+ quiet_logger.log_exception_debug("the exception")
+
+ assert mock_log_debug.mock_calls == [call('the exception', exc_info=True)]
+
+ with patch("zeroconf._logger.log.debug") as mock_log_debug:
+ quiet_logger.log_exception_debug("the exception")
+
+ assert mock_log_debug.mock_calls == [call('the exception', exc_info=False)]
+
+
def test_log_exception_once():
"""Test we only log with warning level once."""
+ QuietLogger._seen_logs = {}
quiet_logger = QuietLogger()
exc = Exception()
with patch("zeroconf._logger.log.warning") as mock_log_warning, patch(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-zeroconf-0.36.12/tests/utils/test_asyncio.py new/python-zeroconf-0.37.0/tests/utils/test_asyncio.py
--- old/python-zeroconf-0.36.12/tests/utils/test_asyncio.py 2021-11-05 06:11:04.000000000 +0100
+++ new/python-zeroconf-0.37.0/tests/utils/test_asyncio.py 2021-11-18 21:30:53.000000000 +0100
@@ -13,6 +13,7 @@
import pytest
+from zeroconf import EventLoopBlocked
from zeroconf._core import _CLOSE_TIMEOUT
from zeroconf._utils import asyncio as aioutils
from zeroconf.const import _LOADED_SYSTEM_TIMEOUT
@@ -112,3 +113,14 @@
assert (
aioutils._TASK_AWAIT_TIMEOUT + aioutils._GET_ALL_TASKS_TIMEOUT + aioutils._WAIT_FOR_LOOP_TASKS_TIMEOUT
) < 1 + _CLOSE_TIMEOUT + _LOADED_SYSTEM_TIMEOUT
+
+
+async def test_run_coro_with_timeout() -> None:
+ """Test running a coroutine with a timeout raises EventLoopBlocked."""
+ loop = asyncio.get_event_loop()
+
+ def _run_in_loop():
+ aioutils.run_coro_with_timeout(asyncio.sleep(0.3), loop, 0.1)
+
+ with pytest.raises(EventLoopBlocked), patch.object(aioutils, "_LOADED_SYSTEM_TIMEOUT", 0.0):
+ await loop.run_in_executor(None, _run_in_loop)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-zeroconf-0.36.12/tests/utils/test_net.py new/python-zeroconf-0.37.0/tests/utils/test_net.py
--- old/python-zeroconf-0.36.12/tests/utils/test_net.py 2021-11-05 06:11:04.000000000 +0100
+++ new/python-zeroconf-0.37.0/tests/utils/test_net.py 2021-11-18 21:30:53.000000000 +0100
@@ -3,7 +3,7 @@
"""Unit tests for zeroconf._utils.net."""
-from unittest.mock import Mock, patch
+from unittest.mock import MagicMock, Mock, patch
import errno
import ifaddr
@@ -198,3 +198,26 @@
# No error should return True
with patch("socket.socket.setsockopt"):
assert netutils.add_multicast_member(sock, interface) is True
+
+
+def test_bind_raises_skips_address():
+ """Test bind failing in new_socket returns None on EADDRNOTAVAIL."""
+ err = errno.EADDRNOTAVAIL
+
+ def _mock_socket(*args, **kwargs):
+ sock = MagicMock()
+ sock.bind = MagicMock(side_effect=OSError(err, "Error: {}".format(err)))
+ return sock
+
+ with patch("socket.socket", _mock_socket):
+ assert netutils.new_socket(("0.0.0.0", 0)) is None
+
+ err = errno.EAGAIN
+ with pytest.raises(OSError), patch("socket.socket", _mock_socket):
+ netutils.new_socket(("0.0.0.0", 0))
+
+
+def test_new_respond_socket_new_socket_returns_none():
+ """Test new_respond_socket returns None if new_socket returns None."""
+ with patch.object(netutils, "new_socket", return_value=None):
+ assert netutils.new_respond_socket(("0.0.0.0", 0)) is None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-zeroconf-0.36.12/zeroconf/__init__.py new/python-zeroconf-0.37.0/zeroconf/__init__.py
--- old/python-zeroconf-0.36.12/zeroconf/__init__.py 2021-11-05 06:11:04.000000000 +0100
+++ new/python-zeroconf-0.37.0/zeroconf/__init__.py 2021-11-18 21:30:53.000000000 +0100
@@ -23,7 +23,7 @@
import sys
from ._cache import DNSCache # noqa # import needed for backwards compat
-from ._core import Zeroconf # noqa # import needed for backwards compat
+from ._core import Zeroconf
from ._dns import ( # noqa # import needed for backwards compat
DNSAddress,
DNSEntry,
@@ -36,16 +36,18 @@
DNSText,
DNSQuestionType,
)
-from ._logger import QuietLogger, log # noqa # import needed for backwards compat
-from ._exceptions import ( # noqa # import needed for backwards compat
+from ._exceptions import (
AbstractMethodException,
BadTypeInNameException,
Error,
+ EventLoopBlocked,
IncomingDecodeError,
NamePartTooLongException,
NonUniqueNameException,
+ NotRunningException,
ServiceNameAlreadyRegistered,
)
+from ._logger import QuietLogger, log # noqa # import needed for backwards compat
from ._protocol.incoming import DNSIncoming # noqa # import needed for backwards compat
from ._protocol.outgoing import DNSOutgoing # noqa # import needed for backwards compat
from ._services import ( # noqa # import needed for backwards compat
@@ -54,16 +56,14 @@
ServiceListener,
ServiceStateChange,
)
-from ._services.browser import ( # noqa # import needed for backwards compat
- ServiceBrowser,
-)
+from ._services.browser import ServiceBrowser
from ._services.info import ( # noqa # import needed for backwards compat
instance_name_from_service_info,
ServiceInfo,
)
from ._services.registry import ServiceRegistry # noqa # import needed for backwards compat
from ._services.types import ZeroconfServiceTypes
-from ._updates import RecordUpdate, RecordUpdateListener # noqa # import needed for backwards compat
+from ._updates import RecordUpdate, RecordUpdateListener
from ._utils.name import service_type_name # noqa # import needed for backwards compat
from ._utils.net import ( # noqa # import needed for backwards compat
add_multicast_member,
@@ -79,22 +79,34 @@
__author__ = 'Paul Scott-Murphy, William McBrine'
__maintainer__ = 'Jakub Stasiak <jakub(a)stasiak.at>'
-__version__ = '0.36.12'
+__version__ = '0.37.0'
__license__ = 'LGPL'
__all__ = [
"__version__",
- "DNSQuestionType",
"Zeroconf",
"ServiceInfo",
"ServiceBrowser",
"ServiceListener",
- "Error",
+ "DNSQuestionType",
"InterfaceChoice",
"ServiceStateChange",
"IPVersion",
"ZeroconfServiceTypes",
+ "RecordUpdate",
+ "RecordUpdateListener",
+ "current_time_millis",
+ # Exceptions
+ "Error",
+ "AbstractMethodException",
+ "BadTypeInNameException",
+ "EventLoopBlocked",
+ "IncomingDecodeError",
+ "NamePartTooLongException",
+ "NonUniqueNameException",
+ "NotRunningException",
+ "ServiceNameAlreadyRegistered",
]
if sys.version_info <= (3, 6): # pragma: no cover
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-zeroconf-0.36.12/zeroconf/_core.py new/python-zeroconf-0.37.0/zeroconf/_core.py
--- old/python-zeroconf-0.36.12/zeroconf/_core.py 2021-11-05 06:11:04.000000000 +0100
+++ new/python-zeroconf-0.37.0/zeroconf/_core.py 2021-11-18 21:30:53.000000000 +0100
@@ -32,7 +32,7 @@
from ._cache import DNSCache
from ._dns import DNSQuestion, DNSQuestionType
-from ._exceptions import NonUniqueNameException
+from ._exceptions import NonUniqueNameException, NotRunningException
from ._handlers import (
MulticastOutgoingQueue,
QueryHandler,
@@ -80,6 +80,7 @@
_MDNS_PORT,
_ONE_SECOND,
_REGISTER_TIME,
+ _STARTUP_TIMEOUT,
_TYPE_PTR,
_UNREGISTER_TIME,
)
@@ -118,15 +119,15 @@
self.protocols: List[AsyncListener] = []
self.readers: List[asyncio.DatagramTransport] = []
self.senders: List[asyncio.DatagramTransport] = []
+ self.running_event: Optional[asyncio.Event] = None
self._listen_socket = listen_socket
self._respond_sockets = respond_sockets
self._cleanup_timer: Optional[asyncio.TimerHandle] = None
- self._running_event: Optional[asyncio.Event] = None
def setup(self, loop: asyncio.AbstractEventLoop, loop_thread_ready: Optional[threading.Event]) -> None:
"""Set up the instance."""
self.loop = loop
- self._running_event = asyncio.Event()
+ self.running_event = asyncio.Event()
self.loop.create_task(self._async_setup(loop_thread_ready))
async def _async_setup(self, loop_thread_ready: Optional[threading.Event]) -> None:
@@ -136,16 +137,11 @@
millis_to_seconds(_CACHE_CLEANUP_INTERVAL), self._async_cache_cleanup
)
await self._async_create_endpoints()
- assert self._running_event is not None
- self._running_event.set()
+ assert self.running_event is not None
+ self.running_event.set()
if loop_thread_ready:
loop_thread_ready.set()
- async def async_wait_for_start(self) -> None:
- """Wait for start up."""
- assert self._running_event is not None
- await self._running_event.wait()
-
async def _async_create_endpoints(self) -> None:
"""Create endpoints to send and receive."""
assert self.loop is not None
@@ -192,7 +188,12 @@
transport.close()
def close(self) -> None:
- """Close from sync context."""
+ """Close from sync context.
+
+ While it is not expected during normal operation,
+ this function may raise EventLoopBlocked if the underlying
+ call to `_async_close` cannot be completed.
+ """
assert self.loop is not None
# Guard against Zeroconf.close() being called from the eventloop
if get_running_loop() == self.loop:
@@ -490,8 +491,17 @@
loop_thread_ready.wait()
async def async_wait_for_start(self) -> None:
- """Wait for start up."""
- await self.engine.async_wait_for_start()
+ """Wait for start up for actions that require a running Zeroconf instance.
+
+ Throws NotRunningException if the instance is not running or could
+ not be started.
+ """
+ if self.done: # If the instance was shutdown from under us, raise immediately
+ raise NotRunningException
+ assert self.engine.running_event is not None
+ await wait_event_or_timeout(self.engine.running_event, timeout=_STARTUP_TIMEOUT)
+ if not self.engine.running_event.is_set() or self.done:
+ raise NotRunningException
@property
def listeners(self) -> List[RecordUpdateListener]:
@@ -554,7 +564,12 @@
service. The name of the service may be changed if needed to make
it unique on the network. Additionally multiple cooperating responders
can register the same service on the network for resilience
- (if you want this behavior set `cooperating_responders` to `True`)."""
+ (if you want this behavior set `cooperating_responders` to `True`).
+
+ While it is not expected during normal operation,
+ this function may raise EventLoopBlocked if the underlying
+ call to `register_service` cannot be completed.
+ """
assert self.loop is not None
run_coro_with_timeout(
await_awaitable(
@@ -591,7 +606,12 @@
def update_service(self, info: ServiceInfo) -> None:
"""Registers service information to the network with a default TTL.
Zeroconf will then respond to requests for information for that
- service."""
+ service.
+
+ While it is not expected during normal operation,
+ this function may raise EventLoopBlocked if the underlying
+ call to `async_update_service` cannot be completed.
+ """
assert self.loop is not None
run_coro_with_timeout(
await_awaitable(self.async_update_service(info)), self.loop, _REGISTER_TIME * _REGISTER_BROADCASTS
@@ -662,7 +682,12 @@
out.add_answer_at_time(dns_address, 0)
def unregister_service(self, info: ServiceInfo) -> None:
- """Unregister a service."""
+ """Unregister a service.
+
+ While it is not expected during normal operation,
+ this function may raise EventLoopBlocked if the underlying
+ call to `async_unregister_service` cannot be completed.
+ """
assert self.loop is not None
run_coro_with_timeout(
self.async_unregister_service(info), self.loop, _UNREGISTER_TIME * _REGISTER_BROADCASTS
@@ -708,7 +733,12 @@
self.async_send(out)
def unregister_all_services(self) -> None:
- """Unregister all registered services."""
+ """Unregister all registered services.
+
+ While it is not expected during normal operation,
+ this function may raise EventLoopBlocked if the underlying
+ call to `async_unregister_all_services` cannot be completed.
+ """
assert self.loop is not None
run_coro_with_timeout(
self.async_unregister_all_services(), self.loop, _UNREGISTER_TIME * _REGISTER_BROADCASTS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-zeroconf-0.36.12/zeroconf/_exceptions.py new/python-zeroconf-0.37.0/zeroconf/_exceptions.py
--- old/python-zeroconf-0.36.12/zeroconf/_exceptions.py 2021-11-05 06:11:04.000000000 +0100
+++ new/python-zeroconf-0.37.0/zeroconf/_exceptions.py 2021-11-18 21:30:53.000000000 +0100
@@ -22,28 +22,46 @@
class Error(Exception):
- pass
+ """Base class for all zeroconf exceptions."""
class IncomingDecodeError(Error):
- pass
+ """Exception when there is invalid data in an incoming packet."""
class NonUniqueNameException(Error):
- pass
+ """Exception when the name is already registered."""
class NamePartTooLongException(Error):
- pass
+ """Exception when the name is too long."""
class AbstractMethodException(Error):
- pass
+ """Exception when a required method is not implemented."""
class BadTypeInNameException(Error):
- pass
+ """Exception when the type in a name is invalid."""
class ServiceNameAlreadyRegistered(Error):
- pass
+ """Exception when a service name is already registered."""
+
+
+class EventLoopBlocked(Error):
+ """Exception when the event loop is blocked.
+
+ This exception is never expected to be thrown
+ during normal operation. It should only happen
+ when the cpu is maxed out or there is something blocking
+ the event loop.
+ """
+
+
+class NotRunningException(Error):
+ """Exception when an action is called with a zeroconf instance that is not running.
+
+ The instance may not be running because it was already shutdown
+ or startup has failed in some unexpected way.
+ """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-zeroconf-0.36.12/zeroconf/_handlers.py new/python-zeroconf-0.37.0/zeroconf/_handlers.py
--- old/python-zeroconf-0.36.12/zeroconf/_handlers.py 2021-11-05 06:11:04.000000000 +0100
+++ new/python-zeroconf-0.37.0/zeroconf/_handlers.py 2021-11-18 21:30:53.000000000 +0100
@@ -492,6 +492,12 @@
This function is not threadsafe and must be called in the eventloop.
"""
+ if not isinstance(listener, RecordUpdateListener):
+ log.error(
+ "listeners passed to async_add_listener must inherit from RecordUpdateListener;"
+ " In the future this will fail"
+ )
+
self.listeners.append(listener)
if question is None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-zeroconf-0.36.12/zeroconf/_logger.py new/python-zeroconf-0.37.0/zeroconf/_logger.py
--- old/python-zeroconf-0.36.12/zeroconf/_logger.py 2021-11-05 06:11:04.000000000 +0100
+++ new/python-zeroconf-0.37.0/zeroconf/_logger.py 2021-11-18 21:30:53.000000000 +0100
@@ -52,6 +52,20 @@
logger(*(logger_data or ['Exception occurred']), exc_info=True)
@classmethod
+ def log_exception_debug(cls, *logger_data: Any) -> None:
+ log_exc_info = False
+ exc_info = sys.exc_info()
+ exc_str = str(exc_info[1])
+ import pprint
+
+ pprint.pprint(cls._seen_logs)
+ if exc_str not in cls._seen_logs:
+ # log the trace only on the first time
+ cls._seen_logs[exc_str] = exc_info
+ log_exc_info = True
+ log.debug(*(logger_data or ['Exception occurred']), exc_info=log_exc_info)
+
+ @classmethod
def log_warning_once(cls, *args: Any) -> None:
msg_str = args[0]
if msg_str not in cls._seen_logs:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-zeroconf-0.36.12/zeroconf/_protocol/incoming.py new/python-zeroconf-0.37.0/zeroconf/_protocol/incoming.py
--- old/python-zeroconf-0.36.12/zeroconf/_protocol/incoming.py 2021-11-05 06:11:04.000000000 +0100
+++ new/python-zeroconf-0.37.0/zeroconf/_protocol/incoming.py 2021-11-18 21:30:53.000000000 +0100
@@ -110,7 +110,7 @@
try:
parser_call()
except DECODE_EXCEPTIONS:
- self.log_exception_warning(
+ self.log_exception_debug(
'Received invalid packet from %s at offset %d while unpacking %r',
self.source,
self.offset,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-zeroconf-0.36.12/zeroconf/_services/info.py new/python-zeroconf-0.37.0/zeroconf/_services/info.py
--- old/python-zeroconf-0.36.12/zeroconf/_services/info.py 2021-11-05 06:11:04.000000000 +0100
+++ new/python-zeroconf-0.37.0/zeroconf/_services/info.py 2021-11-18 21:30:53.000000000 +0100
@@ -451,6 +451,10 @@
) -> bool:
"""Returns true if the service could be discovered on the
network, and updates this object with details discovered.
+
+ While it is not expected during normal operation,
+ this function may raise EventLoopBlocked if the underlying
+ call to `async_request` cannot be completed.
"""
assert zc.loop is not None and zc.loop.is_running()
if zc.loop == get_running_loop():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-zeroconf-0.36.12/zeroconf/_updates.py new/python-zeroconf-0.37.0/zeroconf/_updates.py
--- old/python-zeroconf-0.36.12/zeroconf/_updates.py 2021-11-05 06:11:04.000000000 +0100
+++ new/python-zeroconf-0.37.0/zeroconf/_updates.py 2021-11-18 21:30:53.000000000 +0100
@@ -36,6 +36,12 @@
class RecordUpdateListener:
+ """Base call for all record listeners.
+
+ All listeners passed to async_add_listener should use RecordUpdateListener
+ as a base class. In the future it will be required.
+ """
+
def update_record( # pylint: disable=no-self-use
self, zc: 'Zeroconf', now: float, record: DNSRecord
) -> None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-zeroconf-0.36.12/zeroconf/_utils/asyncio.py new/python-zeroconf-0.37.0/zeroconf/_utils/asyncio.py
--- old/python-zeroconf-0.36.12/zeroconf/_utils/asyncio.py 2021-11-05 06:11:04.000000000 +0100
+++ new/python-zeroconf-0.37.0/zeroconf/_utils/asyncio.py 2021-11-18 21:30:53.000000000 +0100
@@ -21,11 +21,13 @@
"""
import asyncio
+import concurrent.futures
import contextlib
import queue
from typing import Any, Awaitable, Coroutine, List, Optional, Set, cast
from .time import millis_to_seconds
+from .._exceptions import EventLoopBlocked
from ..const import _LOADED_SYSTEM_TIMEOUT
# The combined timeouts should be lower than _CLOSE_TIMEOUT + _WAIT_FOR_LOOP_TASKS_TIMEOUT
@@ -91,10 +93,22 @@
def run_coro_with_timeout(aw: Coroutine, loop: asyncio.AbstractEventLoop, timeout: float) -> Any:
- """Run a coroutine with a timeout."""
- return asyncio.run_coroutine_threadsafe(aw, loop).result(
- millis_to_seconds(timeout) + _LOADED_SYSTEM_TIMEOUT
- )
+ """Run a coroutine with a timeout.
+
+ The timeout should only be used as a safeguard to prevent
+ the program from blocking forever. The timeout should
+ never be expected to be reached during normal operation.
+
+ While not expected during normal operations, the
+ function raises `EventLoopBlocked` if the coroutine takes
+ longer to complete than the timeout.
+ """
+ try:
+ return asyncio.run_coroutine_threadsafe(aw, loop).result(
+ millis_to_seconds(timeout) + _LOADED_SYSTEM_TIMEOUT
+ )
+ except concurrent.futures.TimeoutError as ex:
+ raise EventLoopBlocked from ex
def shutdown_loop(loop: asyncio.AbstractEventLoop) -> None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-zeroconf-0.36.12/zeroconf/_utils/net.py new/python-zeroconf-0.37.0/zeroconf/_utils/net.py
--- old/python-zeroconf-0.36.12/zeroconf/_utils/net.py 2021-11-05 06:11:04.000000000 +0100
+++ new/python-zeroconf-0.37.0/zeroconf/_utils/net.py 2021-11-18 21:30:53.000000000 +0100
@@ -218,7 +218,7 @@
port: int = _MDNS_PORT,
ip_version: IPVersion = IPVersion.V4Only,
apple_p2p: bool = False,
-) -> socket.socket:
+) -> Optional[socket.socket]:
log.debug(
'Creating new socket with port %s, ip_version %s, apple_p2p %s and bind_addr %r',
port,
@@ -243,7 +243,17 @@
# https://opensource.apple.com/source/xnu/xnu-4570.41.2/bsd/sys/socket.h
s.setsockopt(socket.SOL_SOCKET, 0x1104, 1)
- s.bind((bind_addr[0], port, *bind_addr[1:]))
+ bind_tup = (bind_addr[0], port, *bind_addr[1:])
+ try:
+ s.bind(bind_tup)
+ except OSError as ex:
+ if ex.errno == errno.EADDRNOTAVAIL:
+ log.warning(
+ 'Address not available when binding to %s, ' 'it is expected to happen on some systems',
+ bind_tup,
+ )
+ return None
+ raise
log.debug('Created socket %s', s)
return s
@@ -323,6 +333,8 @@
apple_p2p=apple_p2p,
bind_addr=cast(Tuple[Tuple[str, int, int], int], interface)[0] if is_v6 else (cast(str, interface),),
)
+ if not respond_socket:
+ return None
log.debug('Configuring socket %s with multicast interface %s', respond_socket, interface)
if is_v6:
iface_bin = struct.pack('@I', cast(int, interface[1]))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-zeroconf-0.36.12/zeroconf/_utils/time.py new/python-zeroconf-0.37.0/zeroconf/_utils/time.py
--- old/python-zeroconf-0.36.12/zeroconf/_utils/time.py 2021-11-05 06:11:04.000000000 +0100
+++ new/python-zeroconf-0.37.0/zeroconf/_utils/time.py 2021-11-18 21:30:53.000000000 +0100
@@ -25,7 +25,11 @@
def current_time_millis() -> float:
- """Current system time in milliseconds"""
+ """Current time in milliseconds.
+
+ The current implemention uses `time.monotonic`
+ but may change in the future.
+ """
return time.monotonic() * 1000
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-zeroconf-0.36.12/zeroconf/asyncio.py new/python-zeroconf-0.37.0/zeroconf/asyncio.py
--- old/python-zeroconf-0.36.12/zeroconf/asyncio.py 2021-11-05 06:11:04.000000000 +0100
+++ new/python-zeroconf-0.37.0/zeroconf/asyncio.py 2021-11-18 21:30:53.000000000 +0100
@@ -218,8 +218,9 @@
async def async_close(self) -> None:
"""Ends the background threads, and prevent this instance from
servicing further queries."""
- with contextlib.suppress(asyncio.TimeoutError):
- await asyncio.wait_for(self.zeroconf.async_wait_for_start(), timeout=1)
+ if not self.zeroconf.done:
+ with contextlib.suppress(asyncio.TimeoutError):
+ await asyncio.wait_for(self.zeroconf.async_wait_for_start(), timeout=1)
await self.async_remove_all_service_listeners()
await self.async_unregister_all_services()
await self.zeroconf._async_close() # pylint: disable=protected-access
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-zeroconf-0.36.12/zeroconf/const.py new/python-zeroconf-0.37.0/zeroconf/const.py
--- old/python-zeroconf-0.36.12/zeroconf/const.py 2021-11-05 06:11:04.000000000 +0100
+++ new/python-zeroconf-0.37.0/zeroconf/const.py 2021-11-18 21:30:53.000000000 +0100
@@ -34,6 +34,7 @@
_BROWSER_BACKOFF_LIMIT = 3600 # s
_CACHE_CLEANUP_INTERVAL = 10000 # ms
_LOADED_SYSTEM_TIMEOUT = 10 # s
+_STARTUP_TIMEOUT = 9 # s must be lower than _LOADED_SYSTEM_TIMEOUT
_ONE_SECOND = 1000 # ms
# If the system is loaded or the event
++++++ python-zeroconf.obsinfo ++++++
--- /var/tmp/diff_new_pack.8cd50M/_old 2021-12-02 02:25:13.104615120 +0100
+++ /var/tmp/diff_new_pack.8cd50M/_new 2021-12-02 02:25:13.104615120 +0100
@@ -1,5 +1,5 @@
name: python-zeroconf
-version: 0.36.12
-mtime: 1636089064
-commit: 8b0dc48ed42d8edc78750122eb5685a50c3cdc11
+version: 0.37.0
+mtime: 1637267453
+commit: 2996e642f6b1abba1dbb8242ccca4cd4b96696f6
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-tqdm for openSUSE:Factory checked in at 2021-12-01 20:46:43
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-tqdm (Old)
and /work/SRC/openSUSE:Factory/.python-tqdm.new.31177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-tqdm"
Wed Dec 1 20:46:43 2021 rev:47 rq:934418 version:4.62.3
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-tqdm/python-tqdm.changes 2021-09-03 21:26:40.702208450 +0200
+++ /work/SRC/openSUSE:Factory/.python-tqdm.new.31177/python-tqdm.changes 2021-12-02 02:24:58.884664726 +0100
@@ -1,0 +2,19 @@
+Sat Nov 27 21:12:17 UTC 2021 - Arun Persaud <arun(a)gmx.de>
+
+- update to version 4.62.3:
+ * fix minor typo (#1246)
+ * minor example fix (#1246)
+ * misc tidying & refactoring
+ * misc build/dev framework updates
+ + update dependencies
+ + update linters
+ + update docs deployment branches
+ * misc test/ci updates
+ + test forks
+ + tidy OS & Python version tests
+ + bump primary python version 3.7 => 3.8
+ + beta py3.10 testing
+ + fix py2.7 tests
+ + better timeout handling
+
+-------------------------------------------------------------------
Old:
----
tqdm-4.62.2.tar.gz
New:
----
tqdm-4.62.3.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-tqdm.spec ++++++
--- /var/tmp/diff_new_pack.dFZMo6/_old 2021-12-02 02:24:59.312663232 +0100
+++ /var/tmp/diff_new_pack.dFZMo6/_new 2021-12-02 02:24:59.312663232 +0100
@@ -28,7 +28,7 @@
%bcond_with test
%endif
Name: python-tqdm%{pkg_suffix}
-Version: 4.62.2
+Version: 4.62.3
Release: 0
Summary: An extensible progress meter
License: MIT AND MPL-2.0
++++++ tqdm-4.62.2.tar.gz -> tqdm-4.62.3.tar.gz ++++++
++++ 6819 lines of diff (skipped)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-time-machine for openSUSE:Factory checked in at 2021-11-30 23:16:03
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-time-machine (Old)
and /work/SRC/openSUSE:Factory/.python-time-machine.new.31177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-time-machine"
Tue Nov 30 23:16:03 2021 rev:3 rq:934671 version:2.4.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-time-machine/python-time-machine.changes 2021-09-11 22:25:18.471432583 +0200
+++ /work/SRC/openSUSE:Factory/.python-time-machine.new.31177/python-time-machine.changes 2021-12-02 02:24:56.124674353 +0100
@@ -1,0 +2,6 @@
+Sat Nov 27 14:29:53 UTC 2021 - Sebastian Wagner <sebix+novell.com(a)sebix.at>
+
+- update to version 2.4.1:
+ - Build musllinux wheels.
+
+-------------------------------------------------------------------
Old:
----
python-time-machine-2.4.0.tar.gz
New:
----
python-time-machine-2.4.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-time-machine.spec ++++++
--- /var/tmp/diff_new_pack.VBCg7p/_old 2021-12-02 02:24:56.476673125 +0100
+++ /var/tmp/diff_new_pack.VBCg7p/_new 2021-12-02 02:24:56.480673112 +0100
@@ -20,7 +20,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-time-machine
Group: Development/Languages/Python
-Version: 2.4.0
+Version: 2.4.1
Release: 0
Summary: Travel through time in your tests
License: MIT
++++++ python-time-machine-2.4.0.tar.gz -> python-time-machine-2.4.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/time-machine-2.4.0/.editorconfig new/time-machine-2.4.1/.editorconfig
--- old/time-machine-2.4.0/.editorconfig 2021-09-01 10:18:32.000000000 +0200
+++ new/time-machine-2.4.1/.editorconfig 2021-11-27 15:24:20.000000000 +0100
@@ -4,14 +4,14 @@
[*]
indent_style = space
-indent_size = 4
+indent_size = 2
trim_trailing_whitespace = true
insert_final_newline = true
charset = utf-8
end_of_line = lf
-[*.{css,html,js,yaml,yml}]
-indent_size = 2
+[*.py]
+indent_size = 4
[Makefile]
indent_style = tab
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/time-machine-2.4.0/.github/ISSUE_TEMPLATE/feature-request.yml new/time-machine-2.4.1/.github/ISSUE_TEMPLATE/feature-request.yml
--- old/time-machine-2.4.0/.github/ISSUE_TEMPLATE/feature-request.yml 1970-01-01 01:00:00.000000000 +0100
+++ new/time-machine-2.4.1/.github/ISSUE_TEMPLATE/feature-request.yml 2021-11-27 15:24:20.000000000 +0100
@@ -0,0 +1,10 @@
+name: Feature Request
+description: Request an enhancement or new feature.
+body:
+- type: textarea
+ id: description
+ attributes:
+ label: Description
+ description: Please describe your feature request with appropriate detail.
+ validations:
+ required: true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/time-machine-2.4.0/.github/workflows/build.yml new/time-machine-2.4.1/.github/workflows/build.yml
--- old/time-machine-2.4.0/.github/workflows/build.yml 2021-09-01 10:18:32.000000000 +0200
+++ new/time-machine-2.4.1/.github/workflows/build.yml 2021-11-27 15:24:20.000000000 +0100
@@ -4,7 +4,7 @@
push:
branches:
- main
- pull_request:
+ workflow_dispatch:
jobs:
build_wheels:
@@ -27,11 +27,11 @@
- uses: actions/setup-python@v2
with:
- python-version: '3.9'
+ python-version: '3.10'
- name: Install cibuildwheel
run: |
- python -m pip install cibuildwheel==2.1.1
+ python -m pip install cibuildwheel==2.3.0
- name: Set up QEMU
if: runner.os == 'Linux'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/time-machine-2.4.0/.github/workflows/main.yml new/time-machine-2.4.1/.github/workflows/main.yml
--- old/time-machine-2.4.0/.github/workflows/main.yml 2021-09-01 10:18:32.000000000 +0200
+++ new/time-machine-2.4.1/.github/workflows/main.yml 2021-11-27 15:24:20.000000000 +0100
@@ -18,7 +18,7 @@
- 3.7
- 3.8
- 3.9
- - 3.10-dev
+ - '3.10'
steps:
- uses: actions/checkout@v2
@@ -26,23 +26,53 @@
- uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
-
- - uses: actions/cache@v2
- with:
- path: ~/.cache/pip
- key: ${{ runner.os }}-pip-${{ hashFiles('requirements/*.txt') }}
- restore-keys: |
- ${{ runner.os }}-pip-
+ cache: pip
+ cache-dependency-path: 'requirements/*.txt'
- name: Install dependencies
run: |
python -m pip install --upgrade pip setuptools wheel
- python -m pip install --upgrade codecov tox tox-py
+ python -m pip install --upgrade tox tox-py
- name: Run tox targets for ${{ matrix.python-version }}
run: tox --py current
- - name: Upload coverage
- run: |
- coverage combine
- codecov
+ - name: Upload coverage data
+ uses: actions/upload-artifact@v2
+ with:
+ name: coverage-data
+ path: '.coverage.*'
+
+ coverage:
+ name: Coverage
+ runs-on: ubuntu-20.04
+ needs: tests
+ steps:
+ - uses: actions/checkout@v2
+
+ - uses: actions/setup-python@v2
+ with:
+ python-version: '3.10'
+
+ - name: Install dependencies
+ run: python -m pip install --upgrade coverage[toml]
+
+ - name: Download data
+ uses: actions/download-artifact@v2
+ with:
+ name: coverage-data
+
+ - name: Combine data
+ run: python -m coverage combine
+
+ - name: Generate HTML report
+ run: python -m coverage html --skip-covered --skip-empty
+
+ - name: Upload HTML report
+ uses: actions/upload-artifact@v2
+ with:
+ name: html-report
+ path: htmlcov
+
+ - name: Terminal report
+ run: python -m coverage report --fail-under=100
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/time-machine-2.4.0/.pre-commit-config.yaml new/time-machine-2.4.1/.pre-commit-config.yaml
--- old/time-machine-2.4.0/.pre-commit-config.yaml 2021-09-01 10:18:32.000000000 +0200
+++ new/time-machine-2.4.1/.pre-commit-config.yaml 2021-11-27 15:24:20.000000000 +0100
@@ -1,3 +1,6 @@
+default_language_version:
+ python: python3.10
+
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.0.1
@@ -11,26 +14,26 @@
- id: end-of-file-fixer
- id: trailing-whitespace
- repo: https://github.com/asottile/pyupgrade
- rev: v2.25.0
+ rev: v2.29.1
hooks:
- id: pyupgrade
args: [--py36-plus]
- repo: https://github.com/psf/black
- rev: 21.8b0
+ rev: 21.11b1
hooks:
- id: black
- repo: https://github.com/asottile/blacken-docs
- rev: v1.11.0
+ rev: v1.12.0
hooks:
- id: blacken-docs
additional_dependencies:
- - black==21.7b0
+ - black==21.11b1
- repo: https://github.com/pycqa/isort
- rev: 5.9.3
+ rev: 5.10.1
hooks:
- id: isort
- repo: https://github.com/PyCQA/flake8
- rev: 3.9.2
+ rev: 4.0.1
hooks:
- id: flake8
additional_dependencies:
@@ -39,12 +42,12 @@
- flake8-tidy-imports
- flake8-typing-imports
- repo: https://github.com/mgedmin/check-manifest
- rev: "0.46"
+ rev: "0.47"
hooks:
- id: check-manifest
args: [--no-build-isolation]
- repo: https://github.com/pre-commit/mirrors-mypy
- rev: v0.910
+ rev: v0.910-1
hooks:
- id: mypy
additional_dependencies:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/time-machine-2.4.0/HISTORY.rst new/time-machine-2.4.1/HISTORY.rst
--- old/time-machine-2.4.0/HISTORY.rst 2021-09-01 10:18:32.000000000 +0200
+++ new/time-machine-2.4.1/HISTORY.rst 2021-11-27 15:24:20.000000000 +0100
@@ -2,6 +2,11 @@
History
=======
+2.4.1 (2021-11-27)
+------------------
+
+* Build musllinux wheels.
+
2.4.0 (2021-09-01)
------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/time-machine-2.4.0/README.rst new/time-machine-2.4.1/README.rst
--- old/time-machine-2.4.0/README.rst 2021-09-01 10:18:32.000000000 +0200
+++ new/time-machine-2.4.1/README.rst 2021-11-27 15:24:20.000000000 +0100
@@ -5,8 +5,8 @@
.. image:: https://img.shields.io/github/workflow/status/adamchainz/time-machine/CI/ma…
:target: https://github.com/adamchainz/time-machine/actions?workflow=CI
-.. image:: https://img.shields.io/codecov/c/github/adamchainz/time-machine/main?style=…
- :target: https://app.codecov.io/gh/adamchainz/time-machine
+.. image:: image:: https://img.shields.io/badge/Coverage-100%25-success?style=for-the-badge
+ :target: https://github.com/adamchainz/time-machine/actions?workflow=CI
.. image:: https://img.shields.io/pypi/v/time-machine.svg?style=for-the-badge
:target: https://pypi.org/project/time-machine/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/time-machine-2.4.0/requirements/compile.py new/time-machine-2.4.1/requirements/compile.py
--- old/time-machine-2.4.0/requirements/compile.py 2021-09-01 10:18:32.000000000 +0200
+++ new/time-machine-2.4.1/requirements/compile.py 2021-11-27 15:24:20.000000000 +0100
@@ -8,24 +8,35 @@
os.chdir(Path(__file__).parent)
os.environ["CUSTOM_COMPILE_COMMAND"] = "requirements/compile.py"
os.environ.pop("PIP_REQUIRE_VIRTUALENV")
- common_args = ["-m", "piptools", "compile", "--generate-hashes"] + sys.argv[1:]
+ common_args = [
+ "-m",
+ "piptools",
+ "compile",
+ "--generate-hashes",
+ "--allow-unsafe",
+ ] + sys.argv[1:]
subprocess.run(
["python3.6", *common_args, "-o", "py36.txt"],
check=True,
+ capture_output=True,
)
subprocess.run(
["python3.7", *common_args, "-o", "py37.txt"],
check=True,
+ capture_output=True,
)
subprocess.run(
["python3.8", *common_args, "-o", "py38.txt"],
check=True,
+ capture_output=True,
)
subprocess.run(
["python3.9", *common_args, "-o", "py39.txt"],
check=True,
+ capture_output=True,
)
subprocess.run(
["python3.10", *common_args, "-o", "py310.txt"],
check=True,
+ capture_output=True,
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/time-machine-2.4.0/requirements/py310.txt new/time-machine-2.4.1/requirements/py310.txt
--- old/time-machine-2.4.0/requirements/py310.txt 2021-09-01 10:18:32.000000000 +0200
+++ new/time-machine-2.4.1/requirements/py310.txt 2021-11-27 15:24:20.000000000 +0100
@@ -1,5 +1,5 @@
#
-# This file is autogenerated by pip-compile
+# This file is autogenerated by pip-compile with python 3.10
# To update, run:
#
# requirements/compile.py
@@ -8,93 +8,88 @@
--hash=sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1 \
--hash=sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb
# via pytest
-coverage==5.5 \
- --hash=sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c \
- --hash=sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6 \
- --hash=sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45 \
- --hash=sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a \
- --hash=sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03 \
- --hash=sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529 \
- --hash=sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a \
- --hash=sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a \
- --hash=sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2 \
- --hash=sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6 \
- --hash=sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759 \
- --hash=sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53 \
- --hash=sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a \
- --hash=sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4 \
- --hash=sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff \
- --hash=sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502 \
- --hash=sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793 \
- --hash=sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb \
- --hash=sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905 \
- --hash=sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821 \
- --hash=sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b \
- --hash=sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81 \
- --hash=sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0 \
- --hash=sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b \
- --hash=sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3 \
- --hash=sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184 \
- --hash=sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701 \
- --hash=sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a \
- --hash=sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82 \
- --hash=sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638 \
- --hash=sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5 \
- --hash=sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083 \
- --hash=sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6 \
- --hash=sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90 \
- --hash=sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465 \
- --hash=sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a \
- --hash=sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3 \
- --hash=sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e \
- --hash=sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066 \
- --hash=sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf \
- --hash=sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b \
- --hash=sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae \
- --hash=sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669 \
- --hash=sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873 \
- --hash=sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b \
- --hash=sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6 \
- --hash=sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb \
- --hash=sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160 \
- --hash=sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c \
- --hash=sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079 \
- --hash=sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d \
- --hash=sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6
+coverage==6.1.2 \
+ --hash=sha256:046647b96969fda1ae0605f61288635209dd69dcd27ba3ec0bf5148bc157f954 \
+ --hash=sha256:06d009e8a29483cbc0520665bc46035ffe9ae0e7484a49f9782c2a716e37d0a0 \
+ --hash=sha256:0cde7d9fe2fb55ff68ebe7fb319ef188e9b88e0a3d1c9c5db7dd829cd93d2193 \
+ --hash=sha256:1de9c6f5039ee2b1860b7bad2c7bc3651fbeb9368e4c4d93e98a76358cdcb052 \
+ --hash=sha256:24ed38ec86754c4d5a706fbd5b52b057c3df87901a8610d7e5642a08ec07087e \
+ --hash=sha256:27a3df08a855522dfef8b8635f58bab81341b2fb5f447819bc252da3aa4cf44c \
+ --hash=sha256:310c40bed6b626fd1f463e5a83dba19a61c4eb74e1ac0d07d454ebbdf9047e9d \
+ --hash=sha256:3348865798c077c695cae00da0924136bb5cc501f236cfd6b6d9f7a3c94e0ec4 \
+ --hash=sha256:35b246ae3a2c042dc8f410c94bcb9754b18179cdb81ff9477a9089dbc9ecc186 \
+ --hash=sha256:3f546f48d5d80a90a266769aa613bc0719cb3e9c2ef3529d53f463996dd15a9d \
+ --hash=sha256:586d38dfc7da4a87f5816b203ff06dd7c1bb5b16211ccaa0e9788a8da2b93696 \
+ --hash=sha256:5d3855d5d26292539861f5ced2ed042fc2aa33a12f80e487053aed3bcb6ced13 \
+ --hash=sha256:610c0ba11da8de3a753dc4b1f71894f9f9debfdde6559599f303286e70aeb0c2 \
+ --hash=sha256:62646d98cf0381ffda301a816d6ac6c35fc97aa81b09c4c52d66a15c4bef9d7c \
+ --hash=sha256:66af99c7f7b64d050d37e795baadf515b4561124f25aae6e1baa482438ecc388 \
+ --hash=sha256:675adb3b3380967806b3cbb9c5b00ceb29b1c472692100a338730c1d3e59c8b9 \
+ --hash=sha256:6e5a8c947a2a89c56655ecbb789458a3a8e3b0cbf4c04250331df8f647b3de59 \
+ --hash=sha256:7a39590d1e6acf6a3c435c5d233f72f5d43b585f5be834cff1f21fec4afda225 \
+ --hash=sha256:80cb70264e9a1d04b519cdba3cd0dc42847bf8e982a4d55c769b9b0ee7cdce1e \
+ --hash=sha256:82fdcb64bf08aa5db881db061d96db102c77397a570fbc112e21c48a4d9cb31b \
+ --hash=sha256:8492d37acdc07a6eac6489f6c1954026f2260a85a4c2bb1e343fe3d35f5ee21a \
+ --hash=sha256:94f558f8555e79c48c422045f252ef41eb43becdd945e9c775b45ebfc0cbd78f \
+ --hash=sha256:958ac66272ff20e63d818627216e3d7412fdf68a2d25787b89a5c6f1eb7fdd93 \
+ --hash=sha256:95a58336aa111af54baa451c33266a8774780242cab3704b7698d5e514840758 \
+ --hash=sha256:96129e41405887a53a9cc564f960d7f853cc63d178f3a182fdd302e4cab2745b \
+ --hash=sha256:97ef6e9119bd39d60ef7b9cd5deea2b34869c9f0b9777450a7e3759c1ab09b9b \
+ --hash=sha256:98d44a8136eebbf544ad91fef5bd2b20ef0c9b459c65a833c923d9aa4546b204 \
+ --hash=sha256:9d2c2e3ce7b8cc932a2f918186964bd44de8c84e2f9ef72dc616f5bb8be22e71 \
+ --hash=sha256:a300b39c3d5905686c75a369d2a66e68fd01472ea42e16b38c948bd02b29e5bd \
+ --hash=sha256:a34fccb45f7b2d890183a263578d60a392a1a218fdc12f5bce1477a6a68d4373 \
+ --hash=sha256:a4d48e42e17d3de212f9af44f81ab73b9378a4b2b8413fd708d0d9023f2bbde4 \
+ --hash=sha256:af45eea024c0e3a25462fade161afab4f0d9d9e0d5a5d53e86149f74f0a35ecc \
+ --hash=sha256:ba6125d4e55c0b8e913dad27b22722eac7abdcb1f3eab1bd090eee9105660266 \
+ --hash=sha256:bc1ee1318f703bc6c971da700d74466e9b86e0c443eb85983fb2a1bd20447263 \
+ --hash=sha256:c18725f3cffe96732ef96f3de1939d81215fd6d7d64900dcc4acfe514ea4fcbf \
+ --hash=sha256:c8e9c4bcaaaa932be581b3d8b88b677489975f845f7714efc8cce77568b6711c \
+ --hash=sha256:cc799916b618ec9fd00135e576424165691fec4f70d7dc12cfaef09268a2478c \
+ --hash=sha256:cd2d11a59afa5001ff28073ceca24ae4c506da4355aba30d1e7dd2bd0d2206dc \
+ --hash=sha256:d0a595a781f8e186580ff8e3352dd4953b1944289bec7705377c80c7e36c4d6c \
+ --hash=sha256:d3c5f49ce6af61154060640ad3b3281dbc46e2e0ef2fe78414d7f8a324f0b649 \
+ --hash=sha256:d9a635114b88c0ab462e0355472d00a180a5fbfd8511e7f18e4ac32652e7d972 \
+ --hash=sha256:e5432d9c329b11c27be45ee5f62cf20a33065d482c8dec1941d6670622a6fb8f \
+ --hash=sha256:eab14fdd410500dae50fd14ccc332e65543e7b39f6fc076fe90603a0e5d2f929 \
+ --hash=sha256:ebcc03e1acef4ff44f37f3c61df478d6e469a573aa688e5a162f85d7e4c3860d \
+ --hash=sha256:fae3fe111670e51f1ebbc475823899524e3459ea2db2cb88279bbfb2a0b8a3de \
+ --hash=sha256:fd92ece726055e80d4e3f01fff3b91f54b18c9c357c48fcf6119e87e2461a091 \
+ --hash=sha256:ffa545230ca2ad921ad066bf8fd627e7be43716b6e0fcf8e32af1b8188ccb0ab
# via -r requirements.in
iniconfig==1.1.1 \
--hash=sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3 \
--hash=sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32
# via pytest
-packaging==20.9 \
- --hash=sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5 \
- --hash=sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a
+packaging==21.3 \
+ --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb \
+ --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522
# via pytest
-pluggy==0.13.1 \
- --hash=sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0 \
- --hash=sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d
+pluggy==1.0.0 \
+ --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \
+ --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3
# via pytest
-py==1.10.0 \
- --hash=sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3 \
- --hash=sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a
+py==1.11.0 \
+ --hash=sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719 \
+ --hash=sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378
# via pytest
-pyparsing==2.4.7 \
- --hash=sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1 \
- --hash=sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b
+pyparsing==3.0.6 \
+ --hash=sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4 \
+ --hash=sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81
# via packaging
-pytest-randomly==3.8.0 \
- --hash=sha256:d9e21a72446757129378beea00bc9a32df1fb1cfd0bbe408be1ae9685bdf1209 \
- --hash=sha256:f5b7a09e84ee1eabcdedbb73c51d0929ae2f582bab6941dbb513bb49296d6340
- # via -r requirements.in
-pytest==6.2.4 \
- --hash=sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b \
- --hash=sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890
+pytest==6.2.5 \
+ --hash=sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89 \
+ --hash=sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134
# via
# -r requirements.in
# pytest-randomly
-python-dateutil==2.8.1 \
- --hash=sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c \
- --hash=sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a
+pytest-randomly==3.10.2 \
+ --hash=sha256:2c0a332c4b124e372e2473803bcc91ec87797664f4955afef2b844c0021662b1 \
+ --hash=sha256:cbd5c50b7c41491c202c71a3df33a75619d610a4f5c34aa2bd02ac30fce7cd43
+ # via -r requirements.in
+python-dateutil==2.8.2 \
+ --hash=sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 \
+ --hash=sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9
# via -r requirements.in
six==1.16.0 \
--hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/time-machine-2.4.0/requirements/py36.txt new/time-machine-2.4.1/requirements/py36.txt
--- old/time-machine-2.4.0/requirements/py36.txt 2021-09-01 10:18:32.000000000 +0200
+++ new/time-machine-2.4.1/requirements/py36.txt 2021-11-27 15:24:20.000000000 +0100
@@ -8,63 +8,58 @@
--hash=sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1 \
--hash=sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb
# via pytest
-coverage==5.5 \
- --hash=sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c \
- --hash=sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6 \
- --hash=sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45 \
- --hash=sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a \
- --hash=sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03 \
- --hash=sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529 \
- --hash=sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a \
- --hash=sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a \
- --hash=sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2 \
- --hash=sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6 \
- --hash=sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759 \
- --hash=sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53 \
- --hash=sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a \
- --hash=sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4 \
- --hash=sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff \
- --hash=sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502 \
- --hash=sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793 \
- --hash=sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb \
- --hash=sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905 \
- --hash=sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821 \
- --hash=sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b \
- --hash=sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81 \
- --hash=sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0 \
- --hash=sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b \
- --hash=sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3 \
- --hash=sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184 \
- --hash=sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701 \
- --hash=sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a \
- --hash=sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82 \
- --hash=sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638 \
- --hash=sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5 \
- --hash=sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083 \
- --hash=sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6 \
- --hash=sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90 \
- --hash=sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465 \
- --hash=sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a \
- --hash=sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3 \
- --hash=sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e \
- --hash=sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066 \
- --hash=sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf \
- --hash=sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b \
- --hash=sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae \
- --hash=sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669 \
- --hash=sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873 \
- --hash=sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b \
- --hash=sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6 \
- --hash=sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb \
- --hash=sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160 \
- --hash=sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c \
- --hash=sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079 \
- --hash=sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d \
- --hash=sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6
+coverage==6.1.2 \
+ --hash=sha256:046647b96969fda1ae0605f61288635209dd69dcd27ba3ec0bf5148bc157f954 \
+ --hash=sha256:06d009e8a29483cbc0520665bc46035ffe9ae0e7484a49f9782c2a716e37d0a0 \
+ --hash=sha256:0cde7d9fe2fb55ff68ebe7fb319ef188e9b88e0a3d1c9c5db7dd829cd93d2193 \
+ --hash=sha256:1de9c6f5039ee2b1860b7bad2c7bc3651fbeb9368e4c4d93e98a76358cdcb052 \
+ --hash=sha256:24ed38ec86754c4d5a706fbd5b52b057c3df87901a8610d7e5642a08ec07087e \
+ --hash=sha256:27a3df08a855522dfef8b8635f58bab81341b2fb5f447819bc252da3aa4cf44c \
+ --hash=sha256:310c40bed6b626fd1f463e5a83dba19a61c4eb74e1ac0d07d454ebbdf9047e9d \
+ --hash=sha256:3348865798c077c695cae00da0924136bb5cc501f236cfd6b6d9f7a3c94e0ec4 \
+ --hash=sha256:35b246ae3a2c042dc8f410c94bcb9754b18179cdb81ff9477a9089dbc9ecc186 \
+ --hash=sha256:3f546f48d5d80a90a266769aa613bc0719cb3e9c2ef3529d53f463996dd15a9d \
+ --hash=sha256:586d38dfc7da4a87f5816b203ff06dd7c1bb5b16211ccaa0e9788a8da2b93696 \
+ --hash=sha256:5d3855d5d26292539861f5ced2ed042fc2aa33a12f80e487053aed3bcb6ced13 \
+ --hash=sha256:610c0ba11da8de3a753dc4b1f71894f9f9debfdde6559599f303286e70aeb0c2 \
+ --hash=sha256:62646d98cf0381ffda301a816d6ac6c35fc97aa81b09c4c52d66a15c4bef9d7c \
+ --hash=sha256:66af99c7f7b64d050d37e795baadf515b4561124f25aae6e1baa482438ecc388 \
+ --hash=sha256:675adb3b3380967806b3cbb9c5b00ceb29b1c472692100a338730c1d3e59c8b9 \
+ --hash=sha256:6e5a8c947a2a89c56655ecbb789458a3a8e3b0cbf4c04250331df8f647b3de59 \
+ --hash=sha256:7a39590d1e6acf6a3c435c5d233f72f5d43b585f5be834cff1f21fec4afda225 \
+ --hash=sha256:80cb70264e9a1d04b519cdba3cd0dc42847bf8e982a4d55c769b9b0ee7cdce1e \
+ --hash=sha256:82fdcb64bf08aa5db881db061d96db102c77397a570fbc112e21c48a4d9cb31b \
+ --hash=sha256:8492d37acdc07a6eac6489f6c1954026f2260a85a4c2bb1e343fe3d35f5ee21a \
+ --hash=sha256:94f558f8555e79c48c422045f252ef41eb43becdd945e9c775b45ebfc0cbd78f \
+ --hash=sha256:958ac66272ff20e63d818627216e3d7412fdf68a2d25787b89a5c6f1eb7fdd93 \
+ --hash=sha256:95a58336aa111af54baa451c33266a8774780242cab3704b7698d5e514840758 \
+ --hash=sha256:96129e41405887a53a9cc564f960d7f853cc63d178f3a182fdd302e4cab2745b \
+ --hash=sha256:97ef6e9119bd39d60ef7b9cd5deea2b34869c9f0b9777450a7e3759c1ab09b9b \
+ --hash=sha256:98d44a8136eebbf544ad91fef5bd2b20ef0c9b459c65a833c923d9aa4546b204 \
+ --hash=sha256:9d2c2e3ce7b8cc932a2f918186964bd44de8c84e2f9ef72dc616f5bb8be22e71 \
+ --hash=sha256:a300b39c3d5905686c75a369d2a66e68fd01472ea42e16b38c948bd02b29e5bd \
+ --hash=sha256:a34fccb45f7b2d890183a263578d60a392a1a218fdc12f5bce1477a6a68d4373 \
+ --hash=sha256:a4d48e42e17d3de212f9af44f81ab73b9378a4b2b8413fd708d0d9023f2bbde4 \
+ --hash=sha256:af45eea024c0e3a25462fade161afab4f0d9d9e0d5a5d53e86149f74f0a35ecc \
+ --hash=sha256:ba6125d4e55c0b8e913dad27b22722eac7abdcb1f3eab1bd090eee9105660266 \
+ --hash=sha256:bc1ee1318f703bc6c971da700d74466e9b86e0c443eb85983fb2a1bd20447263 \
+ --hash=sha256:c18725f3cffe96732ef96f3de1939d81215fd6d7d64900dcc4acfe514ea4fcbf \
+ --hash=sha256:c8e9c4bcaaaa932be581b3d8b88b677489975f845f7714efc8cce77568b6711c \
+ --hash=sha256:cc799916b618ec9fd00135e576424165691fec4f70d7dc12cfaef09268a2478c \
+ --hash=sha256:cd2d11a59afa5001ff28073ceca24ae4c506da4355aba30d1e7dd2bd0d2206dc \
+ --hash=sha256:d0a595a781f8e186580ff8e3352dd4953b1944289bec7705377c80c7e36c4d6c \
+ --hash=sha256:d3c5f49ce6af61154060640ad3b3281dbc46e2e0ef2fe78414d7f8a324f0b649 \
+ --hash=sha256:d9a635114b88c0ab462e0355472d00a180a5fbfd8511e7f18e4ac32652e7d972 \
+ --hash=sha256:e5432d9c329b11c27be45ee5f62cf20a33065d482c8dec1941d6670622a6fb8f \
+ --hash=sha256:eab14fdd410500dae50fd14ccc332e65543e7b39f6fc076fe90603a0e5d2f929 \
+ --hash=sha256:ebcc03e1acef4ff44f37f3c61df478d6e469a573aa688e5a162f85d7e4c3860d \
+ --hash=sha256:fae3fe111670e51f1ebbc475823899524e3459ea2db2cb88279bbfb2a0b8a3de \
+ --hash=sha256:fd92ece726055e80d4e3f01fff3b91f54b18c9c357c48fcf6119e87e2461a091 \
+ --hash=sha256:ffa545230ca2ad921ad066bf8fd627e7be43716b6e0fcf8e32af1b8188ccb0ab
# via -r requirements.in
-importlib-metadata==4.7.1 \
- --hash=sha256:9e04bf59076a15a9b6dd9c27806e8fcdf15280ba529c6a8cc3f4d5b4875bdd61 \
- --hash=sha256:c4eb3dec5f697682e383a39701a7de11cd5c02daf8dd93534b69e3e6473f6b1b
+importlib-metadata==4.8.2 \
+ --hash=sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100 \
+ --hash=sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb
# via
# pluggy
# pytest
@@ -73,31 +68,31 @@
--hash=sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3 \
--hash=sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32
# via pytest
-packaging==21.0 \
- --hash=sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7 \
- --hash=sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14
- # via pytest
-pluggy==0.13.1 \
- --hash=sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0 \
- --hash=sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d
- # via pytest
-py==1.10.0 \
- --hash=sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3 \
- --hash=sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a
- # via pytest
-pyparsing==2.4.7 \
- --hash=sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1 \
- --hash=sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b
+packaging==21.3 \
+ --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb \
+ --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522
+ # via pytest
+pluggy==1.0.0 \
+ --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \
+ --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3
+ # via pytest
+py==1.11.0 \
+ --hash=sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719 \
+ --hash=sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378
+ # via pytest
+pyparsing==3.0.6 \
+ --hash=sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4 \
+ --hash=sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81
# via packaging
-pytest==6.2.4 \
- --hash=sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b \
- --hash=sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890
+pytest==6.2.5 \
+ --hash=sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89 \
+ --hash=sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134
# via
# -r requirements.in
# pytest-randomly
-pytest-randomly==3.10.1 \
- --hash=sha256:d28d490e3a743bdd64c5bc87c5fc182eac966ba6432c6bb6b224e32e76527e9e \
- --hash=sha256:d4ef5dbf27e542e6a4e4cec7a20ef3f1b906bce21fa340ca5657b5326ef23a64
+pytest-randomly==3.10.2 \
+ --hash=sha256:2c0a332c4b124e372e2473803bcc91ec87797664f4955afef2b844c0021662b1 \
+ --hash=sha256:cbd5c50b7c41491c202c71a3df33a75619d610a4f5c34aa2bd02ac30fce7cd43
# via -r requirements.in
python-dateutil==2.8.2 \
--hash=sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 \
@@ -111,12 +106,11 @@
--hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \
--hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f
# via pytest
-typing-extensions==3.10.0.0 \
- --hash=sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497 \
- --hash=sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342 \
- --hash=sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84
+typing-extensions==4.0.0 \
+ --hash=sha256:2cdf80e4e04866a9b3689a51869016d36db0814d84b8d8a568d22781d45d27ed \
+ --hash=sha256:829704698b22e13ec9eaf959122315eabb370b0884400e9818334d8b677023d9
# via importlib-metadata
-zipp==3.5.0 \
- --hash=sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3 \
- --hash=sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4
+zipp==3.6.0 \
+ --hash=sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832 \
+ --hash=sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc
# via importlib-metadata
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/time-machine-2.4.0/requirements/py37.txt new/time-machine-2.4.1/requirements/py37.txt
--- old/time-machine-2.4.0/requirements/py37.txt 2021-09-01 10:18:32.000000000 +0200
+++ new/time-machine-2.4.1/requirements/py37.txt 2021-11-27 15:24:20.000000000 +0100
@@ -8,63 +8,58 @@
--hash=sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1 \
--hash=sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb
# via pytest
-coverage==5.5 \
- --hash=sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c \
- --hash=sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6 \
- --hash=sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45 \
- --hash=sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a \
- --hash=sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03 \
- --hash=sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529 \
- --hash=sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a \
- --hash=sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a \
- --hash=sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2 \
- --hash=sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6 \
- --hash=sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759 \
- --hash=sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53 \
- --hash=sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a \
- --hash=sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4 \
- --hash=sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff \
- --hash=sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502 \
- --hash=sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793 \
- --hash=sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb \
- --hash=sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905 \
- --hash=sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821 \
- --hash=sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b \
- --hash=sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81 \
- --hash=sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0 \
- --hash=sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b \
- --hash=sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3 \
- --hash=sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184 \
- --hash=sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701 \
- --hash=sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a \
- --hash=sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82 \
- --hash=sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638 \
- --hash=sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5 \
- --hash=sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083 \
- --hash=sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6 \
- --hash=sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90 \
- --hash=sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465 \
- --hash=sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a \
- --hash=sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3 \
- --hash=sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e \
- --hash=sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066 \
- --hash=sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf \
- --hash=sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b \
- --hash=sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae \
- --hash=sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669 \
- --hash=sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873 \
- --hash=sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b \
- --hash=sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6 \
- --hash=sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb \
- --hash=sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160 \
- --hash=sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c \
- --hash=sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079 \
- --hash=sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d \
- --hash=sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6
+coverage==6.1.2 \
+ --hash=sha256:046647b96969fda1ae0605f61288635209dd69dcd27ba3ec0bf5148bc157f954 \
+ --hash=sha256:06d009e8a29483cbc0520665bc46035ffe9ae0e7484a49f9782c2a716e37d0a0 \
+ --hash=sha256:0cde7d9fe2fb55ff68ebe7fb319ef188e9b88e0a3d1c9c5db7dd829cd93d2193 \
+ --hash=sha256:1de9c6f5039ee2b1860b7bad2c7bc3651fbeb9368e4c4d93e98a76358cdcb052 \
+ --hash=sha256:24ed38ec86754c4d5a706fbd5b52b057c3df87901a8610d7e5642a08ec07087e \
+ --hash=sha256:27a3df08a855522dfef8b8635f58bab81341b2fb5f447819bc252da3aa4cf44c \
+ --hash=sha256:310c40bed6b626fd1f463e5a83dba19a61c4eb74e1ac0d07d454ebbdf9047e9d \
+ --hash=sha256:3348865798c077c695cae00da0924136bb5cc501f236cfd6b6d9f7a3c94e0ec4 \
+ --hash=sha256:35b246ae3a2c042dc8f410c94bcb9754b18179cdb81ff9477a9089dbc9ecc186 \
+ --hash=sha256:3f546f48d5d80a90a266769aa613bc0719cb3e9c2ef3529d53f463996dd15a9d \
+ --hash=sha256:586d38dfc7da4a87f5816b203ff06dd7c1bb5b16211ccaa0e9788a8da2b93696 \
+ --hash=sha256:5d3855d5d26292539861f5ced2ed042fc2aa33a12f80e487053aed3bcb6ced13 \
+ --hash=sha256:610c0ba11da8de3a753dc4b1f71894f9f9debfdde6559599f303286e70aeb0c2 \
+ --hash=sha256:62646d98cf0381ffda301a816d6ac6c35fc97aa81b09c4c52d66a15c4bef9d7c \
+ --hash=sha256:66af99c7f7b64d050d37e795baadf515b4561124f25aae6e1baa482438ecc388 \
+ --hash=sha256:675adb3b3380967806b3cbb9c5b00ceb29b1c472692100a338730c1d3e59c8b9 \
+ --hash=sha256:6e5a8c947a2a89c56655ecbb789458a3a8e3b0cbf4c04250331df8f647b3de59 \
+ --hash=sha256:7a39590d1e6acf6a3c435c5d233f72f5d43b585f5be834cff1f21fec4afda225 \
+ --hash=sha256:80cb70264e9a1d04b519cdba3cd0dc42847bf8e982a4d55c769b9b0ee7cdce1e \
+ --hash=sha256:82fdcb64bf08aa5db881db061d96db102c77397a570fbc112e21c48a4d9cb31b \
+ --hash=sha256:8492d37acdc07a6eac6489f6c1954026f2260a85a4c2bb1e343fe3d35f5ee21a \
+ --hash=sha256:94f558f8555e79c48c422045f252ef41eb43becdd945e9c775b45ebfc0cbd78f \
+ --hash=sha256:958ac66272ff20e63d818627216e3d7412fdf68a2d25787b89a5c6f1eb7fdd93 \
+ --hash=sha256:95a58336aa111af54baa451c33266a8774780242cab3704b7698d5e514840758 \
+ --hash=sha256:96129e41405887a53a9cc564f960d7f853cc63d178f3a182fdd302e4cab2745b \
+ --hash=sha256:97ef6e9119bd39d60ef7b9cd5deea2b34869c9f0b9777450a7e3759c1ab09b9b \
+ --hash=sha256:98d44a8136eebbf544ad91fef5bd2b20ef0c9b459c65a833c923d9aa4546b204 \
+ --hash=sha256:9d2c2e3ce7b8cc932a2f918186964bd44de8c84e2f9ef72dc616f5bb8be22e71 \
+ --hash=sha256:a300b39c3d5905686c75a369d2a66e68fd01472ea42e16b38c948bd02b29e5bd \
+ --hash=sha256:a34fccb45f7b2d890183a263578d60a392a1a218fdc12f5bce1477a6a68d4373 \
+ --hash=sha256:a4d48e42e17d3de212f9af44f81ab73b9378a4b2b8413fd708d0d9023f2bbde4 \
+ --hash=sha256:af45eea024c0e3a25462fade161afab4f0d9d9e0d5a5d53e86149f74f0a35ecc \
+ --hash=sha256:ba6125d4e55c0b8e913dad27b22722eac7abdcb1f3eab1bd090eee9105660266 \
+ --hash=sha256:bc1ee1318f703bc6c971da700d74466e9b86e0c443eb85983fb2a1bd20447263 \
+ --hash=sha256:c18725f3cffe96732ef96f3de1939d81215fd6d7d64900dcc4acfe514ea4fcbf \
+ --hash=sha256:c8e9c4bcaaaa932be581b3d8b88b677489975f845f7714efc8cce77568b6711c \
+ --hash=sha256:cc799916b618ec9fd00135e576424165691fec4f70d7dc12cfaef09268a2478c \
+ --hash=sha256:cd2d11a59afa5001ff28073ceca24ae4c506da4355aba30d1e7dd2bd0d2206dc \
+ --hash=sha256:d0a595a781f8e186580ff8e3352dd4953b1944289bec7705377c80c7e36c4d6c \
+ --hash=sha256:d3c5f49ce6af61154060640ad3b3281dbc46e2e0ef2fe78414d7f8a324f0b649 \
+ --hash=sha256:d9a635114b88c0ab462e0355472d00a180a5fbfd8511e7f18e4ac32652e7d972 \
+ --hash=sha256:e5432d9c329b11c27be45ee5f62cf20a33065d482c8dec1941d6670622a6fb8f \
+ --hash=sha256:eab14fdd410500dae50fd14ccc332e65543e7b39f6fc076fe90603a0e5d2f929 \
+ --hash=sha256:ebcc03e1acef4ff44f37f3c61df478d6e469a573aa688e5a162f85d7e4c3860d \
+ --hash=sha256:fae3fe111670e51f1ebbc475823899524e3459ea2db2cb88279bbfb2a0b8a3de \
+ --hash=sha256:fd92ece726055e80d4e3f01fff3b91f54b18c9c357c48fcf6119e87e2461a091 \
+ --hash=sha256:ffa545230ca2ad921ad066bf8fd627e7be43716b6e0fcf8e32af1b8188ccb0ab
# via -r requirements.in
-importlib-metadata==4.7.1 \
- --hash=sha256:9e04bf59076a15a9b6dd9c27806e8fcdf15280ba529c6a8cc3f4d5b4875bdd61 \
- --hash=sha256:c4eb3dec5f697682e383a39701a7de11cd5c02daf8dd93534b69e3e6473f6b1b
+importlib-metadata==4.8.2 \
+ --hash=sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100 \
+ --hash=sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb
# via
# pluggy
# pytest
@@ -73,31 +68,31 @@
--hash=sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3 \
--hash=sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32
# via pytest
-packaging==21.0 \
- --hash=sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7 \
- --hash=sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14
- # via pytest
-pluggy==0.13.1 \
- --hash=sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0 \
- --hash=sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d
- # via pytest
-py==1.10.0 \
- --hash=sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3 \
- --hash=sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a
- # via pytest
-pyparsing==2.4.7 \
- --hash=sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1 \
- --hash=sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b
+packaging==21.3 \
+ --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb \
+ --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522
+ # via pytest
+pluggy==1.0.0 \
+ --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \
+ --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3
+ # via pytest
+py==1.11.0 \
+ --hash=sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719 \
+ --hash=sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378
+ # via pytest
+pyparsing==3.0.6 \
+ --hash=sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4 \
+ --hash=sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81
# via packaging
-pytest==6.2.4 \
- --hash=sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b \
- --hash=sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890
+pytest==6.2.5 \
+ --hash=sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89 \
+ --hash=sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134
# via
# -r requirements.in
# pytest-randomly
-pytest-randomly==3.10.1 \
- --hash=sha256:d28d490e3a743bdd64c5bc87c5fc182eac966ba6432c6bb6b224e32e76527e9e \
- --hash=sha256:d4ef5dbf27e542e6a4e4cec7a20ef3f1b906bce21fa340ca5657b5326ef23a64
+pytest-randomly==3.10.2 \
+ --hash=sha256:2c0a332c4b124e372e2473803bcc91ec87797664f4955afef2b844c0021662b1 \
+ --hash=sha256:cbd5c50b7c41491c202c71a3df33a75619d610a4f5c34aa2bd02ac30fce7cd43
# via -r requirements.in
python-dateutil==2.8.2 \
--hash=sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 \
@@ -111,12 +106,11 @@
--hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \
--hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f
# via pytest
-typing-extensions==3.10.0.0 \
- --hash=sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497 \
- --hash=sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342 \
- --hash=sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84
+typing-extensions==4.0.0 \
+ --hash=sha256:2cdf80e4e04866a9b3689a51869016d36db0814d84b8d8a568d22781d45d27ed \
+ --hash=sha256:829704698b22e13ec9eaf959122315eabb370b0884400e9818334d8b677023d9
# via importlib-metadata
-zipp==3.5.0 \
- --hash=sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3 \
- --hash=sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4
+zipp==3.6.0 \
+ --hash=sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832 \
+ --hash=sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc
# via importlib-metadata
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/time-machine-2.4.0/requirements/py38.txt new/time-machine-2.4.1/requirements/py38.txt
--- old/time-machine-2.4.0/requirements/py38.txt 2021-09-01 10:18:32.000000000 +0200
+++ new/time-machine-2.4.1/requirements/py38.txt 2021-11-27 15:24:20.000000000 +0100
@@ -8,93 +8,88 @@
--hash=sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1 \
--hash=sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb
# via pytest
-coverage==5.5 \
- --hash=sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c \
- --hash=sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6 \
- --hash=sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45 \
- --hash=sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a \
- --hash=sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03 \
- --hash=sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529 \
- --hash=sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a \
- --hash=sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a \
- --hash=sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2 \
- --hash=sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6 \
- --hash=sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759 \
- --hash=sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53 \
- --hash=sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a \
- --hash=sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4 \
- --hash=sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff \
- --hash=sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502 \
- --hash=sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793 \
- --hash=sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb \
- --hash=sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905 \
- --hash=sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821 \
- --hash=sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b \
- --hash=sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81 \
- --hash=sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0 \
- --hash=sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b \
- --hash=sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3 \
- --hash=sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184 \
- --hash=sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701 \
- --hash=sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a \
- --hash=sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82 \
- --hash=sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638 \
- --hash=sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5 \
- --hash=sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083 \
- --hash=sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6 \
- --hash=sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90 \
- --hash=sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465 \
- --hash=sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a \
- --hash=sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3 \
- --hash=sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e \
- --hash=sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066 \
- --hash=sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf \
- --hash=sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b \
- --hash=sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae \
- --hash=sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669 \
- --hash=sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873 \
- --hash=sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b \
- --hash=sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6 \
- --hash=sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb \
- --hash=sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160 \
- --hash=sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c \
- --hash=sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079 \
- --hash=sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d \
- --hash=sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6
+coverage==6.1.2 \
+ --hash=sha256:046647b96969fda1ae0605f61288635209dd69dcd27ba3ec0bf5148bc157f954 \
+ --hash=sha256:06d009e8a29483cbc0520665bc46035ffe9ae0e7484a49f9782c2a716e37d0a0 \
+ --hash=sha256:0cde7d9fe2fb55ff68ebe7fb319ef188e9b88e0a3d1c9c5db7dd829cd93d2193 \
+ --hash=sha256:1de9c6f5039ee2b1860b7bad2c7bc3651fbeb9368e4c4d93e98a76358cdcb052 \
+ --hash=sha256:24ed38ec86754c4d5a706fbd5b52b057c3df87901a8610d7e5642a08ec07087e \
+ --hash=sha256:27a3df08a855522dfef8b8635f58bab81341b2fb5f447819bc252da3aa4cf44c \
+ --hash=sha256:310c40bed6b626fd1f463e5a83dba19a61c4eb74e1ac0d07d454ebbdf9047e9d \
+ --hash=sha256:3348865798c077c695cae00da0924136bb5cc501f236cfd6b6d9f7a3c94e0ec4 \
+ --hash=sha256:35b246ae3a2c042dc8f410c94bcb9754b18179cdb81ff9477a9089dbc9ecc186 \
+ --hash=sha256:3f546f48d5d80a90a266769aa613bc0719cb3e9c2ef3529d53f463996dd15a9d \
+ --hash=sha256:586d38dfc7da4a87f5816b203ff06dd7c1bb5b16211ccaa0e9788a8da2b93696 \
+ --hash=sha256:5d3855d5d26292539861f5ced2ed042fc2aa33a12f80e487053aed3bcb6ced13 \
+ --hash=sha256:610c0ba11da8de3a753dc4b1f71894f9f9debfdde6559599f303286e70aeb0c2 \
+ --hash=sha256:62646d98cf0381ffda301a816d6ac6c35fc97aa81b09c4c52d66a15c4bef9d7c \
+ --hash=sha256:66af99c7f7b64d050d37e795baadf515b4561124f25aae6e1baa482438ecc388 \
+ --hash=sha256:675adb3b3380967806b3cbb9c5b00ceb29b1c472692100a338730c1d3e59c8b9 \
+ --hash=sha256:6e5a8c947a2a89c56655ecbb789458a3a8e3b0cbf4c04250331df8f647b3de59 \
+ --hash=sha256:7a39590d1e6acf6a3c435c5d233f72f5d43b585f5be834cff1f21fec4afda225 \
+ --hash=sha256:80cb70264e9a1d04b519cdba3cd0dc42847bf8e982a4d55c769b9b0ee7cdce1e \
+ --hash=sha256:82fdcb64bf08aa5db881db061d96db102c77397a570fbc112e21c48a4d9cb31b \
+ --hash=sha256:8492d37acdc07a6eac6489f6c1954026f2260a85a4c2bb1e343fe3d35f5ee21a \
+ --hash=sha256:94f558f8555e79c48c422045f252ef41eb43becdd945e9c775b45ebfc0cbd78f \
+ --hash=sha256:958ac66272ff20e63d818627216e3d7412fdf68a2d25787b89a5c6f1eb7fdd93 \
+ --hash=sha256:95a58336aa111af54baa451c33266a8774780242cab3704b7698d5e514840758 \
+ --hash=sha256:96129e41405887a53a9cc564f960d7f853cc63d178f3a182fdd302e4cab2745b \
+ --hash=sha256:97ef6e9119bd39d60ef7b9cd5deea2b34869c9f0b9777450a7e3759c1ab09b9b \
+ --hash=sha256:98d44a8136eebbf544ad91fef5bd2b20ef0c9b459c65a833c923d9aa4546b204 \
+ --hash=sha256:9d2c2e3ce7b8cc932a2f918186964bd44de8c84e2f9ef72dc616f5bb8be22e71 \
+ --hash=sha256:a300b39c3d5905686c75a369d2a66e68fd01472ea42e16b38c948bd02b29e5bd \
+ --hash=sha256:a34fccb45f7b2d890183a263578d60a392a1a218fdc12f5bce1477a6a68d4373 \
+ --hash=sha256:a4d48e42e17d3de212f9af44f81ab73b9378a4b2b8413fd708d0d9023f2bbde4 \
+ --hash=sha256:af45eea024c0e3a25462fade161afab4f0d9d9e0d5a5d53e86149f74f0a35ecc \
+ --hash=sha256:ba6125d4e55c0b8e913dad27b22722eac7abdcb1f3eab1bd090eee9105660266 \
+ --hash=sha256:bc1ee1318f703bc6c971da700d74466e9b86e0c443eb85983fb2a1bd20447263 \
+ --hash=sha256:c18725f3cffe96732ef96f3de1939d81215fd6d7d64900dcc4acfe514ea4fcbf \
+ --hash=sha256:c8e9c4bcaaaa932be581b3d8b88b677489975f845f7714efc8cce77568b6711c \
+ --hash=sha256:cc799916b618ec9fd00135e576424165691fec4f70d7dc12cfaef09268a2478c \
+ --hash=sha256:cd2d11a59afa5001ff28073ceca24ae4c506da4355aba30d1e7dd2bd0d2206dc \
+ --hash=sha256:d0a595a781f8e186580ff8e3352dd4953b1944289bec7705377c80c7e36c4d6c \
+ --hash=sha256:d3c5f49ce6af61154060640ad3b3281dbc46e2e0ef2fe78414d7f8a324f0b649 \
+ --hash=sha256:d9a635114b88c0ab462e0355472d00a180a5fbfd8511e7f18e4ac32652e7d972 \
+ --hash=sha256:e5432d9c329b11c27be45ee5f62cf20a33065d482c8dec1941d6670622a6fb8f \
+ --hash=sha256:eab14fdd410500dae50fd14ccc332e65543e7b39f6fc076fe90603a0e5d2f929 \
+ --hash=sha256:ebcc03e1acef4ff44f37f3c61df478d6e469a573aa688e5a162f85d7e4c3860d \
+ --hash=sha256:fae3fe111670e51f1ebbc475823899524e3459ea2db2cb88279bbfb2a0b8a3de \
+ --hash=sha256:fd92ece726055e80d4e3f01fff3b91f54b18c9c357c48fcf6119e87e2461a091 \
+ --hash=sha256:ffa545230ca2ad921ad066bf8fd627e7be43716b6e0fcf8e32af1b8188ccb0ab
# via -r requirements.in
-importlib-metadata==4.7.1 \
- --hash=sha256:9e04bf59076a15a9b6dd9c27806e8fcdf15280ba529c6a8cc3f4d5b4875bdd61 \
- --hash=sha256:c4eb3dec5f697682e383a39701a7de11cd5c02daf8dd93534b69e3e6473f6b1b
+importlib-metadata==4.8.2 \
+ --hash=sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100 \
+ --hash=sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb
# via pytest-randomly
iniconfig==1.1.1 \
--hash=sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3 \
--hash=sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32
# via pytest
-packaging==21.0 \
- --hash=sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7 \
- --hash=sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14
- # via pytest
-pluggy==0.13.1 \
- --hash=sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0 \
- --hash=sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d
- # via pytest
-py==1.10.0 \
- --hash=sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3 \
- --hash=sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a
- # via pytest
-pyparsing==2.4.7 \
- --hash=sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1 \
- --hash=sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b
+packaging==21.3 \
+ --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb \
+ --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522
+ # via pytest
+pluggy==1.0.0 \
+ --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \
+ --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3
+ # via pytest
+py==1.11.0 \
+ --hash=sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719 \
+ --hash=sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378
+ # via pytest
+pyparsing==3.0.6 \
+ --hash=sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4 \
+ --hash=sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81
# via packaging
-pytest==6.2.4 \
- --hash=sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b \
- --hash=sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890
+pytest==6.2.5 \
+ --hash=sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89 \
+ --hash=sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134
# via
# -r requirements.in
# pytest-randomly
-pytest-randomly==3.10.1 \
- --hash=sha256:d28d490e3a743bdd64c5bc87c5fc182eac966ba6432c6bb6b224e32e76527e9e \
- --hash=sha256:d4ef5dbf27e542e6a4e4cec7a20ef3f1b906bce21fa340ca5657b5326ef23a64
+pytest-randomly==3.10.2 \
+ --hash=sha256:2c0a332c4b124e372e2473803bcc91ec87797664f4955afef2b844c0021662b1 \
+ --hash=sha256:cbd5c50b7c41491c202c71a3df33a75619d610a4f5c34aa2bd02ac30fce7cd43
# via -r requirements.in
python-dateutil==2.8.2 \
--hash=sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 \
@@ -108,7 +103,7 @@
--hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \
--hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f
# via pytest
-zipp==3.5.0 \
- --hash=sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3 \
- --hash=sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4
+zipp==3.6.0 \
+ --hash=sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832 \
+ --hash=sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc
# via importlib-metadata
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/time-machine-2.4.0/requirements/py39.txt new/time-machine-2.4.1/requirements/py39.txt
--- old/time-machine-2.4.0/requirements/py39.txt 2021-09-01 10:18:32.000000000 +0200
+++ new/time-machine-2.4.1/requirements/py39.txt 2021-11-27 15:24:20.000000000 +0100
@@ -8,93 +8,88 @@
--hash=sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1 \
--hash=sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb
# via pytest
-coverage==5.5 \
- --hash=sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c \
- --hash=sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6 \
- --hash=sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45 \
- --hash=sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a \
- --hash=sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03 \
- --hash=sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529 \
- --hash=sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a \
- --hash=sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a \
- --hash=sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2 \
- --hash=sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6 \
- --hash=sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759 \
- --hash=sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53 \
- --hash=sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a \
- --hash=sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4 \
- --hash=sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff \
- --hash=sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502 \
- --hash=sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793 \
- --hash=sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb \
- --hash=sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905 \
- --hash=sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821 \
- --hash=sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b \
- --hash=sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81 \
- --hash=sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0 \
- --hash=sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b \
- --hash=sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3 \
- --hash=sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184 \
- --hash=sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701 \
- --hash=sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a \
- --hash=sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82 \
- --hash=sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638 \
- --hash=sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5 \
- --hash=sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083 \
- --hash=sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6 \
- --hash=sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90 \
- --hash=sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465 \
- --hash=sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a \
- --hash=sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3 \
- --hash=sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e \
- --hash=sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066 \
- --hash=sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf \
- --hash=sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b \
- --hash=sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae \
- --hash=sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669 \
- --hash=sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873 \
- --hash=sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b \
- --hash=sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6 \
- --hash=sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb \
- --hash=sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160 \
- --hash=sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c \
- --hash=sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079 \
- --hash=sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d \
- --hash=sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6
+coverage==6.1.2 \
+ --hash=sha256:046647b96969fda1ae0605f61288635209dd69dcd27ba3ec0bf5148bc157f954 \
+ --hash=sha256:06d009e8a29483cbc0520665bc46035ffe9ae0e7484a49f9782c2a716e37d0a0 \
+ --hash=sha256:0cde7d9fe2fb55ff68ebe7fb319ef188e9b88e0a3d1c9c5db7dd829cd93d2193 \
+ --hash=sha256:1de9c6f5039ee2b1860b7bad2c7bc3651fbeb9368e4c4d93e98a76358cdcb052 \
+ --hash=sha256:24ed38ec86754c4d5a706fbd5b52b057c3df87901a8610d7e5642a08ec07087e \
+ --hash=sha256:27a3df08a855522dfef8b8635f58bab81341b2fb5f447819bc252da3aa4cf44c \
+ --hash=sha256:310c40bed6b626fd1f463e5a83dba19a61c4eb74e1ac0d07d454ebbdf9047e9d \
+ --hash=sha256:3348865798c077c695cae00da0924136bb5cc501f236cfd6b6d9f7a3c94e0ec4 \
+ --hash=sha256:35b246ae3a2c042dc8f410c94bcb9754b18179cdb81ff9477a9089dbc9ecc186 \
+ --hash=sha256:3f546f48d5d80a90a266769aa613bc0719cb3e9c2ef3529d53f463996dd15a9d \
+ --hash=sha256:586d38dfc7da4a87f5816b203ff06dd7c1bb5b16211ccaa0e9788a8da2b93696 \
+ --hash=sha256:5d3855d5d26292539861f5ced2ed042fc2aa33a12f80e487053aed3bcb6ced13 \
+ --hash=sha256:610c0ba11da8de3a753dc4b1f71894f9f9debfdde6559599f303286e70aeb0c2 \
+ --hash=sha256:62646d98cf0381ffda301a816d6ac6c35fc97aa81b09c4c52d66a15c4bef9d7c \
+ --hash=sha256:66af99c7f7b64d050d37e795baadf515b4561124f25aae6e1baa482438ecc388 \
+ --hash=sha256:675adb3b3380967806b3cbb9c5b00ceb29b1c472692100a338730c1d3e59c8b9 \
+ --hash=sha256:6e5a8c947a2a89c56655ecbb789458a3a8e3b0cbf4c04250331df8f647b3de59 \
+ --hash=sha256:7a39590d1e6acf6a3c435c5d233f72f5d43b585f5be834cff1f21fec4afda225 \
+ --hash=sha256:80cb70264e9a1d04b519cdba3cd0dc42847bf8e982a4d55c769b9b0ee7cdce1e \
+ --hash=sha256:82fdcb64bf08aa5db881db061d96db102c77397a570fbc112e21c48a4d9cb31b \
+ --hash=sha256:8492d37acdc07a6eac6489f6c1954026f2260a85a4c2bb1e343fe3d35f5ee21a \
+ --hash=sha256:94f558f8555e79c48c422045f252ef41eb43becdd945e9c775b45ebfc0cbd78f \
+ --hash=sha256:958ac66272ff20e63d818627216e3d7412fdf68a2d25787b89a5c6f1eb7fdd93 \
+ --hash=sha256:95a58336aa111af54baa451c33266a8774780242cab3704b7698d5e514840758 \
+ --hash=sha256:96129e41405887a53a9cc564f960d7f853cc63d178f3a182fdd302e4cab2745b \
+ --hash=sha256:97ef6e9119bd39d60ef7b9cd5deea2b34869c9f0b9777450a7e3759c1ab09b9b \
+ --hash=sha256:98d44a8136eebbf544ad91fef5bd2b20ef0c9b459c65a833c923d9aa4546b204 \
+ --hash=sha256:9d2c2e3ce7b8cc932a2f918186964bd44de8c84e2f9ef72dc616f5bb8be22e71 \
+ --hash=sha256:a300b39c3d5905686c75a369d2a66e68fd01472ea42e16b38c948bd02b29e5bd \
+ --hash=sha256:a34fccb45f7b2d890183a263578d60a392a1a218fdc12f5bce1477a6a68d4373 \
+ --hash=sha256:a4d48e42e17d3de212f9af44f81ab73b9378a4b2b8413fd708d0d9023f2bbde4 \
+ --hash=sha256:af45eea024c0e3a25462fade161afab4f0d9d9e0d5a5d53e86149f74f0a35ecc \
+ --hash=sha256:ba6125d4e55c0b8e913dad27b22722eac7abdcb1f3eab1bd090eee9105660266 \
+ --hash=sha256:bc1ee1318f703bc6c971da700d74466e9b86e0c443eb85983fb2a1bd20447263 \
+ --hash=sha256:c18725f3cffe96732ef96f3de1939d81215fd6d7d64900dcc4acfe514ea4fcbf \
+ --hash=sha256:c8e9c4bcaaaa932be581b3d8b88b677489975f845f7714efc8cce77568b6711c \
+ --hash=sha256:cc799916b618ec9fd00135e576424165691fec4f70d7dc12cfaef09268a2478c \
+ --hash=sha256:cd2d11a59afa5001ff28073ceca24ae4c506da4355aba30d1e7dd2bd0d2206dc \
+ --hash=sha256:d0a595a781f8e186580ff8e3352dd4953b1944289bec7705377c80c7e36c4d6c \
+ --hash=sha256:d3c5f49ce6af61154060640ad3b3281dbc46e2e0ef2fe78414d7f8a324f0b649 \
+ --hash=sha256:d9a635114b88c0ab462e0355472d00a180a5fbfd8511e7f18e4ac32652e7d972 \
+ --hash=sha256:e5432d9c329b11c27be45ee5f62cf20a33065d482c8dec1941d6670622a6fb8f \
+ --hash=sha256:eab14fdd410500dae50fd14ccc332e65543e7b39f6fc076fe90603a0e5d2f929 \
+ --hash=sha256:ebcc03e1acef4ff44f37f3c61df478d6e469a573aa688e5a162f85d7e4c3860d \
+ --hash=sha256:fae3fe111670e51f1ebbc475823899524e3459ea2db2cb88279bbfb2a0b8a3de \
+ --hash=sha256:fd92ece726055e80d4e3f01fff3b91f54b18c9c357c48fcf6119e87e2461a091 \
+ --hash=sha256:ffa545230ca2ad921ad066bf8fd627e7be43716b6e0fcf8e32af1b8188ccb0ab
# via -r requirements.in
-importlib-metadata==4.7.1 \
- --hash=sha256:9e04bf59076a15a9b6dd9c27806e8fcdf15280ba529c6a8cc3f4d5b4875bdd61 \
- --hash=sha256:c4eb3dec5f697682e383a39701a7de11cd5c02daf8dd93534b69e3e6473f6b1b
+importlib-metadata==4.8.2 \
+ --hash=sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100 \
+ --hash=sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb
# via pytest-randomly
iniconfig==1.1.1 \
--hash=sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3 \
--hash=sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32
# via pytest
-packaging==21.0 \
- --hash=sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7 \
- --hash=sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14
- # via pytest
-pluggy==0.13.1 \
- --hash=sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0 \
- --hash=sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d
- # via pytest
-py==1.10.0 \
- --hash=sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3 \
- --hash=sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a
- # via pytest
-pyparsing==2.4.7 \
- --hash=sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1 \
- --hash=sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b
+packaging==21.3 \
+ --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb \
+ --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522
+ # via pytest
+pluggy==1.0.0 \
+ --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \
+ --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3
+ # via pytest
+py==1.11.0 \
+ --hash=sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719 \
+ --hash=sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378
+ # via pytest
+pyparsing==3.0.6 \
+ --hash=sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4 \
+ --hash=sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81
# via packaging
-pytest==6.2.4 \
- --hash=sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b \
- --hash=sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890
+pytest==6.2.5 \
+ --hash=sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89 \
+ --hash=sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134
# via
# -r requirements.in
# pytest-randomly
-pytest-randomly==3.10.1 \
- --hash=sha256:d28d490e3a743bdd64c5bc87c5fc182eac966ba6432c6bb6b224e32e76527e9e \
- --hash=sha256:d4ef5dbf27e542e6a4e4cec7a20ef3f1b906bce21fa340ca5657b5326ef23a64
+pytest-randomly==3.10.2 \
+ --hash=sha256:2c0a332c4b124e372e2473803bcc91ec87797664f4955afef2b844c0021662b1 \
+ --hash=sha256:cbd5c50b7c41491c202c71a3df33a75619d610a4f5c34aa2bd02ac30fce7cd43
# via -r requirements.in
python-dateutil==2.8.2 \
--hash=sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 \
@@ -108,7 +103,7 @@
--hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \
--hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f
# via pytest
-zipp==3.5.0 \
- --hash=sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3 \
- --hash=sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4
+zipp==3.6.0 \
+ --hash=sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832 \
+ --hash=sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc
# via importlib-metadata
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/time-machine-2.4.0/setup.cfg new/time-machine-2.4.1/setup.cfg
--- old/time-machine-2.4.0/setup.cfg 2021-09-01 10:18:32.000000000 +0200
+++ new/time-machine-2.4.1/setup.cfg 2021-11-27 15:24:20.000000000 +0100
@@ -1,6 +1,6 @@
[metadata]
name = time-machine
-version = 2.4.0
+version = 2.4.1
description = Travel through time in your tests.
long_description = file: README.rst
long_description_content_type = text/x-rst
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/time-machine-2.4.0/tests/conftest.py new/time-machine-2.4.1/tests/conftest.py
--- old/time-machine-2.4.0/tests/conftest.py 1970-01-01 01:00:00.000000000 +0100
+++ new/time-machine-2.4.1/tests/conftest.py 2021-11-27 15:24:20.000000000 +0100
@@ -0,0 +1,6 @@
+import os
+import time
+
+# Isolate tests from the host machine���s timezone
+os.environ["TZ"] = "UTC"
+time.tzset()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/time-machine-2.4.0/tests/test_time_machine.py new/time-machine-2.4.1/tests/test_time_machine.py
--- old/time-machine-2.4.0/tests/test_time_machine.py 2021-09-01 10:18:32.000000000 +0200
+++ new/time-machine-2.4.1/tests/test_time_machine.py 2021-11-27 15:24:20.000000000 +0100
@@ -1,5 +1,6 @@
import asyncio
import datetime as dt
+import os
import sys
import time
import uuid
@@ -386,6 +387,26 @@
@pytest.mark.skipif(not HAVE_ZONEINFO, reason="Requires ZoneInfo")
+def test_destination_datetime_tzinfo_zoneinfo_no_orig_tz():
+ orig_tz = os.environ["TZ"]
+ del os.environ["TZ"]
+ time.tzset()
+ orig_tzname = time.tzname
+
+ try:
+
+ dest = LIBRARY_EPOCH_DATETIME.replace(tzinfo=ZoneInfo("Africa/Addis_Ababa"))
+ with time_machine.travel(dest):
+ assert time.tzname == ("EAT", "EAT")
+
+ assert time.tzname == orig_tzname
+
+ finally:
+ os.environ["TZ"] = orig_tz
+ time.tzset()
+
+
+(a)pytest.mark.skipif(not HAVE_ZONEINFO, reason="Requires ZoneInfo")
def test_destination_datetime_tzinfo_zoneinfo_windows():
orig_timezone = time.timezone
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-spyder-kernels for openSUSE:Factory checked in at 2021-11-29 17:28:28
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-spyder-kernels (Old)
and /work/SRC/openSUSE:Factory/.python-spyder-kernels.new.31177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-spyder-kernels"
Mon Nov 29 17:28:28 2021 rev:30 rq:934156 version:2.2.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-spyder-kernels/python-spyder-kernels.changes 2021-10-27 22:21:42.583214161 +0200
+++ /work/SRC/openSUSE:Factory/.python-spyder-kernels.new.31177/python-spyder-kernels.changes 2021-12-02 02:24:49.376697893 +0100
@@ -1,0 +2,9 @@
+Fri Nov 26 17:58:11 UTC 2021 - Ben Greiner <code(a)bnavigator.de>
+
+- Update to version 2.2.0
+ * Add the ability to capture segfaults and flush standard streams
+ from Spyder.
+ * Add support for jupyter_client 7.
+- Drop upstreamed spyder-kernels-pr328-unpin_jupyter-client.patch
+
+-------------------------------------------------------------------
Old:
----
python-spyder-kernels-2.1.3.tar.gz
spyder-kernels-pr328-unpin_jupyter-client.patch
New:
----
python-spyder-kernels-2.2.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-spyder-kernels.spec ++++++
--- /var/tmp/diff_new_pack.sN38BV/_old 2021-12-02 02:24:49.804696400 +0100
+++ /var/tmp/diff_new_pack.sN38BV/_new 2021-12-02 02:24:49.808696386 +0100
@@ -20,7 +20,7 @@
%define skip_python2 1
%define skip_python36 1
Name: python-spyder-kernels
-Version: 2.1.3
+Version: 2.2.0
Release: 0
Summary: Jupyter kernels for Spyder's console
License: MIT
@@ -28,8 +28,6 @@
URL: https://github.com/spyder-ide/spyder-kernels
# PyPI tarballs do not include the tests: https://github.com/spyder-ide/spyder-kernels/issues/66
Source: %{url}/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz
-# PATCH-FIX-UPSTREAM spyder-kernels-pr328-unpin_jupyter-client.patch -- gh#spyder-ide/spyder-kernels#328
-Patch0: https://github.com/spyder-ide/spyder-kernels/pull/328.patch#/spyder-kernels…
BuildRequires: %{python_module setuptools}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
++++++ python-spyder-kernels-2.1.3.tar.gz -> python-spyder-kernels-2.2.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spyder-kernels-2.1.3/CHANGELOG.md new/spyder-kernels-2.2.0/CHANGELOG.md
--- old/spyder-kernels-2.1.3/CHANGELOG.md 2021-10-02 19:10:06.000000000 +0200
+++ new/spyder-kernels-2.2.0/CHANGELOG.md 2021-11-23 00:19:57.000000000 +0100
@@ -1,5 +1,40 @@
# History of changes
+### New features
+
+* Add the ability to capture segfaults and flush standard streams from
+ Spyder.
+* Add support for jupyter_client 7.
+
+## Version 2.2.0 (2021-11-22)
+
+### Issues Closed
+
+* [Issue 326](https://github.com/spyder-ide/spyder-kernels/issues/326) - Setting variables in recursive debugging namespaces is broken ([PR 327](https://github.com/spyder-ide/spyder-kernels/pull/327) by [@impact27](https://github.com/impact27))
+* [Issue 325](https://github.com/spyder-ide/spyder-kernels/issues/325) - %timeit has issues with the namespace ([PR 327](https://github.com/spyder-ide/spyder-kernels/pull/327) by [@impact27](https://github.com/impact27))
+* [Issue 316](https://github.com/spyder-ide/spyder-kernels/issues/316) - Disable capture_fd_output in IPykernel 6+ in favor of Wurlitzer ([PR 337](https://github.com/spyder-ide/spyder-kernels/pull/337) by [@ccordoba12](https://github.com/ccordoba12))
+
+In this release 3 issues were closed.
+
+### Pull Requests Merged
+
+* [PR 337](https://github.com/spyder-ide/spyder-kernels/pull/337) - PR: Disable the new mechanism to forward low-level output in IPykernel 6, by [@ccordoba12](https://github.com/ccordoba12) ([316](https://github.com/spyder-ide/spyder-kernels/issues/316))
+* [PR 336](https://github.com/spyder-ide/spyder-kernels/pull/336) - PR: Don't show traceback when exiting debugger after breakpoint call, by [@ccordoba12](https://github.com/ccordoba12)
+* [PR 335](https://github.com/spyder-ide/spyder-kernels/pull/335) - PR: Remove locals from exec in comprehensions (debugger), by [@impact27](https://github.com/impact27)
+* [PR 334](https://github.com/spyder-ide/spyder-kernels/pull/334) - PR: Fix missing stderr when the kernel crashes, by [@impact27](https://github.com/impact27)
+* [PR 333](https://github.com/spyder-ide/spyder-kernels/pull/333) - PR: Add cast for shape tuple subclass instances when getting values size, by [@dalthviz](https://github.com/dalthviz)
+* [PR 332](https://github.com/spyder-ide/spyder-kernels/pull/332) - PR: Remove usage of f_locals.get, by [@impact27](https://github.com/impact27)
+* [PR 328](https://github.com/spyder-ide/spyder-kernels/pull/328) - PR: Remove upper constraint on jupyter_client, by [@bnavigator](https://github.com/bnavigator)
+* [PR 327](https://github.com/spyder-ide/spyder-kernels/pull/327) - PR: Fix timeit in Pdb and other namespace issues, by [@impact27](https://github.com/impact27) ([326](https://github.com/spyder-ide/spyder-kernels/issues/326), [325](https://github.com/spyder-ide/spyder-kernels/issues/325))
+* [PR 317](https://github.com/spyder-ide/spyder-kernels/pull/317) - PR: Run asyncio and normal handlers, by [@impact27](https://github.com/impact27) ([16183](https://github.com/spyder-ide/spyder/issues/16183))
+* [PR 254](https://github.com/spyder-ide/spyder-kernels/pull/254) - PR: Enable faulthandler from the frontend, by [@impact27](https://github.com/impact27)
+
+In this release 10 pull requests were closed.
+
+
+----
+
+
## Version 2.1.3 (2021-10-02)
### Pull Requests Merged
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spyder-kernels-2.1.3/setup.py new/spyder-kernels-2.2.0/setup.py
--- old/spyder-kernels-2.1.3/setup.py 2021-10-02 19:10:06.000000000 +0200
+++ new/spyder-kernels-2.2.0/setup.py 2021-11-23 00:19:57.000000000 +0100
@@ -36,13 +36,14 @@
REQUIREMENTS = [
+ 'decorator<5; python_version<"3"',
'backports.functools-lru-cache; python_version<"3"',
'cloudpickle',
'ipykernel<5; python_version<"3"',
'ipykernel>=5.3.0; python_version>="3"',
'ipython<6; python_version<"3"',
'ipython>=7.6.0; python_version>="3"',
- 'jupyter-client>=5.3.4,<7',
+ 'jupyter-client>=5.3.4',
'pyzmq>=17',
'wurlitzer>=1.0.3;platform_system!="Windows"',
]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spyder-kernels-2.1.3/spyder_kernels/_version.py new/spyder-kernels-2.2.0/spyder_kernels/_version.py
--- old/spyder-kernels-2.1.3/spyder_kernels/_version.py 2021-10-02 19:10:06.000000000 +0200
+++ new/spyder-kernels-2.2.0/spyder_kernels/_version.py 2021-11-23 00:19:57.000000000 +0100
@@ -8,5 +8,5 @@
"""Version File."""
-VERSION_INFO = (2, 1, 3)
+VERSION_INFO = (2, 2, 0)
__version__ = '.'.join(map(str, VERSION_INFO))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spyder-kernels-2.1.3/spyder_kernels/comms/frontendcomm.py new/spyder-kernels-2.2.0/spyder_kernels/comms/frontendcomm.py
--- old/spyder-kernels-2.1.3/spyder_kernels/comms/frontendcomm.py 2021-10-02 19:10:06.000000000 +0200
+++ new/spyder-kernels-2.2.0/spyder_kernels/comms/frontendcomm.py 2021-11-23 00:19:57.000000000 +0100
@@ -15,7 +15,6 @@
import threading
import time
-import ipykernel
from IPython.core.getipython import get_ipython
from jupyter_client.localinterfaces import localhost
from tornado import ioloop
@@ -146,38 +145,35 @@
return
handler = self.kernel.shell_handlers.get(msg_type, None)
- if handler is None:
- self.kernel.log.warning("Unknown message type: %r", msg_type)
- else:
- try:
- if not PY2:
- import asyncio
- if (not getattr(asyncio, 'run', False) or
- ipykernel.__version__[0] < '6'):
- # This is required for Python 3.6, which doesn't have
- # asyncio.run or ipykernel versions less than 6. The
- # nice thing is that ipykernel 6, which requires
- # asyncio, doesn't support Python 3.6.
- handler(out_stream, ident, msg)
- else:
- # This is needed for ipykernel 6+
- asyncio.run(handler(out_stream, ident, msg))
- else:
- handler(out_stream, ident, msg)
- except ValueError as e:
- # This avoids showing an unnecessary message about expected
- # coroutines.
+ try:
+ if handler is None:
+ self.kernel.log.warning("Unknown message type: %r", msg_type)
return
- except Exception:
- self.kernel.log.error("Exception in message handler:",
- exc_info=True)
+ if PY2:
+ handler(out_stream, ident, msg)
return
- sys.stdout.flush()
- sys.stderr.flush()
- # Flush to ensure reply is sent
- if out_stream:
- out_stream.flush(zmq.POLLOUT)
+ import asyncio
+
+ if (getattr(asyncio, 'run', False) and
+ asyncio.iscoroutinefunction(handler)):
+ # This is needed for ipykernel 6+
+ asyncio.run(handler(out_stream, ident, msg))
+ else:
+ # This is required for Python 3.6, which doesn't have
+ # asyncio.run or ipykernel versions less than 6. The
+ # nice thing is that ipykernel 6, which requires
+ # asyncio, doesn't support Python 3.6.
+ handler(out_stream, ident, msg)
+ except Exception:
+ self.kernel.log.error(
+ "Exception in message handler:", exc_info=True)
+ finally:
+ sys.stdout.flush()
+ sys.stderr.flush()
+ # Flush to ensure reply is sent
+ if out_stream:
+ out_stream.flush(zmq.POLLOUT)
def remote_call(self, comm_id=None, blocking=False, callback=None,
timeout=None):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spyder-kernels-2.1.3/spyder_kernels/console/__main__.py new/spyder-kernels-2.2.0/spyder_kernels/console/__main__.py
--- old/spyder-kernels-2.1.3/spyder_kernels/console/__main__.py 2021-10-02 19:10:06.000000000 +0200
+++ new/spyder-kernels-2.2.0/spyder_kernels/console/__main__.py 2021-11-23 00:19:57.000000000 +0100
@@ -20,4 +20,12 @@
sys.path.remove(cwd)
from spyder_kernels.console import start
- start.main()
+ try:
+ start.main()
+ except Exception:
+ # We have to explicitely write to __stderr__ as stderr might already
+ # have been replaced.
+ import traceback
+ traceback.print_exc(file=sys.__stderr__)
+ sys.__stderr__.flush()
+ raise
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spyder-kernels-2.1.3/spyder_kernels/console/kernel.py new/spyder-kernels-2.2.0/spyder_kernels/console/kernel.py
--- old/spyder-kernels-2.1.3/spyder_kernels/console/kernel.py 2021-10-02 19:10:06.000000000 +0200
+++ new/spyder-kernels-2.2.0/spyder_kernels/console/kernel.py 2021-11-23 00:19:57.000000000 +0100
@@ -19,7 +19,6 @@
# Third-party imports
import ipykernel
from ipykernel.ipkernel import IPythonKernel
-from ipykernel.zmqshell import ZMQInteractiveShell
from traitlets.config.loader import LazyConfigValue
# Local imports
@@ -30,34 +29,16 @@
from spyder_kernels.utils.mpl import (
MPL_BACKENDS_FROM_SPYDER, MPL_BACKENDS_TO_SPYDER, INLINE_FIGURE_FORMATS)
from spyder_kernels.utils.nsview import get_remote_data, make_remote_view
+from spyder_kernels.console.shell import SpyderShell
+if PY3:
+ import faulthandler
# Excluded variables from the Variable Explorer (i.e. they are not
# shown at all there)
EXCLUDED_NAMES = ['In', 'Out', 'exit', 'get_ipython', 'quit']
-class SpyderShell(ZMQInteractiveShell):
- """Spyder shell."""
-
- def ask_exit(self):
- """Engage the exit actions."""
- self.kernel.frontend_comm.close_thread()
- return super(SpyderShell, self).ask_exit()
-
- def get_local_scope(self, stack_depth):
- """Get local scope at given frame depth."""
- frame = sys._getframe(stack_depth + 1)
- if self.kernel._pdb_frame is frame:
- # we also give the globals because they might not be in
- # self.user_ns
- namespace = frame.f_globals.copy()
- namespace.update(self.kernel._pdb_locals)
- return namespace
- else:
- return frame.f_locals
-
-
class SpyderKernel(IPythonKernel):
"""Spyder kernel for Jupyter."""
@@ -99,19 +80,26 @@
'get_matplotlib_backend': self.get_matplotlib_backend,
'pdb_input_reply': self.pdb_input_reply,
'_interrupt_eventloop': self._interrupt_eventloop,
+ 'enable_faulthandler': self.enable_faulthandler,
+ "flush_std": self.flush_std,
}
for call_id in handlers:
self.frontend_comm.register_call_handler(
call_id, handlers[call_id])
self.namespace_view_settings = {}
- self._pdb_obj = None
self._pdb_step = None
self._mpl_backend_error = None
self._running_namespace = None
self._pdb_input_line = None
+ self.faulthandler_handle = None
# -- Public API -----------------------------------------------------------
+ def do_shutdown(self, restart):
+ """Disable faulthandler if enabled before proceeding."""
+ self.disable_faulthandler()
+ super(SpyderKernel, self).do_shutdown(restart)
+
def frontend_call(self, blocking=False, broadcast=True,
timeout=None, callback=None):
"""Call the frontend."""
@@ -127,6 +115,42 @@
callback=callback,
timeout=timeout)
+ def flush_std(self):
+ """Flush C standard streams."""
+ sys.__stderr__.flush()
+ sys.__stdout__.flush()
+
+ def enable_faulthandler(self, fn):
+ """
+ Open a file to save the faulthandling and identifiers for
+ internal threads.
+ """
+ if not PY3:
+ # Not implemented
+ return
+ self.disable_faulthandler()
+ f = open(fn, 'w')
+ self.faulthandler_handle = f
+ f.write("Main thread id:\n")
+ f.write(hex(threading.main_thread().ident))
+ f.write('\nSystem threads ids:\n')
+ f.write(" ".join([hex(thread.ident) for thread in threading.enumerate()
+ if thread is not threading.main_thread()]))
+ f.write('\n')
+ faulthandler.enable(f)
+
+ def disable_faulthandler(self):
+ """
+ Cancel the faulthandling, close the file handle and remove the file.
+ """
+ if not PY3:
+ # Not implemented
+ return
+ if self.faulthandler_handle:
+ faulthandler.disable()
+ self.faulthandler_handle.close()
+ self.faulthandler_handle = None
+
# --- For the Variable Explorer
def set_namespace_view_settings(self, settings):
"""Set namespace_view_settings."""
@@ -233,7 +257,7 @@
"""
from spyder_kernels.utils.misc import fix_reference_name
- glbs = self._mglobals()
+ glbs = self.shell.user_ns
load_func = iofunctions.load_funcs[ext]
data, error_message = load_func(filename)
@@ -263,12 +287,6 @@
return iofunctions.save(data, filename)
# --- For Pdb
- def is_debugging(self):
- """
- Check if we are currently debugging.
- """
- return bool(self._pdb_frame)
-
def _do_complete(self, code, cursor_pos):
"""Call parent class do_complete"""
return super(SpyderKernel, self).do_complete(code, cursor_pos)
@@ -279,13 +297,13 @@
Public method of ipykernel overwritten for debugging.
"""
- if self.is_debugging():
- return self._pdb_obj.do_complete(code, cursor_pos)
+ if self.shell.is_debugging():
+ return self.shell.pdb_session.do_complete(code, cursor_pos)
return self._do_complete(code, cursor_pos)
def publish_pdb_state(self):
"""Publish Pdb state."""
- if self._pdb_obj:
+ if self.shell.pdb_session:
state = dict(namespace_view = self.get_namespace_view(),
var_properties = self.get_var_properties(),
step = self._pdb_step)
@@ -295,35 +313,36 @@
"""
Handle a message from the frontend
"""
- if self._pdb_obj:
- self._pdb_obj.set_spyder_breakpoints(breakpoints)
+ if self.shell.pdb_session:
+ self.shell.pdb_session.set_spyder_breakpoints(breakpoints)
def set_pdb_ignore_lib(self, state):
"""
Change the "Ignore libraries while stepping" debugger setting.
"""
- if self._pdb_obj:
- self._pdb_obj.pdb_ignore_lib = state
+ if self.shell.pdb_session:
+ self.shell.pdb_session.pdb_ignore_lib = state
def set_pdb_execute_events(self, state):
"""
Handle a message from the frontend
"""
- if self._pdb_obj:
- self._pdb_obj.pdb_execute_events = state
+ if self.shell.pdb_session:
+ self.shell.pdb_session.pdb_execute_events = state
def set_pdb_use_exclamation_mark(self, state):
"""
Set an option on the current debugging session to decide wether
the Pdb commands needs to be prefixed by '!'
"""
- if self._pdb_obj:
- self._pdb_obj.pdb_use_exclamation_mark = state
+ if self.shell.pdb_session:
+ self.shell.pdb_session.pdb_use_exclamation_mark = state
def pdb_input_reply(self, line, echo_stack_entry=True):
"""Get a pdb command from the frontend."""
- if self._pdb_obj:
- self._pdb_obj._disable_next_stack_entry = not echo_stack_entry
+ if self.shell.pdb_session:
+ self.shell.pdb_session._disable_next_stack_entry = (
+ not echo_stack_entry)
self._pdb_input_line = line
if self.eventloop:
# Interrupting the eventloop is only implemented when a message is
@@ -340,7 +359,7 @@
Runs the eventloop while debugging.
"""
# Only works if the comm is open and this is a pdb prompt.
- if not self.frontend_comm.is_open() or not self._pdb_frame:
+ if not self.frontend_comm.is_open() or not self.shell.is_debugging():
return input(prompt)
# Flush output before making the request.
@@ -566,16 +585,16 @@
"""
ns = {}
if self._running_namespace is None:
- ns.update(self._mglobals())
+ ns.update(self.shell.user_ns)
else:
+ # This is true when a file is executing.
running_globals, running_locals = self._running_namespace
ns.update(running_globals)
if running_locals is not None:
ns.update(running_locals)
- if self._pdb_frame is not None:
- ns.update(self._pdb_locals)
-
+ # Add debugging locals
+ ns.update(self.shell._pdb_locals)
# Add magics to ns so we can show help about them on the Help
# plugin
if with_magics:
@@ -583,7 +602,6 @@
cell_magics = self.shell.magics_manager.magics['cell']
ns.update(line_magics)
ns.update(cell_magics)
-
return ns
def _get_reference_namespace(self, name):
@@ -592,22 +610,10 @@
It returns the globals() if reference has not yet been defined
"""
- glbs = self._mglobals()
- if self._pdb_frame is None:
- return glbs
- else:
- lcls = self._pdb_locals
- if name in lcls:
- return lcls
- else:
- return glbs
-
- def _mglobals(self):
- """Return current globals -- handles Pdb frames"""
- if self._pdb_frame is not None:
- return self._pdb_frame.f_globals
- else:
- return self.shell.user_ns
+ lcls = self.shell._pdb_locals
+ if name in lcls:
+ return lcls
+ return self.shell.user_ns
def _get_len(self, var):
"""Return sequence length"""
@@ -668,28 +674,6 @@
except:
return None
- # --- For Pdb
- def _register_pdb_session(self, pdb_obj):
- """Register Pdb session to use it later"""
- self._pdb_obj = pdb_obj
-
- @property
- def _pdb_frame(self):
- """Return current Pdb frame if there is any"""
- if self._pdb_obj is not None and self._pdb_obj.curframe is not None:
- return self._pdb_obj.curframe
-
- @property
- def _pdb_locals(self):
- """
- Return current Pdb frame locals if available. Otherwise
- return an empty dictionary
- """
- if self._pdb_frame:
- return self._pdb_obj.curframe_locals
- else:
- return {}
-
# --- For the Help plugin
def _eval(self, text):
"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spyder-kernels-2.1.3/spyder_kernels/console/shell.py new/spyder-kernels-2.2.0/spyder_kernels/console/shell.py
--- old/spyder-kernels-2.1.3/spyder_kernels/console/shell.py 1970-01-01 01:00:00.000000000 +0100
+++ new/spyder-kernels-2.2.0/spyder_kernels/console/shell.py 2021-11-23 00:19:57.000000000 +0100
@@ -0,0 +1,106 @@
+# -*- coding: utf-8 -*-
+# -----------------------------------------------------------------------------
+# Copyright (c) 2009- Spyder Kernels Contributors
+#
+# Licensed under the terms of the MIT License
+# (see spyder_kernels/__init__.py for details)
+# -----------------------------------------------------------------------------
+
+"""
+Spyder shell for Jupyter kernels.
+"""
+
+# Standard library imports
+import bdb
+import sys
+
+# Third-party imports
+from ipykernel.zmqshell import ZMQInteractiveShell
+
+
+class SpyderShell(ZMQInteractiveShell):
+ """Spyder shell."""
+
+ def __init__(self, *args, **kwargs):
+ # Create _pdb_obj before __init__
+ self._pdb_obj = None
+ super(SpyderShell, self).__init__(*args, **kwargs)
+
+ # ---- Methods overriden by us.
+ def ask_exit(self):
+ """Engage the exit actions."""
+ self.kernel.frontend_comm.close_thread()
+ return super(SpyderShell, self).ask_exit()
+
+ def _showtraceback(self, etype, evalue, stb):
+ """
+ Don't show a traceback when exiting our debugger after entering
+ it through a `breakpoint()` call.
+
+ This is because calling `!exit` after `breakpoint()` raises
+ BdbQuit, which throws a long and useless traceback.
+ """
+ if etype is bdb.BdbQuit:
+ stb = ['']
+ super(SpyderShell, self)._showtraceback(etype, evalue, stb)
+
+ # ---- For Pdb namespace integration
+ def get_local_scope(self, stack_depth):
+ """Get local scope at given frame depth."""
+ frame = sys._getframe(stack_depth + 1)
+ if self._pdb_frame is frame:
+ # Avoid calling f_locals on _pdb_frame
+ return self._pdb_obj.curframe_locals
+ else:
+ return frame.f_locals
+
+ def get_global_scope(self, stack_depth):
+ """Get global scope at given frame depth."""
+ frame = sys._getframe(stack_depth + 1)
+ return frame.f_globals
+
+ def is_debugging(self):
+ """
+ Check if we are currently debugging.
+ """
+ return bool(self._pdb_frame)
+
+ @property
+ def pdb_session(self):
+ """Get current pdb session."""
+ return self._pdb_obj
+
+ @pdb_session.setter
+ def pdb_session(self, pdb_obj):
+ """Register Pdb session to use it later"""
+ self._pdb_obj = pdb_obj
+
+ @property
+ def _pdb_frame(self):
+ """Return current Pdb frame if there is any"""
+ if self.pdb_session is not None:
+ return self.pdb_session.curframe
+
+ @property
+ def _pdb_locals(self):
+ """
+ Return current Pdb frame locals if available. Otherwise
+ return an empty dictionary
+ """
+ if self._pdb_frame is not None:
+ return self._pdb_obj.curframe_locals
+ else:
+ return {}
+
+ @property
+ def user_ns(self):
+ """Get the current namespace."""
+ if self._pdb_frame is not None:
+ return self._pdb_frame.f_globals
+ else:
+ return self.__user_ns
+
+ @user_ns.setter
+ def user_ns(self, namespace):
+ """Set user_ns."""
+ self.__user_ns = namespace
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spyder-kernels-2.1.3/spyder_kernels/console/start.py new/spyder-kernels-2.2.0/spyder_kernels/console/start.py
--- old/spyder-kernels-2.1.3/spyder_kernels/console/start.py 2021-10-02 19:10:06.000000000 +0200
+++ new/spyder-kernels-2.2.0/spyder_kernels/console/start.py 2021-11-23 00:19:57.000000000 +0100
@@ -30,7 +30,6 @@
IPYKERNEL_6 = ipykernel.__version__[0] >= '6'
-
def import_spydercustomize():
"""Import our customizations into the kernel."""
here = osp.dirname(__file__)
@@ -237,6 +236,11 @@
lines = sympy_config(mpl_backend)
spy_cfg.IPKernelApp.exec_lines.append(lines)
+ # Disable the new mechanism to capture and forward low-level output
+ # in IPykernel 6. For that we have Wurlitzer.
+ if LooseVersion(ipykernel.__version__) >= LooseVersion('6.3.0'):
+ spy_cfg.IPKernelApp.capture_fd_output = False
+
# Merge IPython and Spyder configs. Spyder prefs will have prevalence
# over IPython ones
cfg._merge(spy_cfg)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spyder-kernels-2.1.3/spyder_kernels/console/tests/test_console_kernel.py new/spyder-kernels-2.2.0/spyder_kernels/console/tests/test_console_kernel.py
--- old/spyder-kernels-2.1.3/spyder_kernels/console/tests/test_console_kernel.py 2021-10-02 19:10:06.000000000 +0200
+++ new/spyder-kernels-2.2.0/spyder_kernels/console/tests/test_console_kernel.py 2021-11-23 00:19:57.000000000 +0100
@@ -30,7 +30,7 @@
import numpy as np
# Local imports
-from spyder_kernels.py3compat import PY3, to_text_string
+from spyder_kernels.py3compat import PY2, PY3, to_text_string
from spyder_kernels.utils.iofuncs import iofunctions
from spyder_kernels.utils.test_utils import get_kernel, get_log_text
from spyder_kernels.customize.spyderpdb import SpyderPdb
@@ -57,9 +57,9 @@
This function was taken from the ipykernel project.
We plan to remove it when dropping support for python 2.
- Returns
+ Yields
-------
- kernel_manager: connected KernelManager instance
+ client: jupyter_client.BlockingKernelClient connected to the kernel
"""
kernel = Popen([sys.executable, '-c', cmd], stdout=PIPE, stderr=PIPE)
try:
@@ -423,7 +423,7 @@
with setup_kernel(cmd) as client:
msg_id = client.execute("import sys; sys_path = sys.path",
user_expressions={'output':'sys_path'})
- reply = client.get_shell_msg(block=True, timeout=TIMEOUT)
+ reply = client.get_shell_msg(timeout=TIMEOUT)
# Transform value obtained through user_expressions
user_expressions = reply['content']['user_expressions']
@@ -447,7 +447,7 @@
with setup_kernel(cmd) as client:
# Remove all variables
client.execute("%reset -f")
- client.get_shell_msg(block=True, timeout=TIMEOUT)
+ client.get_shell_msg(timeout=TIMEOUT)
# Write multiprocessing code to a file
code = """
@@ -465,11 +465,11 @@
# Run code
client.execute("runfile(r'{}')".format(to_text_string(p)))
- client.get_shell_msg(block=True, timeout=TIMEOUT)
+ client.get_shell_msg(timeout=TIMEOUT)
# Verify that the `result` variable is defined
client.inspect('result')
- msg = client.get_shell_msg(block=True, timeout=TIMEOUT)
+ msg = client.get_shell_msg(timeout=TIMEOUT)
content = msg['content']
assert content['found']
@@ -487,7 +487,7 @@
with setup_kernel(cmd) as client:
# Remove all variables
client.execute("%reset -f")
- client.get_shell_msg(block=True, timeout=TIMEOUT)
+ client.get_shell_msg(timeout=TIMEOUT)
# Write multiprocessing code to a file
# Runs two times to verify that in the second case it doesn't break
@@ -504,14 +504,14 @@
# Run code two times
client.execute("runfile(r'{}')".format(to_text_string(p)))
- client.get_shell_msg(block=True, timeout=TIMEOUT)
+ client.get_shell_msg(timeout=TIMEOUT)
client.execute("runfile(r'{}')".format(to_text_string(p)))
- client.get_shell_msg(block=True, timeout=TIMEOUT)
+ client.get_shell_msg(timeout=TIMEOUT)
# Verify that the `x` variable is defined
client.inspect('x')
- msg = client.get_shell_msg(block=True, timeout=TIMEOUT)
+ msg = client.get_shell_msg(timeout=TIMEOUT)
content = msg['content']
assert content['found']
@@ -527,7 +527,7 @@
with setup_kernel(cmd) as client:
# Remove all variables
client.execute("%reset -f")
- client.get_shell_msg(block=True, timeout=TIMEOUT)
+ client.get_shell_msg(timeout=TIMEOUT)
# Write defined variable code to a file
code = u"result = 'hello world'; error # make an error"
@@ -547,40 +547,40 @@
# Run code file `d` to define `result` even after an error
client.execute("runfile(r'{}', current_namespace=False)"
.format(to_text_string(d)))
- client.get_shell_msg(block=True, timeout=TIMEOUT)
+ client.get_shell_msg(timeout=TIMEOUT)
# Verify that `result` is defined in the current namespace
client.inspect('result')
- msg = client.get_shell_msg(block=True, timeout=TIMEOUT)
+ msg = client.get_shell_msg(timeout=TIMEOUT)
content = msg['content']
assert content['found']
# Run code file `u` without current namespace
client.execute("runfile(r'{}', current_namespace=False)"
.format(to_text_string(u)))
- client.get_shell_msg(block=True, timeout=TIMEOUT)
+ client.get_shell_msg(timeout=TIMEOUT)
# Verify that the variable `result2` is defined
client.inspect('result2')
- msg = client.get_shell_msg(block=True, timeout=TIMEOUT)
+ msg = client.get_shell_msg(timeout=TIMEOUT)
content = msg['content']
assert content['found']
# Run code file `u` with current namespace
client.execute("runfile(r'{}', current_namespace=True)"
.format(to_text_string(u)))
- msg = client.get_shell_msg(block=True, timeout=TIMEOUT)
+ msg = client.get_shell_msg(timeout=TIMEOUT)
content = msg['content']
# Verify that the variable `result3` is defined
client.inspect('result3')
- msg = client.get_shell_msg(block=True, timeout=TIMEOUT)
+ msg = client.get_shell_msg(timeout=TIMEOUT)
content = msg['content']
assert content['found']
# Verify that the variable `__file__` is undefined
client.inspect('__file__')
- msg = client.get_shell_msg(block=True, timeout=TIMEOUT)
+ msg = client.get_shell_msg(timeout=TIMEOUT)
content = msg['content']
assert not content['found']
@@ -601,14 +601,14 @@
suppress=True,
formatter={'float_kind':'{:0.2f}'.format})
""")
- client.get_shell_msg(block=True, timeout=TIMEOUT)
+ client.get_shell_msg(timeout=TIMEOUT)
# Create a big Numpy array and an array to check decimal format
client.execute("""
x = np.random.rand(75000,5);
a = np.array([123412341234.123412341234])
""")
- client.get_shell_msg(block=True, timeout=TIMEOUT)
+ client.get_shell_msg(timeout=TIMEOUT)
# Assert that NumPy threshold, suppress and formatter
# are the same as the ones set by the user
@@ -617,29 +617,29 @@
s = np.get_printoptions()['suppress'];
f = np.get_printoptions()['formatter']
""")
- client.get_shell_msg(block=True, timeout=TIMEOUT)
+ client.get_shell_msg(timeout=TIMEOUT)
# Check correct decimal format
client.inspect('a')
- msg = client.get_shell_msg(block=True, timeout=TIMEOUT)
+ msg = client.get_shell_msg(timeout=TIMEOUT)
content = msg['content']['data']['text/plain']
assert "123412341234.12" in content
# Check threshold value
client.inspect('t')
- msg = client.get_shell_msg(block=True, timeout=TIMEOUT)
+ msg = client.get_shell_msg(timeout=TIMEOUT)
content = msg['content']['data']['text/plain']
assert "inf" in content
# Check suppress value
client.inspect('s')
- msg = client.get_shell_msg(block=True, timeout=TIMEOUT)
+ msg = client.get_shell_msg(timeout=TIMEOUT)
content = msg['content']['data']['text/plain']
assert "True" in content
# Check formatter
client.inspect('f')
- msg = client.get_shell_msg(block=True, timeout=TIMEOUT)
+ msg = client.get_shell_msg(timeout=TIMEOUT)
content = msg['content']['data']['text/plain']
assert "{'float_kind': <built-in method format of str object" in content
@@ -667,7 +667,7 @@
with setup_kernel(cmd) as client:
# Remove all variables
client.execute("%reset -f")
- client.get_shell_msg(block=True, timeout=TIMEOUT)
+ client.get_shell_msg(timeout=TIMEOUT)
# Write turtle code to a file
code = """
@@ -692,11 +692,11 @@
# Run code
client.execute("runfile(r'{}')".format(to_text_string(p)))
- client.get_shell_msg(block=True, timeout=TIMEOUT)
+ client.get_shell_msg(timeout=TIMEOUT)
# Verify that the `tess` variable is defined
client.inspect('tess')
- msg = client.get_shell_msg(block=True, timeout=TIMEOUT)
+ msg = client.get_shell_msg(timeout=TIMEOUT)
content = msg['content']
assert content['found']
@@ -708,11 +708,11 @@
# Run code again
client.execute("runfile(r'{}')".format(to_text_string(p)))
- client.get_shell_msg(block=True, timeout=TIMEOUT)
+ client.get_shell_msg(timeout=TIMEOUT)
# Verify that the `a` variable is defined
client.inspect('a')
- msg = client.get_shell_msg(block=True, timeout=TIMEOUT)
+ msg = client.get_shell_msg(timeout=TIMEOUT)
content = msg['content']
assert content['found']
@@ -727,7 +727,7 @@
# Get current backend
code = "import matplotlib; backend = matplotlib.get_backend()"
client.execute(code, user_expressions={'output': 'backend'})
- reply = client.get_shell_msg(block=True, timeout=TIMEOUT)
+ reply = client.get_shell_msg(timeout=TIMEOUT)
# Transform value obtained through user_expressions
user_expressions = reply['content']['user_expressions']
@@ -754,9 +754,10 @@
pdb_obj = SpyderPdb()
pdb_obj.curframe = inspect.currentframe()
pdb_obj.completenames = lambda *ignore: ['baba']
- kernel._pdb_obj = pdb_obj
+ kernel.shell.pdb_session = pdb_obj
match = kernel.do_complete('ba', 2)
assert 'baba' in match['matches']
+ pdb_obj.curframe = None
@pytest.mark.parametrize("exclude_callables_and_modules", [True, False])
@@ -811,20 +812,96 @@
pdb_obj = SpyderPdb()
pdb_obj.curframe = inspect.currentframe()
pdb_obj.curframe_locals = pdb_obj.curframe.f_locals
- kernel._pdb_obj = pdb_obj
+ kernel.shell.pdb_session = pdb_obj
# Create a local variable.
- kernel._pdb_obj.default('zz = 10')
+ kernel.shell.pdb_session.default('zz = 10')
assert kernel.get_value('zz') == 10
# Run a list comprehension with this variable.
- kernel._pdb_obj.default("compr = [zz * i for i in [1, 2, 3]]")
+ kernel.shell.pdb_session.default("compr = [zz * i for i in [1, 2, 3]]")
assert kernel.get_value('compr') == [10, 20, 30]
# Check that the variable is not reported as being part of globals.
- kernel._pdb_obj.default("in_globals = 'zz' in globals()")
+ kernel.shell.pdb_session.default("in_globals = 'zz' in globals()")
assert kernel.get_value('in_globals') == False
+ pdb_obj.curframe = None
+ pdb_obj.curframe_locals = None
+
+def test_comprehensions_with_locals_in_pdb_2(kernel):
+ """
+ Test that evaluating comprehensions with locals works in Pdb.
+
+ This is a regression test for spyder-ide/spyder#16790.
+ """
+ pdb_obj = SpyderPdb()
+ pdb_obj.curframe = inspect.currentframe()
+ pdb_obj.curframe_locals = pdb_obj.curframe.f_locals
+ kernel.shell.pdb_session = pdb_obj
+
+ # Create a local variable.
+ kernel.shell.pdb_session.default('aa = [1, 2]')
+ kernel.shell.pdb_session.default('bb = [3, 4]')
+ kernel.shell.pdb_session.default('res = []')
+
+ # Run a list comprehension with this variable.
+ kernel.shell.pdb_session.default(
+ "for c0 in aa: res.append([(c0, c1) for c1 in bb])")
+ assert kernel.get_value('res') == [[(1, 3), (1, 4)], [(2, 3), (2, 4)]]
+
+ pdb_obj.curframe = None
+ pdb_obj.curframe_locals = None
+
+
+def test_namespaces_in_pdb(kernel):
+ """
+ Test namespaces in pdb
+ """
+ # Define get_ipython for timeit
+ get_ipython = lambda: kernel.shell
+ kernel.shell.user_ns["test"] = 0
+ pdb_obj = SpyderPdb()
+ pdb_obj.curframe = inspect.currentframe()
+ pdb_obj.curframe_locals = pdb_obj.curframe.f_locals
+ kernel.shell.pdb_session = pdb_obj
+
+ # Check adding something to globals works
+ pdb_obj.default("globals()['test2'] = 0")
+ assert pdb_obj.curframe.f_globals["test2"] == 0
+
+ if PY2:
+ # no error method in py2
+ pdb_obj.curframe = None
+ pdb_obj.curframe_locals = None
+ return
+
+ # Create wrapper to check for errors
+ old_error = pdb_obj.error
+ pdb_obj._error_occured = False
+ def error_wrapper(*args, **kwargs):
+ print(args, kwargs)
+ pdb_obj._error_occured = True
+ return old_error(*args, **kwargs)
+ pdb_obj.error = error_wrapper
+
+ # Test globals are visible
+ pdb_obj.curframe.f_globals["test3"] = 0
+ pdb_obj.default("%timeit test3")
+ assert not pdb_obj._error_occured
+
+ # Test locals are visible
+ pdb_obj.curframe_locals["test4"] = 0
+ pdb_obj.default("%timeit test4")
+ assert not pdb_obj._error_occured
+
+ # Test user namespace is not visible
+ pdb_obj.default("%timeit test")
+ assert pdb_obj._error_occured
+
+ pdb_obj.curframe = None
+ pdb_obj.curframe_locals = None
+
if __name__ == "__main__":
pytest.main()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spyder-kernels-2.1.3/spyder_kernels/customize/namespace_manager.py new/spyder-kernels-2.2.0/spyder_kernels/customize/namespace_manager.py
--- old/spyder-kernels-2.1.3/spyder_kernels/customize/namespace_manager.py 2021-10-02 19:10:06.000000000 +0200
+++ new/spyder-kernels-2.2.0/spyder_kernels/customize/namespace_manager.py 2021-11-23 00:19:57.000000000 +0100
@@ -12,31 +12,6 @@
from spyder_kernels.py3compat import PY2
-def _get_globals_locals():
- """Return current namespace."""
- if get_ipython().kernel.is_debugging():
- pdb = get_ipython().kernel._pdb_obj
- ns_locals = pdb.curframe_locals
- ns_globals = pdb.curframe.f_globals
- else:
- ns_locals = None
- ns_globals = get_ipython().user_ns
- return ns_globals, ns_locals
-
-
-def _set_globals_locals(ns_globals, ns_locals):
- """Update current namespace."""
- if get_ipython().kernel.is_debugging():
- pdb = get_ipython().kernel._pdb_obj
- pdb.curframe.f_globals.update(ns_globals)
- if ns_locals:
- pdb.curframe_locals.update(ns_locals)
- else:
- get_ipython().user_ns.update(ns_globals)
- if ns_locals:
- get_ipython().user_ns.update(ns_locals)
-
-
class NamespaceManager(object):
"""
Get a namespace and set __file__ to filename for this namespace.
@@ -61,14 +36,18 @@
Prepare the namespace.
"""
# Save previous __file__
+ ipython_shell = get_ipython()
if self.ns_globals is None:
if self.current_namespace:
- self.ns_globals, self.ns_locals = _get_globals_locals()
+ # stack_depth = parent of calling function
+ stack_depth = 2
+ self.ns_globals = ipython_shell.get_global_scope(stack_depth)
+ self.ns_locals = ipython_shell.get_local_scope(stack_depth)
if '__file__' in self.ns_globals:
self._previous_filename = self.ns_globals['__file__']
self.ns_globals['__file__'] = self.filename
else:
- ipython_shell = get_ipython()
+
main_mod = ipython_shell.new_main_mod(
self.filename, '__main__')
self.ns_globals = main_mod.__dict__
@@ -80,7 +59,7 @@
self._reset_main = True
# Save current namespace for access by variable explorer
- get_ipython().kernel._running_namespace = (
+ ipython_shell.kernel._running_namespace = (
self.ns_globals, self.ns_locals)
if (self._file_code is not None
@@ -104,14 +83,21 @@
"""
Reset the namespace.
"""
- get_ipython().kernel._running_namespace = None
+ ipython_shell = get_ipython()
+ ipython_shell.kernel._running_namespace = None
if self._previous_filename:
self.ns_globals['__file__'] = self._previous_filename
elif '__file__' in self.ns_globals:
self.ns_globals.pop('__file__')
if not self.current_namespace:
- _set_globals_locals(self.ns_globals, self.ns_locals)
+ # stack_depth = parent of calling function
+ stack_depth = 2
+ ns_globals = ipython_shell.get_global_scope(stack_depth)
+ ns_locals = ipython_shell.get_local_scope(stack_depth)
+ ns_globals.update(self.ns_globals)
+ if ns_locals and self.ns_locals:
+ ns_locals.update(self.ns_locals)
if self._previous_main:
sys.modules['__main__'] = self._previous_main
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spyder-kernels-2.1.3/spyder_kernels/customize/spydercustomize.py new/spyder-kernels-2.2.0/spyder_kernels/customize/spydercustomize.py
--- old/spyder-kernels-2.1.3/spyder_kernels/customize/spydercustomize.py 2021-10-02 19:10:06.000000000 +0200
+++ new/spyder-kernels-2.2.0/spyder_kernels/customize/spydercustomize.py 2021-11-23 00:19:57.000000000 +0100
@@ -469,9 +469,9 @@
ipython_shell.showtraceback(exception_only=True)
except BaseException as error:
if (isinstance(error, bdb.BdbQuit)
- and ipython_shell.kernel._pdb_obj):
+ and ipython_shell.pdb_session):
# Ignore BdbQuit if we are debugging, as it is expected.
- ipython_shell.kernel._pdb_obj = None
+ ipython_shell.pdb_session = None
elif post_mortem and isinstance(error, Exception):
error_type, error, tb = sys.exc_info()
post_mortem_excepthook(error_type, error, tb)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spyder-kernels-2.1.3/spyder_kernels/customize/spyderpdb.py new/spyder-kernels-2.2.0/spyder_kernels/customize/spyderpdb.py
--- old/spyder-kernels-2.1.3/spyder_kernels/customize/spyderpdb.py 2021-10-02 19:10:06.000000000 +0200
+++ new/spyder-kernels-2.2.0/spyder_kernels/customize/spyderpdb.py 2021-11-23 00:19:57.000000000 +0100
@@ -34,6 +34,18 @@
logger = logging.getLogger(__name__)
+def uses_comprehension(code):
+ """Check if given code uses comprehensions."""
+ comprehension_statements = (
+ ast.ListComp,
+ ast.SetComp,
+ ast.GeneratorExp,
+ ast.DictComp
+ )
+ nodes = ast.walk(ast.parse(code))
+ return any(isinstance(node, comprehension_statements) for node in nodes)
+
+
class DebugWrapper(object):
"""
Notifies the frontend when debugging starts/stops
@@ -126,26 +138,21 @@
" command instead")
return
locals = self.curframe_locals
-
- # This is necessary to allow running comprehensions with the
- # frame locals. It also fallbacks to the right globals if the
- # user wants to work with them instead.
- # See spyder-ide/spyder#13909.
- if not 'globals()' in line:
- ns = self.curframe.f_globals.copy()
- ns.update(locals)
- else:
- ns = self.curframe.f_globals
+ globals = self.curframe.f_globals
if self.pdb_use_exclamation_mark:
# Find pdb commands executed without !
cmd, arg, line = self.parseline(line)
if cmd:
cmd_in_namespace = (
- cmd in ns or cmd in builtins.__dict__)
+ cmd in globals
+ or cmd in locals
+ or cmd in builtins.__dict__
+ )
# Special case for quit and exit
if cmd in ("quit", "exit"):
- if cmd in ns and isinstance(ns[cmd], ZMQExitAutocall):
+ if cmd in globals and isinstance(
+ globals[cmd], ZMQExitAutocall):
# Use the pdb call
cmd_in_namespace = False
cmd_func = getattr(self, 'do_' + cmd, None)
@@ -184,7 +191,34 @@
sys.displayhook = self.displayhook
if execute_events:
get_ipython().events.trigger('pre_execute')
- exec(code, ns, locals)
+
+ # Mitigates a CPython bug (https://bugs.python.org/issue41918)
+ # that prevents running comprehensions with the frame locals
+ # in Pdb.
+ # See https://bugs.python.org/issue21161 and
+ # spyder-ide/spyder#13909.
+ if uses_comprehension(line):
+ # There are three potential problems with this approach:
+ # 1. If the code access a globals variable that is
+ # masked by a locals variable, it will get the locals
+ # one.
+ # 2. Any edit to that variable will be lost.
+ # 3. The globals will appear to contain all the locals
+ # variables.
+ # 4. Any new locals variable will be saved to globals
+ # instead
+ fake_globals = globals.copy()
+ fake_globals.update(locals)
+ locals_keys = locals.keys()
+ # Don't pass locals, solves spyder-ide/spyder#16790
+ exec(code, fake_globals)
+ # Avoid mixing locals and globals
+ for key in locals_keys:
+ locals[key] = fake_globals.pop(key, None)
+ globals.update(fake_globals)
+ else:
+ exec(code, globals, locals)
+
if execute_events:
get_ipython().events.trigger('post_execute')
finally:
@@ -255,8 +289,8 @@
def stop_here(self, frame):
"""Check if pdb should stop here."""
if (frame is not None
- and frame.f_locals.get(
- "__tracebackhide__", False) == "__pdb_exit__"):
+ and "__tracebackhide__" in frame.f_locals
+ and frame.f_locals["__tracebackhide__"] == "__pdb_exit__"):
self.onecmd('exit')
return False
@@ -504,8 +538,7 @@
Register Pdb session after reset.
"""
super(SpyderPdb, self).reset()
- kernel = get_ipython().kernel
- kernel._register_pdb_session(self)
+ get_ipython().pdb_session = self
def do_debug(self, arg):
"""
@@ -528,8 +561,7 @@
exc_info = sys.exc_info()[:2]
self.error(
traceback.format_exception_only(*exc_info)[-1].strip())
- kernel = get_ipython().kernel
- kernel._register_pdb_session(self)
+ get_ipython().pdb_session = self
def user_return(self, frame, return_value):
"""This function is called when a return trap is set here."""
@@ -737,10 +769,10 @@
def enter_debugger(filename, continue_if_has_breakpoints, code_format):
"""Enter debugger. Code format should be a format that accept filename."""
- kernel = get_ipython().kernel
- recursive = kernel.is_debugging()
+ shell = get_ipython()
+ recursive = shell.is_debugging()
if recursive:
- parent_debugger = kernel._pdb_obj
+ parent_debugger = shell.pdb_session
sys.settrace(None)
globals = parent_debugger.curframe.f_globals
locals = parent_debugger.curframe_locals
@@ -770,7 +802,7 @@
# Reset parent debugger
sys.settrace(parent_debugger.trace_dispatch)
parent_debugger.lastcmd = debugger.lastcmd
- kernel._register_pdb_session(parent_debugger)
+ shell.pdb_session = parent_debugger
else:
# The breakpoint might not be in the cell
debugger.run(code)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spyder-kernels-2.1.3/spyder_kernels/utils/nsview.py new/spyder-kernels-2.2.0/spyder_kernels/utils/nsview.py
--- old/spyder-kernels-2.1.3/spyder_kernels/utils/nsview.py 2021-10-02 19:10:06.000000000 +0200
+++ new/spyder-kernels-2.2.0/spyder_kernels/utils/nsview.py 2021-11-23 00:19:57.000000000 +0100
@@ -89,6 +89,11 @@
isinstance(item.shape, (tuple, np.integer))):
try:
if item.shape:
+ # This is needed since values could return as
+ # `shape` an instance of a `tuple` subclass.
+ # See spyder-ide/spyder#16348
+ if isinstance(item.shape, tuple):
+ return tuple(item.shape)
return item.shape
else:
# Scalar value
1
0
02 Dec '21
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-sphinxcontrib-svg2pdfconverter for openSUSE:Factory checked in at 2021-11-29 17:28:39
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-sphinxcontrib-svg2pdfconverter (Old)
and /work/SRC/openSUSE:Factory/.python-sphinxcontrib-svg2pdfconverter.new.31177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-sphinxcontrib-svg2pdfconverter"
Mon Nov 29 17:28:39 2021 rev:5 rq:934529 version:1.2.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-sphinxcontrib-svg2pdfconverter/python-sphinxcontrib-svg2pdfconverter.changes 2021-07-17 23:37:25.729604281 +0200
+++ /work/SRC/openSUSE:Factory/.python-sphinxcontrib-svg2pdfconverter.new.31177/python-sphinxcontrib-svg2pdfconverter.changes 2021-12-02 02:24:48.416701242 +0100
@@ -1,0 +2,7 @@
+Mon Nov 29 11:50:16 UTC 2021 - Dirk M��ller <dmueller(a)suse.com>
+
+- update to 1.2.0:
+ * Match inkscape version number only
+ * Fix CairSVGConverter::convert for usage on Windows
+
+-------------------------------------------------------------------
Old:
----
sphinxcontrib-svg2pdfconverter-1.1.1.tar.gz
New:
----
sphinxcontrib-svg2pdfconverter-1.2.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-sphinxcontrib-svg2pdfconverter.spec ++++++
--- /var/tmp/diff_new_pack.8MG5bv/_old 2021-12-02 02:24:48.768700014 +0100
+++ /var/tmp/diff_new_pack.8MG5bv/_new 2021-12-02 02:24:48.772700000 +0100
@@ -19,7 +19,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%define skip_python2 1
Name: python-sphinxcontrib-svg2pdfconverter
-Version: 1.1.1
+Version: 1.2.0
Release: 0
Summary: Sphinx SVG to PDF converter extension
License: BSD-2-Clause
++++++ sphinxcontrib-svg2pdfconverter-1.1.1.tar.gz -> sphinxcontrib-svg2pdfconverter-1.2.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sphinxcontrib-svg2pdfconverter-1.1.1/PKG-INFO new/sphinxcontrib-svg2pdfconverter-1.2.0/PKG-INFO
--- old/sphinxcontrib-svg2pdfconverter-1.1.1/PKG-INFO 2021-01-07 08:03:06.000000000 +0100
+++ new/sphinxcontrib-svg2pdfconverter-1.2.0/PKG-INFO 2021-11-05 23:51:03.550010000 +0100
@@ -1,81 +1,12 @@
Metadata-Version: 2.1
Name: sphinxcontrib-svg2pdfconverter
-Version: 1.1.1
+Version: 1.2.0
Summary: Sphinx SVG to PDF converter extension
Home-page: https://github.com/missinglinkelectronics/sphinxcontrib-svg2pdfconverter
Author: Stefan Wiehler
Author-email: stefan.wiehler(a)missinglinkelectronics.com
License: BSD
Download-URL: https://pypi.org/project/sphinxcontrib-svg2pdfconverter
-Description: *************************************
- Sphinx SVG to PDF Converter Extension
- *************************************
-
- This extension converts SVG images to PDF in case the builder does not support
- SVG images natively (e.g. LaTeX).
-
- Internally, either `Inkscape <https://inkscape.org/>`_, ``rsvg-convert``
- from `libRSVG <https://wiki.gnome.org/Projects/LibRsvg>`_ or `CairoSVG
- <https://cairosvg.org/>`_ as progressively more lightweight alternatives
- are used to convert images.
-
-
- Installation
- ============
-
- Just install via ``pip``:
-
- .. code-block:: console
-
- $ pip install sphinxcontrib-svg2pdfconverter
-
- You can choose between Inkscape, libRSVG and CairoSVG by adding
- ``sphinxcontrib.inkscapeconverter``, ``sphinxcontrib.rsvgconverter`` or
- ``sphinxcontrib.cairosvgconverter`` to the ``extensions`` list in your
- ``conf.py``.
-
- Make sure to have either ``inkscape`` or the ``rsvg-convert`` command available
- in your systems ``PATH`` and, if necessary, adapt the
- ``inkscape_converter_bin`` or ``rsvg_converter_bin`` config value respectively.
-
- CairoSVG requires additional dependencies to be installed with:
-
- .. code-block:: console
-
- $ pip install sphinxcontrib-svg2pdfconverter[CairoSVG]
-
- CairoSVG and its dependencies may require additional tools during the
- installation depending on the OS you are using; see the `CairoSVG documentation
- <https://cairosvg.org/documentation/#installation>`_ for further details.
-
- Configuration
- =============
-
- Inkscape
- --------
-
- ``inkscape_converter_bin``
- Path to Inkscape binary. By default, this is ``inkscape``.
-
- ``inkscape_converter_args``
- Additional command-line arguments for Inkscape, as a list. By
- default, this is ``['--export-area-drawing']``.
-
- RSVG
- ----
-
- ``rsvg_converter_bin``
- Path to RSVG converter binary. By default, this is ``rsvg-convert``.
-
- ``rsvg_converter_args``
- Additional command-line arguments for the RSVG converter, as a list. By
- default, this is the emtpy list ``[]``.
-
- CairoSVG
- --------
-
- No configuration is required.
-
Platform: any
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
@@ -90,3 +21,75 @@
Requires-Python: ~=3.4
Description-Content-Type: text/x-rst
Provides-Extra: CairoSVG
+License-File: LICENSE.txt
+
+*************************************
+Sphinx SVG to PDF Converter Extension
+*************************************
+
+This extension converts SVG images to PDF in case the builder does not support
+SVG images natively (e.g. LaTeX).
+
+Internally, either `Inkscape <https://inkscape.org/>`_, ``rsvg-convert``
+from `libRSVG <https://wiki.gnome.org/Projects/LibRsvg>`_ or `CairoSVG
+<https://cairosvg.org/>`_ as progressively more lightweight alternatives
+are used to convert images.
+
+
+Installation
+============
+
+Just install via ``pip``:
+
+.. code-block:: console
+
+ $ pip install sphinxcontrib-svg2pdfconverter
+
+You can choose between Inkscape, libRSVG and CairoSVG by adding
+``sphinxcontrib.inkscapeconverter``, ``sphinxcontrib.rsvgconverter`` or
+``sphinxcontrib.cairosvgconverter`` to the ``extensions`` list in your
+``conf.py``.
+
+Make sure to have either ``inkscape`` or the ``rsvg-convert`` command available
+in your systems ``PATH`` and, if necessary, adapt the
+``inkscape_converter_bin`` or ``rsvg_converter_bin`` config value respectively.
+
+CairoSVG requires additional dependencies to be installed with:
+
+.. code-block:: console
+
+ $ pip install sphinxcontrib-svg2pdfconverter[CairoSVG]
+
+CairoSVG and its dependencies may require additional tools during the
+installation depending on the OS you are using; see the `CairoSVG documentation
+<https://cairosvg.org/documentation/#installation>`_ for further details.
+
+Configuration
+=============
+
+Inkscape
+--------
+
+``inkscape_converter_bin``
+ Path to Inkscape binary. By default, this is ``inkscape``.
+
+``inkscape_converter_args``
+ Additional command-line arguments for Inkscape, as a list. By
+ default, this is ``['--export-area-drawing']``.
+
+RSVG
+----
+
+``rsvg_converter_bin``
+ Path to RSVG converter binary. By default, this is ``rsvg-convert``.
+
+``rsvg_converter_args``
+ Additional command-line arguments for the RSVG converter, as a list. By
+ default, this is the emtpy list ``[]``.
+
+CairoSVG
+--------
+
+No configuration is required.
+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sphinxcontrib-svg2pdfconverter-1.1.1/setup.py new/sphinxcontrib-svg2pdfconverter-1.2.0/setup.py
--- old/sphinxcontrib-svg2pdfconverter-1.1.1/setup.py 2021-01-07 07:59:34.000000000 +0100
+++ new/sphinxcontrib-svg2pdfconverter-1.2.0/setup.py 2021-11-05 23:48:44.000000000 +0100
@@ -13,7 +13,7 @@
setup(
name='sphinxcontrib-svg2pdfconverter',
- version='1.1.1',
+ version='1.2.0',
url='https://github.com/missinglinkelectronics/sphinxcontrib-svg2pdfconverter',
download_url='https://pypi.org/project/sphinxcontrib-svg2pdfconverter',
license='BSD',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sphinxcontrib-svg2pdfconverter-1.1.1/sphinxcontrib/cairosvgconverter.py new/sphinxcontrib-svg2pdfconverter-1.2.0/sphinxcontrib/cairosvgconverter.py
--- old/sphinxcontrib-svg2pdfconverter-1.1.1/sphinxcontrib/cairosvgconverter.py 2020-05-29 13:50:34.000000000 +0200
+++ new/sphinxcontrib-svg2pdfconverter-1.2.0/sphinxcontrib/cairosvgconverter.py 2021-11-05 23:48:44.000000000 +0100
@@ -51,7 +51,7 @@
"""Converts the image from SVG to PDF via CairoSVG."""
import cairosvg
try:
- cairosvg.svg2pdf(url=_from, write_to=_to)
+ cairosvg.svg2pdf(file_obj=open(_from, 'rb'), write_to=_to)
except (OSError, URLError) as err:
raise ExtensionError(__('CairoSVG converter failed with reason: '
'%s') % err.reason)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sphinxcontrib-svg2pdfconverter-1.1.1/sphinxcontrib/inkscapeconverter.py new/sphinxcontrib-svg2pdfconverter-1.2.0/sphinxcontrib/inkscapeconverter.py
--- old/sphinxcontrib-svg2pdfconverter-1.1.1/sphinxcontrib/inkscapeconverter.py 2020-11-30 12:48:56.000000000 +0100
+++ new/sphinxcontrib-svg2pdfconverter-1.2.0/sphinxcontrib/inkscapeconverter.py 2021-11-05 23:48:44.000000000 +0100
@@ -42,7 +42,7 @@
output = subprocess.check_output(
args, stdin=subprocess.PIPE, stderr=subprocess.PIPE,
universal_newlines=True)
- match = re.search('Inkscape (.+) \(.+, .+\)', output)
+ match = re.search('Inkscape (.+)', output)
if not match:
logger.warning(__('Inkscape command %r returned invalid result: %s\n '
'Check the inkscape_converter_bin setting'),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sphinxcontrib-svg2pdfconverter-1.1.1/sphinxcontrib_svg2pdfconverter.egg-info/PKG-INFO new/sphinxcontrib-svg2pdfconverter-1.2.0/sphinxcontrib_svg2pdfconverter.egg-info/PKG-INFO
--- old/sphinxcontrib-svg2pdfconverter-1.1.1/sphinxcontrib_svg2pdfconverter.egg-info/PKG-INFO 2021-01-07 08:03:06.000000000 +0100
+++ new/sphinxcontrib-svg2pdfconverter-1.2.0/sphinxcontrib_svg2pdfconverter.egg-info/PKG-INFO 2021-11-05 23:51:03.000000000 +0100
@@ -1,81 +1,12 @@
Metadata-Version: 2.1
Name: sphinxcontrib-svg2pdfconverter
-Version: 1.1.1
+Version: 1.2.0
Summary: Sphinx SVG to PDF converter extension
Home-page: https://github.com/missinglinkelectronics/sphinxcontrib-svg2pdfconverter
Author: Stefan Wiehler
Author-email: stefan.wiehler(a)missinglinkelectronics.com
License: BSD
Download-URL: https://pypi.org/project/sphinxcontrib-svg2pdfconverter
-Description: *************************************
- Sphinx SVG to PDF Converter Extension
- *************************************
-
- This extension converts SVG images to PDF in case the builder does not support
- SVG images natively (e.g. LaTeX).
-
- Internally, either `Inkscape <https://inkscape.org/>`_, ``rsvg-convert``
- from `libRSVG <https://wiki.gnome.org/Projects/LibRsvg>`_ or `CairoSVG
- <https://cairosvg.org/>`_ as progressively more lightweight alternatives
- are used to convert images.
-
-
- Installation
- ============
-
- Just install via ``pip``:
-
- .. code-block:: console
-
- $ pip install sphinxcontrib-svg2pdfconverter
-
- You can choose between Inkscape, libRSVG and CairoSVG by adding
- ``sphinxcontrib.inkscapeconverter``, ``sphinxcontrib.rsvgconverter`` or
- ``sphinxcontrib.cairosvgconverter`` to the ``extensions`` list in your
- ``conf.py``.
-
- Make sure to have either ``inkscape`` or the ``rsvg-convert`` command available
- in your systems ``PATH`` and, if necessary, adapt the
- ``inkscape_converter_bin`` or ``rsvg_converter_bin`` config value respectively.
-
- CairoSVG requires additional dependencies to be installed with:
-
- .. code-block:: console
-
- $ pip install sphinxcontrib-svg2pdfconverter[CairoSVG]
-
- CairoSVG and its dependencies may require additional tools during the
- installation depending on the OS you are using; see the `CairoSVG documentation
- <https://cairosvg.org/documentation/#installation>`_ for further details.
-
- Configuration
- =============
-
- Inkscape
- --------
-
- ``inkscape_converter_bin``
- Path to Inkscape binary. By default, this is ``inkscape``.
-
- ``inkscape_converter_args``
- Additional command-line arguments for Inkscape, as a list. By
- default, this is ``['--export-area-drawing']``.
-
- RSVG
- ----
-
- ``rsvg_converter_bin``
- Path to RSVG converter binary. By default, this is ``rsvg-convert``.
-
- ``rsvg_converter_args``
- Additional command-line arguments for the RSVG converter, as a list. By
- default, this is the emtpy list ``[]``.
-
- CairoSVG
- --------
-
- No configuration is required.
-
Platform: any
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
@@ -90,3 +21,75 @@
Requires-Python: ~=3.4
Description-Content-Type: text/x-rst
Provides-Extra: CairoSVG
+License-File: LICENSE.txt
+
+*************************************
+Sphinx SVG to PDF Converter Extension
+*************************************
+
+This extension converts SVG images to PDF in case the builder does not support
+SVG images natively (e.g. LaTeX).
+
+Internally, either `Inkscape <https://inkscape.org/>`_, ``rsvg-convert``
+from `libRSVG <https://wiki.gnome.org/Projects/LibRsvg>`_ or `CairoSVG
+<https://cairosvg.org/>`_ as progressively more lightweight alternatives
+are used to convert images.
+
+
+Installation
+============
+
+Just install via ``pip``:
+
+.. code-block:: console
+
+ $ pip install sphinxcontrib-svg2pdfconverter
+
+You can choose between Inkscape, libRSVG and CairoSVG by adding
+``sphinxcontrib.inkscapeconverter``, ``sphinxcontrib.rsvgconverter`` or
+``sphinxcontrib.cairosvgconverter`` to the ``extensions`` list in your
+``conf.py``.
+
+Make sure to have either ``inkscape`` or the ``rsvg-convert`` command available
+in your systems ``PATH`` and, if necessary, adapt the
+``inkscape_converter_bin`` or ``rsvg_converter_bin`` config value respectively.
+
+CairoSVG requires additional dependencies to be installed with:
+
+.. code-block:: console
+
+ $ pip install sphinxcontrib-svg2pdfconverter[CairoSVG]
+
+CairoSVG and its dependencies may require additional tools during the
+installation depending on the OS you are using; see the `CairoSVG documentation
+<https://cairosvg.org/documentation/#installation>`_ for further details.
+
+Configuration
+=============
+
+Inkscape
+--------
+
+``inkscape_converter_bin``
+ Path to Inkscape binary. By default, this is ``inkscape``.
+
+``inkscape_converter_args``
+ Additional command-line arguments for Inkscape, as a list. By
+ default, this is ``['--export-area-drawing']``.
+
+RSVG
+----
+
+``rsvg_converter_bin``
+ Path to RSVG converter binary. By default, this is ``rsvg-convert``.
+
+``rsvg_converter_args``
+ Additional command-line arguments for the RSVG converter, as a list. By
+ default, this is the emtpy list ``[]``.
+
+CairoSVG
+--------
+
+No configuration is required.
+
+
1
0