openSUSE Commits
Threads by month
- ----- 2024 -----
- 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
July 2024
- 1 participants
- 1521 discussions
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package fakeroot for openSUSE:Factory checked in at 2024-07-01 11:20:30
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/fakeroot (Old)
and /work/SRC/openSUSE:Factory/.fakeroot.new.18349 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "fakeroot"
Mon Jul 1 11:20:30 2024 rev:17 rq:1184045 version:1.35.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/fakeroot/fakeroot.changes 2024-06-09 20:24:07.009930037 +0200
+++ /work/SRC/openSUSE:Factory/.fakeroot.new.18349/fakeroot.changes 2024-07-01 11:21:02.948544209 +0200
@@ -1,0 +2,6 @@
+Sat Jun 29 21:06:15 UTC 2024 - Dirk Müller <dmueller(a)suse.com>
+
+- update to 1.35.1
+ * big endian fixes
+
+-------------------------------------------------------------------
Old:
----
fakeroot_1.35.orig.tar.gz
New:
----
fakeroot_1.35.1.orig.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ fakeroot.spec ++++++
--- /var/tmp/diff_new_pack.1VlzHL/_old 2024-07-01 11:21:03.460562861 +0200
+++ /var/tmp/diff_new_pack.1VlzHL/_new 2024-07-01 11:21:03.464563007 +0200
@@ -17,7 +17,7 @@
Name: fakeroot
-Version: 1.35
+Version: 1.35.1
Release: 0
Summary: Wrapper that gives a fake root environment
License: GPL-3.0-or-later
++++++ fakeroot_1.35.orig.tar.gz -> fakeroot_1.35.1.orig.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fakeroot-1.35/communicate.c new/fakeroot-1.35.1/communicate.c
--- old/fakeroot-1.35/communicate.c 2022-01-17 21:42:20.000000000 +0100
+++ new/fakeroot-1.35.1/communicate.c 2024-06-06 20:15:57.000000000 +0200
@@ -511,12 +511,19 @@
void send_fakem(const struct fake_msg *buf)
{
int r;
+ struct fake_msg_buf fm = { 0 };
if(init_get_msg()!=-1){
- ((struct fake_msg *)buf)->mtype=1;
+ memcpy(&fm.msg, buf, sizeof(*buf));
+ fm.mtype=1;
+#if __BYTE_ORDER == __BIG_ENDIAN
+ ((struct fake_msg*)&fm.msg)->magic=FAKEROOT_MAGIC_BE;
+#elif __BYTE_ORDER == __LITTLE_ENDIAN
+ ((struct fake_msg*)&fm.msg)->magic=FAKEROOT_MAGIC_LE;
+#endif
do
- r=msgsnd(msg_snd, (struct fake_msg *)buf,
- sizeof(*buf)-sizeof(buf->mtype), 0);
+ r=msgsnd(msg_snd, &fm,
+ sizeof(fm)-sizeof(fm.mtype), 0);
while((r==-1) && (errno==EINTR));
if(r==-1)
perror("libfakeroot, when sending message");
@@ -548,8 +555,12 @@
there will always be some (small) chance it will go wrong.
*/
+ struct fake_msg_buf fm = { 0 };
+ uint32_t k = 0;
+ uint32_t magic_candidate = 0;
int l;
pid_t pid;
+ uint8_t* ptr = NULL;
static int serial=0;
if(init_get_msg()!=-1){
@@ -560,11 +571,50 @@
buf->pid=pid;
send_fakem(buf);
- do
+ do {
l=msgrcv(msg_get,
- (struct my_msgbuf*)buf,
- sizeof(*buf)-sizeof(buf->mtype),0,0);
- while(((l==-1)&&(errno==EINTR))||(buf->serial!=serial)||buf->pid!=pid);
+ &fm,
+ sizeof(fm)-sizeof(fm.mtype),0,0);
+
+ ptr = &fm;
+ for (k=0; k<16; k++) {
+ magic_candidate = *(uint32_t*)&ptr[k];
+ if (magic_candidate == FAKEROOT_MAGIC_LE || magic_candidate == FAKEROOT_MAGIC_BE) {
+ memcpy(buf, &ptr[k], sizeof(*buf));
+ break;
+ }
+ }
+
+ if (k == 16) {
+ fprintf(stderr,
+ "libfakeroot internal error: payload not recognized!\n");
+ continue;
+ }
+
+ /*
+ Use swapX here instead of ntoh/hton
+ that do nothing on big-endian machines
+ */
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+ if (magic_candidate == FAKEROOT_MAGIC_BE) {
+#elif __BYTE_ORDER == __BIG_ENDIAN
+ if (magic_candidate == FAKEROOT_MAGIC_LE) {
+#endif
+ buf->id = bswapl(buf->id);
+ buf->pid = bswapl(buf->pid);
+ buf->serial = bswapl(buf->serial);
+ buf->st.uid = bswapl(buf->st.uid);
+ buf->st.gid = bswapl(buf->st.gid);
+ buf->st.ino = bswapll(buf->st.ino);
+ buf->st.dev = bswapll(buf->st.dev);
+ buf->st.rdev = bswapll(buf->st.rdev);
+ buf->st.mode = bswapl(buf->st.mode);
+ buf->st.nlink = bswapl(buf->st.nlink);
+ buf->remote = bswapl(0);
+ buf->xattr.buffersize = bswapl(buf->xattr.buffersize);
+ buf->xattr.flags_rc = bswapl(buf->xattr.flags_rc);
+ }
+ }while(((l==-1)&&(errno==EINTR))||(buf->serial!=serial)||buf->pid!=pid);
if(l==-1){
buf->xattr.flags_rc=errno;
@@ -581,7 +631,6 @@
printf("libfakeroot/fakeroot, internal bug!! get_fake: length=%i != l=%i",
sizeof(*buf)-sizeof(buf->mtype),l);
*/
-
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fakeroot-1.35/config.h.in new/fakeroot-1.35.1/config.h.in
--- old/fakeroot-1.35/config.h.in 2024-06-05 21:19:47.000000000 +0200
+++ new/fakeroot-1.35.1/config.h.in 2024-06-25 02:24:46.000000000 +0200
@@ -405,6 +405,9 @@
#undef const
/* Define to `int' if <sys/types.h> does not define. */
+#undef id_t
+
+/* Define to `int' if <sys/types.h> does not define. */
#undef mode_t
/* Define to `long' if <sys/types.h> does not define. */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fakeroot-1.35/configure new/fakeroot-1.35.1/configure
--- old/fakeroot-1.35/configure 2024-06-05 21:19:47.000000000 +0200
+++ new/fakeroot-1.35.1/configure 2024-06-25 02:24:46.000000000 +0200
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for fakeroot 1.35.
+# Generated by GNU Autoconf 2.71 for fakeroot 1.35.1.
#
# Report bugs to <clint(a)debian.org>.
#
@@ -621,8 +621,8 @@
# Identity of this package.
PACKAGE_NAME='fakeroot'
PACKAGE_TARNAME='fakeroot'
-PACKAGE_VERSION='1.35'
-PACKAGE_STRING='fakeroot 1.35'
+PACKAGE_VERSION='1.35.1'
+PACKAGE_STRING='fakeroot 1.35.1'
PACKAGE_BUGREPORT='clint(a)debian.org'
PACKAGE_URL=''
@@ -1370,7 +1370,7 @@
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures fakeroot 1.35 to adapt to many kinds of systems.
+\`configure' configures fakeroot 1.35.1 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1442,7 +1442,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of fakeroot 1.35:";;
+ short | recursive ) echo "Configuration of fakeroot 1.35.1:";;
esac
cat <<\_ACEOF
@@ -1560,7 +1560,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-fakeroot configure 1.35
+fakeroot configure 1.35.1
generated by GNU Autoconf 2.71
Copyright (C) 2021 Free Software Foundation, Inc.
@@ -1968,7 +1968,7 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by fakeroot $as_me 1.35, which was
+It was created by fakeroot $as_me 1.35.1, which was
generated by GNU Autoconf 2.71. Invocation command line was
$ $0$ac_configure_args_raw
@@ -3355,7 +3355,7 @@
# Define the identity of the package.
PACKAGE='fakeroot'
- VERSION='1.35'
+ VERSION='1.35.1'
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -13648,6 +13648,16 @@
fi
+ac_fn_c_check_type "$LINENO" "id_t" "ac_cv_type_id_t" "$ac_includes_default"
+if test "x$ac_cv_type_id_t" = xyes
+then :
+
+else $as_nop
+
+printf "%s\n" "#define id_t int" >>confdefs.h
+
+fi
+
if test -n "$GCC";
@@ -15476,7 +15486,7 @@
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by fakeroot $as_me 1.35, which was
+This file was extended by fakeroot $as_me 1.35.1, which was
generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -15544,7 +15554,7 @@
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
-fakeroot config.status 1.35
+fakeroot config.status 1.35.1
configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fakeroot-1.35/configure.ac new/fakeroot-1.35.1/configure.ac
--- old/fakeroot-1.35/configure.ac 2024-06-05 21:24:39.000000000 +0200
+++ new/fakeroot-1.35.1/configure.ac 2024-06-25 02:24:32.000000000 +0200
@@ -1,5 +1,5 @@
dnl Process this file with autoconf to produce a configure script.
-AC_INIT([fakeroot],[1.35],[clint(a)debian.org],[fakeroot])
+AC_INIT([fakeroot],[1.35.1],[clint(a)debian.org],[fakeroot])
AC_PREREQ([2.71])
AC_CONFIG_MACRO_DIR([build-aux])
LT_PREREQ(2.1a)
@@ -111,6 +111,7 @@
AC_CHECK_TYPE(mode_t, int)
AC_CHECK_TYPE(off_t, long)
AC_CHECK_TYPE(size_t, unsigned)
+AC_CHECK_TYPE(id_t, int)
AH_TEMPLATE([FAKEROOT_ATTR], [for packed])
if test -n "$GCC";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fakeroot-1.35/faked.c new/fakeroot-1.35.1/faked.c
--- old/fakeroot-1.35/faked.c 2024-06-05 21:24:39.000000000 +0200
+++ new/fakeroot-1.35.1/faked.c 2024-06-25 02:22:18.000000000 +0200
@@ -1078,14 +1078,59 @@
void get_msg()
{
struct fake_msg buf;
+ struct fake_msg_buf fm = { 0 };
+ uint32_t k = 0;
+ uint32_t magic_candidate = 0;
+ uint8_t* ptr = NULL;
int r = 0;
if(debug)
fprintf(stderr,"FAKEROOT: msg=%i, key=%li\n",msg_get,(long)msg_key);
do {
- r=msgrcv(msg_get,&buf,sizeof(struct fake_msg),0,0);
+ r=msgrcv(msg_get,&fm,sizeof(struct fake_msg_buf),0,0);
+
+ ptr = &fm;
+ for (k=0; k<16; k++) {
+ magic_candidate = *(uint32_t*)&ptr[k];
+ if (magic_candidate == FAKEROOT_MAGIC_LE || magic_candidate == FAKEROOT_MAGIC_BE) {
+ memcpy(&buf, &ptr[k], sizeof(buf));
+ break;
+ }
+ }
+
+ if (k == 16) {
+ fprintf(stderr,
+ "faked internal error: payload not recognized!\n");
+ continue;
+ }
+
+ /*
+ Use swapX here instead of ntoh/hton
+ that do nothing on big-endian machines
+ */
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+ if (magic_candidate == FAKEROOT_MAGIC_BE) {
+#elif __BYTE_ORDER == __BIG_ENDIAN
+ if (magic_candidate == FAKEROOT_MAGIC_LE) {
+#endif
+ buf.id = bswapl(buf.id);
+ buf.pid = bswapl(buf.pid);
+ buf.serial = bswapl(buf.serial);
+ buf.st.uid = bswapl(buf.st.uid);
+ buf.st.gid = bswapl(buf.st.gid);
+ buf.st.ino = bswapll(buf.st.ino);
+ buf.st.dev = bswapll(buf.st.dev);
+ buf.st.rdev = bswapll(buf.st.rdev);
+ buf.st.mode = bswapl(buf.st.mode);
+ buf.st.nlink = bswapl(buf.st.nlink);
+ buf.remote = bswapl(0);
+ buf.xattr.buffersize = bswapl(buf.xattr.buffersize);
+ buf.xattr.flags_rc = bswapl(buf.xattr.flags_rc);
+ }
+
if(debug)
- fprintf(stderr,"FAKEROOT: r=%i, received message type=%li, message=%i\n",r,buf.mtype,buf.id);
+ fprintf(stderr,"FAKEROOT: r=%i, received message type=%li, message=%i\n",r,fm.mtype,buf.id);
+
if(r!=-1) {
buf.remote = 0;
process_msg(&buf);
@@ -1521,14 +1566,20 @@
# else /* !FAKEROOT_FAKENET */
close_range(0, num_fds, 0);
# endif
-#else /* ! HAVE_CLOSE_RANGE */
+ if (errno == ENOSYS) {
+#endif /* HAVE_CLOSE_RANGE */
+
/* This is the child closing its file descriptors. */
for (fl= 0; fl <= num_fds; ++fl)
# ifdef FAKEROOT_FAKENET
if (fl != sd)
# endif /* FAKEROOT_FAKENET */
close(fl);
-#endif
+
+#ifdef HAVE_CLOSE_RANGE
+ }
+#endif /* HAVE_CLOSE_RANGE */
+
setsid();
} else {
printf("%li:%i\n",(long)FAKE_KEY,pid);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fakeroot-1.35/libfakeroot.c new/fakeroot-1.35.1/libfakeroot.c
--- old/fakeroot-1.35/libfakeroot.c 2024-01-21 17:55:13.000000000 +0100
+++ new/fakeroot-1.35.1/libfakeroot.c 2024-06-06 19:43:45.000000000 +0200
@@ -139,13 +139,6 @@
#define INT_SEND_STAT(a,b) SEND_STAT(a,b,_STAT_VER)
#define INT_SEND_GET_XATTR(a,b) SEND_GET_XATTR(a,b,_STAT_VER)
#define INT_SEND_GET_STAT(a,b) SEND_GET_STAT(a,b)
-
-/* 10.10 uses id_t in getpriority/setpriority calls, so pretend
- id_t is used everywhere, just happens to be int on some OSes */
-#ifndef _ID_T
-#define _ID_T
-typedef int id_t;
-#endif
#endif
#include <sys/types.h>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fakeroot-1.35/message.h new/fakeroot-1.35.1/message.h
--- old/fakeroot-1.35/message.h 2021-11-08 02:33:39.000000000 +0100
+++ new/fakeroot-1.35.1/message.h 2024-06-06 20:15:57.000000000 +0200
@@ -37,8 +37,33 @@
#endif
#endif /* !defined(sun) && !defined(_NETINET_IN_H) */
+/* Endianness-agnostic swappers from byteswap.h */
+#define bswaps(x) \
+ ((uint16_t) ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)))
+#define bswapl(x) \
+ ((((x) & 0xff000000u) >> 24) | (((x) & 0x00ff0000u) >> 8) \
+ | (((x) & 0x0000ff00u) << 8) | (((x) & 0x000000ffu) << 24))
+#define bswapll(x) \
+ ((((x) & 0xff00000000000000ull) >> 56) \
+ | (((x) & 0x00ff000000000000ull) >> 40) \
+ | (((x) & 0x0000ff0000000000ull) >> 24) \
+ | (((x) & 0x000000ff00000000ull) >> 8) \
+ | (((x) & 0x00000000ff000000ull) << 8) \
+ | (((x) & 0x0000000000ff0000ull) << 24) \
+ | (((x) & 0x000000000000ff00ull) << 40) \
+ | (((x) & 0x00000000000000ffull) << 56))
+
#define FAKEROOTKEY_ENV "FAKEROOTKEY"
+/* The magic value must be positive itself and be still positive if
+ * it becomes a high-dword of an uint64_t. Otherwise msgsnd(2) on x32
+ * platform thinks mtype is 64-bit negative number and returns -EINVAL.
+ * It should be also asymmetric it is possible to detect the endianness
+ * of message
+ */
+#define FAKEROOT_MAGIC_LE 0x78787878
+#define FAKEROOT_MAGIC_BE 0x75757575
+
typedef uint32_t func_id_t;
typedef uint64_t fake_ino_t;
@@ -83,12 +108,12 @@
#endif
struct fake_msg {
#ifndef FAKEROOT_FAKENET
- long mtype; /* message type in SYSV message sending */
+ uint32_t magic; /* marker to detect cross-architecture mtype fluctuations */
#endif
func_id_t id; /* the requested function */
#ifndef FAKEROOT_FAKENET
pid_t pid;
- int serial;
+ int32_t serial;
#endif
struct fakestat st;
struct fakexattr xattr;
@@ -97,5 +122,19 @@
#if __SUNPRO_C
#pragma pack()
#endif
+
+#if __SUNPRO_C
+#pragma pack(4)
+#endif
+struct fake_msg_buf {
+#ifndef FAKEROOT_FAKENET
+ long mtype; /* message type in SYSV message sending */
+#endif
+ char msg[sizeof(struct fake_msg)];
+} FAKEROOT_ATTR(packed);
+
+#if __SUNPRO_C
+#pragma pack()
+#endif
#endif
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package dnsdiag for openSUSE:Factory checked in at 2024-07-01 11:20:27
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/dnsdiag (Old)
and /work/SRC/openSUSE:Factory/.dnsdiag.new.18349 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "dnsdiag"
Mon Jul 1 11:20:27 2024 rev:7 rq:1184040 version:2.5.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/dnsdiag/dnsdiag.changes 2023-02-08 17:21:03.850170245 +0100
+++ /work/SRC/openSUSE:Factory/.dnsdiag.new.18349/dnsdiag.changes 2024-07-01 11:21:02.064512003 +0200
@@ -1,0 +2,18 @@
+Thu Jun 20 12:16:30 UTC 2024 - Martin Hauke <mardnh(a)gmx.de>
+
+- Update to version 2.5.0
+ * Add RFC5001 NSID support (-n or --nsid).
+ * Display RFC8914 Extended DNS Errors when available (-E or --ede)
+ * Add ability to override default RR class (-C or --class).
+ * Display response TTL if applicable (-L or --ttl).
+ * Display first answer in RRSET, when available (-a or --answer).
+ * Add -x to display extra/expert information, implying Flags, EDE
+ and TTL.
+ * Display EDNS flags alongside other response flags, when available
+ * Always display RCODE with responses.
+ * Add more resolvers to the default list.
+ * Lots of bug fixes and UX improvements.
+ * Change default behavior of --edns to disabled by default.
+ * Always display flags in brackets.
+
+-------------------------------------------------------------------
Old:
----
dnsdiag-2.1.0.tar.gz
New:
----
dnsdiag-2.5.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ dnsdiag.spec ++++++
--- /var/tmp/diff_new_pack.p848te/_old 2024-07-01 11:21:02.632532696 +0200
+++ /var/tmp/diff_new_pack.p848te/_new 2024-07-01 11:21:02.632532696 +0200
@@ -1,8 +1,8 @@
#
# spec file for package dnsdiag
#
-# Copyright (c) 2023 SUSE LLC
-# Copyright (c) 2017-2023, Martin Hauke <mardnh(a)gmx.de>
+# Copyright (c) 2024 SUSE LLC
+# Copyright (c) 2017-2024, Martin Hauke <mardnh(a)gmx.de>
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -19,7 +19,7 @@
%bcond_without test
Name: dnsdiag
-Version: 2.1.0
+Version: 2.5.0
Release: 0
Summary: DNS request auditing toolset
License: BSD-3-Clause
@@ -33,13 +33,15 @@
BuildRequires: fdupes
BuildRequires: python-rpm-macros
BuildRequires: python3-setuptools
+Requires: python3-cryptography >= 42.0.7
Requires: python3-cymruwhois >= 1.6
-Requires: python3-dnspython >= 2.3.0
-Requires: python3-setuptools
+Requires: python3-dnspython >= 2.6.1
+Requires: python3-h2 >= 4.1.0
+Requires: python3-httpx >= 0.27.0
BuildArch: noarch
%if %{with test}
BuildRequires: python3-cymruwhois >= 1.6
-BuildRequires: python3-dnspython >= 2.3.0
+BuildRequires: python3-dnspython >= 2.6.1
%endif
%description
@@ -64,6 +66,7 @@
%prep
%setup -q -n dnsdiag-%{version}
+sed -e '/^#!\//, 1d' -i util/*.py
%build
%python3_build
++++++ dnsdiag-2.1.0.tar.gz -> dnsdiag-2.5.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnsdiag-2.1.0/LICENSE new/dnsdiag-2.5.0/LICENSE
--- old/dnsdiag-2.1.0/LICENSE 2020-01-18 10:44:22.000000000 +0100
+++ new/dnsdiag-2.5.0/LICENSE 2024-05-31 14:28:10.000000000 +0200
@@ -1,4 +1,4 @@
-Copyright (c) 2020, Babak Farrokhi
+Copyright (c) 2024, Babak Farrokhi
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnsdiag-2.1.0/PKG-INFO new/dnsdiag-2.5.0/PKG-INFO
--- old/dnsdiag-2.1.0/PKG-INFO 2023-02-01 14:48:49.904830000 +0100
+++ new/dnsdiag-2.5.0/PKG-INFO 2024-06-18 19:25:51.963563200 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: dnsdiag
-Version: 2.1.0
+Version: 2.5.0
Summary: DNS Measurement, Troubleshooting and Security Auditing Toolset (ping, traceroute)
Home-page: https://dnsdiag.org/
Author: Babak Farrokhi
@@ -11,14 +11,21 @@
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
-Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: 3.11
+Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Internet :: Name Service (DNS)
Classifier: Development Status :: 5 - Production/Stable
Classifier: Operating System :: OS Independent
License-File: LICENSE
+Requires-Dist: dnspython>=2.6.1
+Requires-Dist: cymruwhois>=1.6
+Requires-Dist: httpx>=0.27.0
+Requires-Dist: cryptography>=42.0.7
+Requires-Dist: h2>=4.1.0
DNSDiag provides a handful of tools to measure and diagnose your DNS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnsdiag-2.1.0/README.md new/dnsdiag-2.5.0/README.md
--- old/dnsdiag-2.1.0/README.md 2023-02-01 14:16:46.000000000 +0100
+++ new/dnsdiag-2.5.0/README.md 2024-06-15 15:16:23.000000000 +0200
@@ -1,4 +1,4 @@
-[![Build Status](https://travis-ci.org/farrokhi/dnsdiag.svg)](https://travis-ci.org/… [![PyPI](https://img.shields.io/pypi/v/dnsdiag.svg?maxAge=8600)](https://pypi.python.org/pypi/dnsdiag/) [![PyPI](https://img.shields.io/pypi/l/dnsdiag.svg?maxAge=8600)]() [![Downloads](https://static.pepy.tech/personalized-badge/dnsdiag?period=total&units=international_system&left_color=grey&right_color=blue&left_text=PyPi%20Downloads)](https://pepy.tech/project/dnsdiag) [![PyPI](https://img.shields.io/pypi/pyversions/dnsdiag.svg?maxAge=8600)]() [![Docker Pulls](https://img.shields.io/docker/pulls/farrokhi/dnsdiag)](https://hub.d… [![GitHub stars](https://img.shields.io/github/stars/farrokhi/dnsdiag.svg?style=socia…
+[![PyPI](https://img.shields.io/pypi/v/dnsdiag.svg?maxAge=8600)](https://pypi.python.org/pypi/dnsdiag/) [![PyPI](https://img.shields.io/pypi/l/dnsdiag.svg?maxAge=8600)]() [![Downloads](https://static.pepy.tech/personalized-badge/dnsdiag?period=total&units=international_system&left_color=grey&right_color=blue&left_text=PyPi%20Downloads)](https://pepy.tech/project/dnsdiag) [![PyPI](https://img.shields.io/pypi/pyversions/dnsdiag.svg?maxAge=8600)]() [![Docker Pulls](https://img.shields.io/docker/pulls/farrokhi/dnsdiag)](https://hub.d… [![GitHub stars](https://img.shields.io/github/stars/farrokhi/dnsdiag.svg?style=socia…
DNS Measurement, Troubleshooting and Security Auditing Toolset
===============================================================
@@ -62,26 +62,28 @@
A complete explanation of supported command line flags is shown by using `--help`. Here are a few useful flags:
- Using `--tcp`, `--tls` and `--doh` to select transport protocol. Default is UDP.
-- Using `--flags` to display response flags for each response
+- Using `--flags` to display response flags (including EDNS flags) for each response
- Using `--dnssec` to request DNSSEC if available
+- Using `--ede` to display Extended DNS Error messages ([RFC 8914](https://www.rfc-editor.org/rfc/rfc8914))
+- Using `--nsid` to display Name Server Identifier (NSID) if available ([RFC 5001](https://www.rfc-editor.org/rfc/rfc5001))
In addition to UDP, you can ping using TCP, DoT (DNS over TLS) and DoH (DNS over HTTPS) using `--tcp`, `--tls` and `--doh` respectively.
```shell
-./dnsping.py -c 5 --dnssec --flags --tls -t AAAA -s 9.9.9.9 ripe.net
+./dnsping.py -c 5 --dnssec --flags --tls --ede -t AAAA -s 8.8.8.8 brokendnssec.net
```
```
-dnsping.py DNS: 9.9.9.9:853, hostname: ripe.net, proto: TLS, rdatatype: AAAA, flags: RD
-169 bytes from 9.9.9.9: seq=1 time=279.805 ms [QR RD RA AD] NOERROR
-169 bytes from 9.9.9.9: seq=2 time=107.237 ms [QR RD RA AD] NOERROR
-169 bytes from 9.9.9.9: seq=3 time=96.747 ms [QR RD RA AD] NOERROR
-169 bytes from 9.9.9.9: seq=4 time=107.782 ms [QR RD RA AD] NOERROR
-169 bytes from 9.9.9.9: seq=5 time=94.713 ms [QR RD RA AD] NOERROR
+dnsping.py DNS: 8.8.8.8:853, hostname: brokendnssec.net, proto: TLS, class: IN, type: AAAA, flags: [RD]
+75 bytes from 8.8.8.8: seq=1 time=113.631 ms [QR RD RA DO] SERVFAIL [EDE 10: For brokendnssec.net/soa]
+75 bytes from 8.8.8.8: seq=2 time=115.479 ms [QR RD RA DO] SERVFAIL [EDE 10: For brokendnssec.net/soa]
+75 bytes from 8.8.8.8: seq=3 time=90.882 ms [QR RD RA DO] SERVFAIL [EDE 10: For brokendnssec.net/soa]
+75 bytes from 8.8.8.8: seq=4 time=91.256 ms [QR RD RA DO] SERVFAIL [EDE 10: For brokendnssec.net/soa]
+75 bytes from 8.8.8.8: seq=5 time=94.072 ms [QR RD RA DO] SERVFAIL [EDE 10: For brokendnssec.net/soa]
---- 9.9.9.9 dnsping statistics ---
+--- 8.8.8.8 dnsping statistics ---
5 requests transmitted, 5 responses received, 0% lost
-min=94.713 ms, avg=137.257 ms, max=279.805 ms, stddev=79.908 ms
+min=90.882 ms, avg=101.064 ms, max=115.479 ms, stddev=12.394 ms
```
It also displays statistics such as minimum, maximum and average response time as well as
@@ -169,9 +171,10 @@
Babak Farrokhi
-- twitter: [@farrokhi](https://twitter.com/farrokhi)
- github: [github.com/farrokhi](https://github.com/farrokhi/)
- website: [farrokhi.net](https://farrokhi.net/)
+- mastodon: [@farrokhi@unix.family](https://unix.family/@farrokhi)
+- twitter: [@farrokhi](https://twitter.com/farrokhi)
### License
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnsdiag-2.1.0/dnsdiag.egg-info/PKG-INFO new/dnsdiag-2.5.0/dnsdiag.egg-info/PKG-INFO
--- old/dnsdiag-2.1.0/dnsdiag.egg-info/PKG-INFO 2023-02-01 14:48:49.000000000 +0100
+++ new/dnsdiag-2.5.0/dnsdiag.egg-info/PKG-INFO 2024-06-18 19:25:51.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: dnsdiag
-Version: 2.1.0
+Version: 2.5.0
Summary: DNS Measurement, Troubleshooting and Security Auditing Toolset (ping, traceroute)
Home-page: https://dnsdiag.org/
Author: Babak Farrokhi
@@ -11,14 +11,21 @@
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
-Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: 3.11
+Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Internet :: Name Service (DNS)
Classifier: Development Status :: 5 - Production/Stable
Classifier: Operating System :: OS Independent
License-File: LICENSE
+Requires-Dist: dnspython>=2.6.1
+Requires-Dist: cymruwhois>=1.6
+Requires-Dist: httpx>=0.27.0
+Requires-Dist: cryptography>=42.0.7
+Requires-Dist: h2>=4.1.0
DNSDiag provides a handful of tools to measure and diagnose your DNS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnsdiag-2.1.0/dnsdiag.egg-info/requires.txt new/dnsdiag-2.5.0/dnsdiag.egg-info/requires.txt
--- old/dnsdiag-2.1.0/dnsdiag.egg-info/requires.txt 2023-02-01 14:48:49.000000000 +0100
+++ new/dnsdiag-2.5.0/dnsdiag.egg-info/requires.txt 2024-06-18 19:25:51.000000000 +0200
@@ -1,4 +1,5 @@
-dnspython>=2.3.0
+dnspython>=2.6.1
cymruwhois>=1.6
-requests>=2.28.2
-requests-toolbelt>=0.9.1
+httpx>=0.27.0
+cryptography>=42.0.7
+h2>=4.1.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnsdiag-2.1.0/dnseval.py new/dnsdiag-2.5.0/dnseval.py
--- old/dnsdiag-2.1.0/dnseval.py 2023-02-01 13:35:46.000000000 +0100
+++ new/dnsdiag-2.5.0/dnseval.py 2024-06-17 23:12:23.000000000 +0200
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
#
-# Copyright (c) 2016-2023, Babak Farrokhi
+# Copyright (c) 2016-2024, Babak Farrokhi
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -63,8 +63,8 @@
-H --doh Use HTTPS as transport protols (DoH)
-p --port DNS server port number (default: 53 for TCP/UDP and 853 for TLS)
-S --srcip Query source IP address
- -e --edns Disable EDNS0 (default: Enabled)
- -D --dnssec Enable 'DNSSEC desired' flag in requests.
+ -e --edns Enable EDNS0
+ -D --dnssec Enable 'DNSSEC desired' (DO flag) in requests
-C --color Print colorful output
-v --verbose Print actual dns response
""" % (__progname__, __version__, __progname__))
@@ -92,7 +92,7 @@
inputfilename = None
fromfile = False
json_output = False
- use_edns = True
+ use_edns = False
want_dnssec = False
force_miss = False
verbose = False
@@ -100,9 +100,9 @@
qname = 'wikipedia.org'
try:
- opts, args = getopt.getopt(sys.argv[1:], "hf:c:t:w:S:TevCmXHDj:",
+ opts, args = getopt.getopt(sys.argv[1:], "hf:c:t:w:S:TevCmXHDj:p:",
["help", "file=", "count=", "type=", "wait=", "json=", "tcp", "edns", "verbose",
- "color", "cache-miss", "srcip=", "tls", "doh", "dnssec"])
+ "color", "cache-miss", "srcip=", "tls", "doh", "dnssec", "port="])
except getopt.GetoptError as err:
print(err)
usage()
@@ -134,19 +134,20 @@
json_output = True
json_filename = a
elif o in ("-e", "--edns"):
- use_edns = False
+ use_edns = True
elif o in ("-D", "--dnssec"):
want_dnssec = True
+ use_edns = True # implied
elif o in ("-C", "--color"):
color_mode = True
elif o in ("-v", "--verbose"):
verbose = True
elif o in ("-X", "--tls"):
proto = PROTO_TLS
- dst_port = 853 # default for DoT, unless overriden using -p
+ dst_port = 853 # default for DoT, unless overridden using -p
elif o in ("-H", "--doh"):
proto = PROTO_HTTPS
- dst_port = 443 # default for DoH, unless overriden using -p
+ dst_port = 443 # default for DoH, unless overridden using -p
elif o in ("-p", "--port"):
dst_port = int(a)
@@ -154,6 +155,11 @@
print("Invalid option: %s" % o)
usage()
+ # validate RR type
+ if not util.dns.valid_rdatatype(rdatatype):
+ print('Error: Invalid record type "%s" ' % rdatatype)
+ sys.exit(1)
+
color = Colors(color_mode)
try:
@@ -173,7 +179,7 @@
f = dns.resolver.get_default_resolver().nameservers
if len(f) == 0:
- print("No nameserver specified")
+ print("Error: No nameserver specified")
f = [name.strip() for name in f] # remove annoying blanks
f = [x for x in f if not x.startswith('#') and len(x)] # remove comments and empty entries
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnsdiag-2.1.0/dnsping.py new/dnsdiag-2.5.0/dnsping.py
--- old/dnsdiag-2.1.0/dnsping.py 2023-02-01 14:12:27.000000000 +0100
+++ new/dnsdiag-2.5.0/dnsping.py 2024-06-18 15:37:52.000000000 +0200
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
#
-# Copyright (c) 2016-2023, Babak Farrokhi
+# Copyright (c) 2016-2024, Babak Farrokhi
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -33,12 +33,13 @@
import socket
import sys
import time
+import httpx
from statistics import stdev
import dns.flags
import dns.resolver
-import requests
+import util.dns
from util.dns import PROTO_UDP, PROTO_TCP, PROTO_TLS, PROTO_HTTPS, proto_to_text, unsupported_feature, random_string
from util.shared import __version__
@@ -50,7 +51,8 @@
def usage():
print("""%s version %s
-usage: %s [-46DeFhqTvX] [-i interval] [-s server] [-p port] [-P port] [-S address] [-c count] [-t type] [-w wait] hostname
+usage: %s [-46aDeEFhLmqnrvTxXH] [-i interval] [-w wait] [-p dst_port] [-P src_port] [-S src_ip]
+ %s [-c count] [-t qtype] [-C class] [-s server] hostname
-h --help Show this help
-q --quiet Quiet
@@ -70,10 +72,16 @@
-w --wait Maximum wait time for a reply (default: 2 seconds)
-i --interval Time between each request (default: 1 seconds)
-t --type DNS request record type (default: A)
- -e --edns Disable EDNS0 (default: Enabled)
+ -L --ttl Display response TTL (if present)
+ -C --class DNS request record class (default: IN)
+ -a --answer Display first matching answer in rdata, if applicable
+ -e --edns Enable EDNS0 and set
+ -E --ede Display EDE messages when available
+ -n --nsid Enable NSID bit to find out identification of the resolver. Implies EDNS.
-D --dnssec Enable 'DNSSEC desired' flag in requests. Implies EDNS.
-F --flags Display response flags
-""" % (__progname__, __version__, __progname__))
+ -x --expert Display extra information. Implies --ttl --flags --ede.
+""" % (__progname__, __version__, __progname__, ' ' * len(__progname__)))
sys.exit(0)
@@ -92,6 +100,12 @@
shutdown = True # pressed once, exit gracefully
+def print_stderr(s, should_die):
+ print(s, file=sys.stderr, flush=True)
+ if should_die:
+ sys.exit(1)
+
+
def validate_server_address(dnsserver, address_family):
"""checks if we have a valid dns server address and resolve if it is a hostname"""
@@ -101,8 +115,7 @@
try:
dnsserver = socket.getaddrinfo(dnsserver, port=None, family=address_family)[1][4][0]
except OSError:
- print('Error: cannot resolve hostname:', dnsserver, file=sys.stderr, flush=True)
- sys.exit(1)
+ print_stderr('Error: cannot resolve hostname: %s' % dnsserver, True)
return dnsserver
@@ -114,32 +127,38 @@
# defaults
rdatatype = 'A'
+ rdata_class = dns.rdataclass.from_text('IN')
count = 10
timeout = 2
interval = 1
quiet = False
verbose = False
show_flags = False
+ show_ede = False
dnsserver = None # do not try to use system resolver by default
dst_port = 53 # default for UDP and TCP
src_port = 0
src_ip = None
proto = PROTO_UDP
- use_edns = True
+ use_edns = False
+ want_nsid = False
want_dnssec = False
+ show_ttl = False
force_miss = False
+ show_answer = False
request_flags = dns.flags.from_text('RD')
af = socket.AF_INET
qname = 'wikipedia.org'
try:
- opts, args = getopt.getopt(sys.argv[1:], "qhc:s:t:w:i:vp:P:S:T46meDFXHr",
+ opts, args = getopt.getopt(sys.argv[1:], "qhc:s:t:w:i:vp:P:S:T46meDFXHrnEC:Lxa",
["help", "count=", "server=", "quiet", "type=", "wait=", "interval=", "verbose",
"port=", "srcip=", "tcp", "ipv4", "ipv6", "cache-miss", "srcport=", "edns",
- "dnssec", "flags", "norecurse", "tls", "doh"])
+ "dnssec", "flags", "norecurse", "tls", "doh", "nsid", "ede", "class=", "ttl",
+ "expert", "answer"])
except getopt.GetoptError as err:
# print help information and exit:
- print(err, file=sys.stderr) # will print something like "option -a not recognized"
+ print_stderr(err, False) # will print something like "option -a not recognized"
usage()
if args and len(args) == 1:
@@ -151,7 +170,10 @@
if o in ("-h", "--help"):
usage()
elif o in ("-c", "--count"):
- count = abs(int(a))
+ if a.isdigit():
+ count = abs(int(a))
+ else:
+ print_stderr("Invalid count of requests: %s" % a, True)
elif o in ("-v", "--verbose"):
verbose = True
elif o in ("-s", "--server"):
@@ -161,38 +183,58 @@
verbose = False
elif o in ("-w", "--wait"):
timeout = int(a)
+ elif o in ("-a", "--answer"):
+ show_answer = True
+ elif o in ("-x", "--expert"):
+ show_flags = True
+ show_ede = True
+ show_ttl = True
elif o in ("-m", "--cache-miss"):
force_miss = True
elif o in ("-i", "--interval"):
interval = float(a)
+ elif o in ("-L", "--ttl"):
+ show_ttl = True
elif o in ("-t", "--type"):
rdatatype = a
+ elif o in ("-C", "--class"):
+ try:
+ rdata_class = dns.rdataclass.from_text(a)
+ except dns.rdataclass.UnknownRdataclass:
+ print_stderr("Invalid RR class: %s" % a, True)
+
elif o in ("-T", "--tcp"):
proto = PROTO_TCP
elif o in ("-X", "--tls"):
proto = PROTO_TLS
- dst_port = 853 # default for DoT, unless overriden using -p
+ dst_port = 853 # default for DoT, unless overridden using -p
elif o in ("-H", "--doh"):
proto = PROTO_HTTPS
- dst_port = 443 # default for DoH, unless overriden using -p
+ dst_port = 443 # default for DoH, unless overridden using -p
elif o in ("-4", "--ipv4"):
af = socket.AF_INET
elif o in ("-6", "--ipv6"):
af = socket.AF_INET6
elif o in ("-e", "--edns"):
- use_edns = False
+ use_edns = True
+ elif o in ("-n", "--nsid"):
+ use_edns = True # required
+ want_nsid = True
elif o in ("-r", "--norecurse"):
request_flags = dns.flags.from_text('')
elif o in ("-D", "--dnssec"):
+ use_edns = True # required
want_dnssec = True
elif o in ("-F", "--flags"):
show_flags = True
+ elif o in ("-E", "--ede"):
+ show_ede = True
elif o in ("-p", "--port"):
dst_port = int(a)
elif o in ("-P", "--srcport"):
src_port = int(a)
- if src_port < 1024:
- print("WARNING: Source ports below 1024 are only available to superuser", flush=True)
+ if src_port < 1024 and not quiet:
+ print_stderr("WARNING: Source ports below 1024 are only available to superuser", False)
elif o in ("-S", "--srcip"):
src_ip = a
else:
@@ -208,9 +250,13 @@
response_time = []
i = 0
- print("%s DNS: %s:%d, hostname: %s, proto: %s, rdatatype: %s, flags: %s" %
- (__progname__, dnsserver, dst_port, qname, proto_to_text(proto), rdatatype,
- dns.flags.to_text(request_flags)), flush=True)
+ # validate RR type
+ if not util.dns.valid_rdatatype(rdatatype):
+ print_stderr('Error: Invalid record type: %s ' % rdatatype, True)
+
+ print("%s DNS: %s:%d, hostname: %s, proto: %s, class: %s, type: %s, flags: [%s]" %
+ (__progname__, dnsserver, dst_port, qname, proto_to_text(proto), dns.rdataclass.to_text(rdata_class),
+ rdatatype, dns.flags.to_text(request_flags)), flush=True)
while not shutdown:
@@ -225,12 +271,16 @@
fqdn = qname
if use_edns:
- query = dns.message.make_query(fqdn, rdatatype, dns.rdataclass.IN, flags=request_flags,
- use_edns=True, want_dnssec=want_dnssec,
- ednsflags=dns.flags.EDNSFlag.DO, payload=8192)
+ edns_options = []
+ if want_nsid:
+ edns_options.append(dns.edns.GenericOption(dns.edns.NSID, ''))
+
+ query = dns.message.make_query(fqdn, rdatatype, rdata_class, flags=request_flags,
+ use_edns=True, want_dnssec=want_dnssec, payload=1232,
+ options=edns_options)
else:
- query = dns.message.make_query(fqdn, rdatatype, dns.rdataclass.IN, flags=request_flags,
- use_edns=False, want_dnssec=want_dnssec)
+ query = dns.message.make_query(fqdn, rdatatype, rdata_class, flags=request_flags,
+ use_edns=False, want_dnssec=False)
try:
stime = time.perf_counter()
@@ -257,35 +307,71 @@
etime = time.perf_counter()
except dns.resolver.NoNameservers as e:
if not quiet:
- print("No response to DNS request", file=sys.stderr, flush=True)
+ print_stderr("No response to DNS request", False)
if verbose:
- print("error:", e, file=sys.stderr, flush=True)
+ print_stderr("error: %s" % e, False)
sys.exit(1)
- except (requests.exceptions.ConnectTimeout, dns.exception.Timeout):
+ except (httpx.ConnectTimeout, dns.exception.Timeout):
if not quiet:
print("Request timeout", flush=True)
- except requests.exceptions.ReadTimeout:
+ except httpx.ReadTimeout:
if not quiet:
print("Read timeout", flush=True)
+ except PermissionError:
+ if not quiet:
+ print_stderr("Permission denied", True)
+ sys.exit(1)
+ except OSError as e:
+ if not quiet:
+ print_stderr("%s" % e, True)
+ sys.exit(1)
except ValueError:
if not quiet:
- print("Invalid Response", flush=True)
+ print_stderr("Invalid Response", False)
continue
else:
# convert time to milliseconds, considering that
- # time property is retruned differently by query.https
+ # time property is returned differently by query.https
if type(answers.time) is datetime.timedelta:
elapsed = answers.time.total_seconds() * 1000
else:
elapsed = answers.time * 1000
response_time.append(elapsed)
if not quiet:
+ extras = ""
+ extras += " %s" % dns.rcode.to_text(answers.rcode()) # add response code
+
+ if show_ttl:
+ if answers.answer:
+ ans_ttl = str(answers.answer[0].ttl)
+ extras += " [TTL=%-4s]" % ans_ttl
+
if show_flags:
- flags = " [%s] %s" % (dns.flags.to_text(answers.flags), dns.rcode.to_text(answers.rcode()))
- else:
- flags = ""
- print("%d bytes from %s: seq=%-3d time=%-7.3f ms%s" % (
- len(answers.to_wire()), dnsserver, i, elapsed, flags), flush=True)
+ ans_flags = dns.flags.to_text(answers.flags)
+ edns_flags = dns.flags.edns_to_text(answers.ednsflags)
+ extras += " [%s]" % " ".join([ans_flags, edns_flags]).rstrip(' ') # show both regular + edns flags
+
+ if want_nsid:
+ for ans_opt in answers.options:
+ if ans_opt.otype == dns.edns.OptionType.NSID:
+ nsid_val = ans_opt.nsid
+ extras += " [ID: %s]" % nsid_val.decode("utf-8")
+
+ if show_ede:
+ for ans_opt in answers.options: # EDE response is optional, but print if there is one
+ if ans_opt.otype == dns.edns.EDE:
+ extras += " [EDE %d: %s]" % (ans_opt.code, ans_opt.text)
+
+ if show_answer: # The answer should be displayed at the rightmost
+ for ans in answers.answer:
+ if ans.rdtype == dns.rdatatype.from_text(rdatatype): # is this the answer to our question?
+ # extras += " [%s]" % ans[0]
+ extras += " [RDATA: %s]" % ans[0]
+ break
+
+ print("%-3d bytes from %s: seq=%-3d time=%-7.3f ms %s" % (
+ len(answers.to_wire()), dnsserver, i, elapsed, extras), flush=True)
+
if verbose:
print(answers.to_text(), flush=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnsdiag-2.1.0/dnstraceroute.py new/dnsdiag-2.5.0/dnstraceroute.py
--- old/dnsdiag-2.1.0/dnstraceroute.py 2023-02-01 13:35:46.000000000 +0100
+++ new/dnsdiag-2.5.0/dnstraceroute.py 2024-06-17 19:40:34.000000000 +0200
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
#
-# Copyright (c) 2016-2023, Babak Farrokhi
+# Copyright (c) 2016-2024, Babak Farrokhi
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -72,7 +72,7 @@
-w --wait Maximum wait time for a reply (default: 2)
-t --type DNS request record type (default: A)
-C --color Print colorful output
- -e --edns Disable EDNS0 (Default: Enabled)
+ -e --edns Enable EDNS0 (Default: Disabled)
""" % (__progname__, __version__, __progname__))
sys.exit()
@@ -110,7 +110,7 @@
print(" %s[*]%s No expert hint available for this trace" % (color.G, color.N))
-def ping(qname, server, rdtype, proto, port, ttl, timeout, src_ip, use_edns=False):
+def ping(qname, server, rdtype, proto, port, ttl, timeout, src_ip, use_edns):
reached = False
resp_time = None
@@ -151,7 +151,7 @@
as_lookup = False
expert_mode = False
should_resolve = True
- use_edns = True
+ use_edns = False
color_mode = False
args = None
@@ -197,12 +197,17 @@
elif o in ("-a", "--asn"):
as_lookup = True
elif o in ("-e", "--edns"):
- use_edns = False
+ use_edns = True
else:
usage()
color = Colors(color_mode)
+ # validate RR type
+ if not util.dns.valid_rdatatype(rdatatype):
+ print('Error: Invalid record type "%s" ' % rdatatype)
+ sys.exit(1)
+
# Use system DNS server if parameter is not specified
# remember not all systems have /etc/resolv.conf (i.e. Android)
if dnsserver is None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnsdiag-2.1.0/public-servers.txt new/dnsdiag-2.5.0/public-servers.txt
--- old/dnsdiag-2.1.0/public-servers.txt 2020-03-08 20:01:12.000000000 +0100
+++ new/dnsdiag-2.5.0/public-servers.txt 2024-06-12 22:28:59.000000000 +0200
@@ -1,24 +1,24 @@
-#Cloudflare
+## Cloudflare
1.0.0.1
1.1.1.1
2606:4700:4700::1001
2606:4700:4700::1111
-#SafeDNS
+## SafeDNS
195.46.39.39
195.46.39.40
-#OpenDNS
+## OpenDNS
208.67.220.220
208.67.222.222
2620:0:ccc::2
2620:0:ccd::2
-#DYN DNS
+## DYN DNS
216.146.35.35
216.146.36.36
-#Level3
+## Level3
209.244.0.3
209.244.0.4
4.2.2.1
@@ -27,25 +27,59 @@
4.2.2.4
4.2.2.5
-#freenom world
+## Freenom World
80.80.80.80
80.80.81.81
-#Google
+## Google
8.8.4.4
8.8.8.8
2001:4860:4860::8844
2001:4860:4860::8888
-#PCH's Quad9
+## Quad9
9.9.9.9
-2620:fe::fe
149.112.112.112
+2620:fe::fe
-#Verisign
+## Verisign
64.6.64.6
64.6.65.6
+2620:74:1b::1:1
+2620:74:1c::2:2
-#Comodo
+## Comodo
8.26.56.26
8.20.247.20
+
+## DNS0.eu
+193.110.81.0
+185.253.5.0
+2a0f:fc80::
+2a0f:fc81::
+
+## Hurricane Electric
+74.82.42.42
+2001:470:20::2
+
+## Yandex.DNS
+77.88.8.88
+77.88.8.2
+2a02:6b8::feed:bad
+2a02:6b8:0:1::feed:bad
+
+## DNS4all
+194.0.5.3
+2001:678:8::3
+
+## AdGuard DNS
+94.140.14.14
+94.140.15.15
+2a10:50c0::ad1:ff
+2a10:50c0::ad2:ff
+
+## Control D
+76.76.2.11
+76.76.10.11
+2606:1a40::11
+2606:1a40:1::11
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnsdiag-2.1.0/public-v4.txt new/dnsdiag-2.5.0/public-v4.txt
--- old/dnsdiag-2.1.0/public-v4.txt 2021-04-03 18:56:18.000000000 +0200
+++ new/dnsdiag-2.5.0/public-v4.txt 2024-06-18 15:30:26.000000000 +0200
@@ -1,19 +1,20 @@
-#Cloudflare
+## Cloudflare
1.0.0.1
1.1.1.1
-#SafeDNS
+## SafeDNS
195.46.39.39
195.46.39.40
-#OpenDNS
+## OpenDNS
208.67.220.220
208.67.222.222
-#DYN DNS
+## DYN DNS
216.146.35.35
+216.146.36.36
-#Level3
+## Level3
209.244.0.3
209.244.0.4
4.2.2.1
@@ -22,14 +23,47 @@
4.2.2.4
4.2.2.5
-#freenom world
+## Freenom World
80.80.80.80
80.80.81.81
-#Google
+## Google
8.8.4.4
8.8.8.8
-#PCH's Quad9
+## Quad9
9.9.9.9
149.112.112.112
+
+## Verisign
+64.6.64.6
+64.6.65.6
+
+## Comodo
+8.26.56.26
+8.20.247.20
+
+## DNS0.eu
+193.110.81.0
+185.253.5.0
+
+## Hurricane Electric
+74.82.42.42
+
+## Yandex.DNS
+77.88.8.88
+77.88.8.2
+
+## DNS4all
+194.0.5.3
+
+## AdGuard DNS
+94.140.14.14
+94.140.15.15
+
+## Control D
+76.76.2.11
+76.76.10.11
+
+## Wikimedia DNS (Formerly Wikidough)
+185.71.138.138
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnsdiag-2.1.0/setup.py new/dnsdiag-2.5.0/setup.py
--- old/dnsdiag-2.1.0/setup.py 2023-02-01 13:44:12.000000000 +0100
+++ new/dnsdiag-2.5.0/setup.py 2024-05-31 14:46:03.000000000 +0200
@@ -6,16 +6,18 @@
version=__version__,
packages=find_packages(),
scripts=["dnseval.py", "dnsping.py", "dnstraceroute.py"],
- install_requires=['dnspython>=2.3.0', 'cymruwhois>=1.6', 'requests>=2.28.2', 'requests-toolbelt>=0.9.1'],
+ install_requires=['dnspython>=2.6.1', 'cymruwhois>=1.6', 'httpx>=0.27.0', 'cryptography>=42.0.7', 'h2>=4.1.0'],
classifiers=[
"Topic :: System :: Networking",
"Environment :: Console",
"Intended Audience :: Developers",
"License :: OSI Approved :: BSD License",
- "Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
+ "Programming Language :: Python :: 3.10",
+ "Programming Language :: Python :: 3.11",
+ "Programming Language :: Python :: 3.12",
"Programming Language :: Python :: Implementation :: PyPy",
"Topic :: Internet :: Name Service (DNS)",
"Development Status :: 5 - Production/Stable",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnsdiag-2.1.0/util/dns.py new/dnsdiag-2.5.0/util/dns.py
--- old/dnsdiag-2.1.0/util/dns.py 2023-02-01 13:36:24.000000000 +0100
+++ new/dnsdiag-2.5.0/util/dns.py 2024-06-18 08:09:47.000000000 +0200
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
#
-# Copyright (c) 2016-2023, Babak Farrokhi
+# Copyright (c) 2016-2024, Babak Farrokhi
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -31,12 +31,12 @@
import sys
from statistics import stdev
+import httpx
import dns.flags
import dns.message
import dns.query
import dns.rcode
import dns.rdataclass
-import requests.exceptions
import string
shutdown = False
@@ -105,10 +105,9 @@
fqdn = qname
if use_edns:
- query = dns.message.make_query(fqdn, rdtype, dns.rdataclass.IN, use_edns, want_dnssec,
- ednsflags=dns.flags.edns_from_text('DO'), payload=8192)
+ query = dns.message.make_query(fqdn, rdtype, dns.rdataclass.IN, use_edns, want_dnssec, payload=1232)
else:
- query = dns.message.make_query(fqdn, rdtype, dns.rdataclass.IN, use_edns, want_dnssec)
+ query = dns.message.make_query(fqdn, rdtype, dns.rdataclass.IN, use_edns=False, want_dnssec=False)
try:
if proto is PROTO_UDP:
@@ -127,19 +126,21 @@
else:
unsupported_feature()
- except (requests.exceptions.ConnectTimeout, requests.exceptions.ReadTimeout,
- requests.exceptions.ConnectionError):
+ except (httpx.ConnectTimeout, httpx.ReadTimeout,
+ httpx.ConnectError):
raise ConnectionError('Connection failed')
except ValueError:
retval.rcode_text = "Invalid Response"
break
except dns.exception.Timeout:
break
- except OSError:
+ except OSError as e:
if socket_ttl: # this is an acceptable error while doing traceroute
break
+ print("error: %s"% e.strerror, file=sys.stderr, flush=True)
+ raise OSError(e)
except Exception as e:
- print(e)
+ print("error: %s"% e, file=sys.stderr, flush=True)
break
else:
# convert time to milliseconds, considering that
@@ -192,12 +193,21 @@
def unsupported_feature():
- print("Error: You have an older version of Python interpreter.")
+ print("Error: You have an unsupported version of Python interpreter dnspython library.")
print(" Some features such as DoT and DoH are not available. You should upgrade")
- print(" the Python interpreter to at least 3.6 and reinstall dependencies.")
+ print(" the Python interpreter to at least 3.7 and reinstall dependencies.")
sys.exit(127)
+def valid_rdatatype(rtype):
+ # validate RR type
+ try:
+ _ = dns.rdatatype.from_text(rtype)
+ except dns.rdatatype.UnknownRdatatype:
+ return False
+ return True
+
+
def flags_to_text(flags):
# Standard DNS flags
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnsdiag-2.1.0/util/shared.py new/dnsdiag-2.5.0/util/shared.py
--- old/dnsdiag-2.1.0/util/shared.py 2023-02-01 13:36:24.000000000 +0100
+++ new/dnsdiag-2.5.0/util/shared.py 2024-06-18 08:15:34.000000000 +0200
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
#
-# Copyright (c) 2016-2023, Babak Farrokhi
+# Copyright (c) 2016-2024, Babak Farrokhi
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -25,7 +25,7 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-__version__ = '2.1.0'
+__version__ = '2.5.0'
class Colors(object):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnsdiag-2.1.0/util/whois.py new/dnsdiag-2.5.0/util/whois.py
--- old/dnsdiag-2.1.0/util/whois.py 2023-02-01 13:36:24.000000000 +0100
+++ new/dnsdiag-2.5.0/util/whois.py 2024-05-31 14:28:27.000000000 +0200
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
#
-# Copyright (c) 2016-2023, Babak Farrokhi
+# Copyright (c) 2016-2024, Babak Farrokhi
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package git-cola for openSUSE:Factory checked in at 2024-07-01 11:20:26
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/git-cola (Old)
and /work/SRC/openSUSE:Factory/.git-cola.new.18349 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "git-cola"
Mon Jul 1 11:20:26 2024 rev:50 rq:1184041 version:4.8.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/git-cola/git-cola.changes 2024-05-06 17:53:51.616413656 +0200
+++ /work/SRC/openSUSE:Factory/.git-cola.new.18349/git-cola.changes 2024-07-01 11:21:00.880468868 +0200
@@ -1,0 +2,21 @@
+Sat Jun 29 20:28:50 UTC 2024 - Dirk Müller <dmueller(a)suse.com>
+
+- update to 4.8.0:
+ * The Rebase editor is now aware of the drop, break, label,
+ merge and reset commands that were added in recent versions
+ of Git.
+ * Desktop notifications can now be enabled when pushing remotes
+ by enabling the "Notify on Push" option in the preferences.
+ * Faster and easier commit hash copying in DAG. Left-clicking
+ on the Commit ID will now copy it directly into the clipboard
+ without any further action.
+ * "Grab File from Parent Commit" actions have been added to the
+ DAG.
+ * The Unstage Selected action was added to the context menu for
+ unmerged files.
+ * git cola rebase now provides a --rebase-merges option and
+ passes the same option to git rebase when Git v1.18.0 or
+ newer is detected.
+ * Pre-commits hooks were updated.
+
+-------------------------------------------------------------------
Old:
----
v4.7.1.tar.gz
New:
----
v4.8.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ git-cola.spec ++++++
--- /var/tmp/diff_new_pack.JP2WDx/_old 2024-07-01 11:21:01.552493350 +0200
+++ /var/tmp/diff_new_pack.JP2WDx/_new 2024-07-01 11:21:01.552493350 +0200
@@ -18,7 +18,7 @@
Name: git-cola
-Version: 4.7.1
+Version: 4.8.0
Release: 0
Summary: A GUI for Git
License: GPL-2.0-or-later
++++++ v4.7.1.tar.gz -> v4.8.0.tar.gz ++++++
++++ 70019 lines of diff (skipped)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-blosc2 for openSUSE:Factory checked in at 2024-07-01 11:20:21
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-blosc2 (Old)
and /work/SRC/openSUSE:Factory/.python-blosc2.new.18349 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-blosc2"
Mon Jul 1 11:20:21 2024 rev:11 rq:1184030 version:2.7.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-blosc2/python-blosc2.changes 2024-04-29 08:55:42.630763970 +0200
+++ /work/SRC/openSUSE:Factory/.python-blosc2.new.18349/python-blosc2.changes 2024-07-01 11:20:55.240263397 +0200
@@ -1,0 +2,8 @@
+Sat Jun 29 19:32:43 UTC 2024 - Dirk Müller <dmueller(a)suse.com>
+
+- update to 2.7.0:
+ * Updated to latest C-Blosc2 2.15.0.
+ * Deprecated `LazyExpr.evaluate()`.
+ * Fixed `_check_rc` function.
+
+-------------------------------------------------------------------
Old:
----
blosc2-2.6.2.tar.gz
New:
----
blosc2-2.7.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-blosc2.spec ++++++
--- /var/tmp/diff_new_pack.ElrmuP/_old 2024-07-01 11:20:56.768319064 +0200
+++ /var/tmp/diff_new_pack.ElrmuP/_new 2024-07-01 11:20:56.776319355 +0200
@@ -17,7 +17,7 @@
Name: python-blosc2
-Version: 2.6.2
+Version: 2.7.0
Release: 0
Summary: Python wrapper for the C-Blosc2 library
License: BSD-3-Clause
++++++ blosc2-2.6.2.tar.gz -> blosc2-2.7.0.tar.gz ++++++
++++ 169637 lines of diff (skipped)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package lite-xl-plugin-manager for openSUSE:Factory checked in at 2024-07-01 11:20:18
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/lite-xl-plugin-manager (Old)
and /work/SRC/openSUSE:Factory/.lite-xl-plugin-manager.new.18349 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "lite-xl-plugin-manager"
Mon Jul 1 11:20:18 2024 rev:14 rq:1184028 version:1.2.9+git20240622.1cf4f05
Changes:
--------
--- /work/SRC/openSUSE:Factory/lite-xl-plugin-manager/lite-xl-plugin-manager.changes 2024-06-05 17:40:57.414953120 +0200
+++ /work/SRC/openSUSE:Factory/.lite-xl-plugin-manager.new.18349/lite-xl-plugin-manager.changes 2024-07-01 11:20:53.460198549 +0200
@@ -1,0 +2,17 @@
+Sat Jun 22 19:04:09 UTC 2024 - scott.bradnick(a)suse.com
+
+- Update to version 1.2.9+git20240622.1cf4f05:
+ * Fixing an error with libzip on newer gcc versions.
+ * windows:fix argument escaping for cmd.exe (#117)
+
+-------------------------------------------------------------------
+Tue Jun 11 15:59:27 UTC 2024 - scott.bradnick(a)suse.com
+
+- Update to version 1.2.9+git20240609.d737011:
+ * ci: parallelize most build processes (#115)
+ * Added in specific check for install to guard against "*".
+ * Fix for Guldo's new issue.
+ * Added in fallback to fetch everything if we can't find a specific object.
+ * Relaxed detection of datadir and core plugins to probably fix #112.
+
+-------------------------------------------------------------------
Old:
----
lite-xl-plugin-manager-1.2.9+git20240603.5343f48.tar.gz
New:
----
lite-xl-plugin-manager-1.2.9+git20240622.1cf4f05.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ lite-xl-plugin-manager.spec ++++++
--- /var/tmp/diff_new_pack.Y8Xqrr/_old 2024-07-01 11:20:54.012218659 +0200
+++ /var/tmp/diff_new_pack.Y8Xqrr/_new 2024-07-01 11:20:54.016218805 +0200
@@ -17,7 +17,7 @@
%define baseprogramname lite-xl
Name: lite-xl-plugin-manager
-Version: 1.2.9+git20240603.5343f48
+Version: 1.2.9+git20240622.1cf4f05
Release: 0
Summary: A %{baseprogramname} plugin manager
%if 0%{?suse_version} > 1500
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.Y8Xqrr/_old 2024-07-01 11:20:54.068220699 +0200
+++ /var/tmp/diff_new_pack.Y8Xqrr/_new 2024-07-01 11:20:54.072220845 +0200
@@ -1,6 +1,6 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/lite-xl/lite-xl-plugin-manager</param>
- <param name="changesrevision">5343f4820b5acf49da65b1ea635d2f42d0292c16</param></service></servicedata>
+ <param name="changesrevision">1cf4f05df305513e6b7907513bd69fe05c276ce9</param></service></servicedata>
(No newline at EOF)
++++++ lite-xl-plugin-manager-1.2.9+git20240603.5343f48.tar.gz -> lite-xl-plugin-manager-1.2.9+git20240622.1cf4f05.tar.gz ++++++
/work/SRC/openSUSE:Factory/lite-xl-plugin-manager/lite-xl-plugin-manager-1.2.9+git20240603.5343f48.tar.gz /work/SRC/openSUSE:Factory/.lite-xl-plugin-manager.new.18349/lite-xl-plugin-manager-1.2.9+git20240622.1cf4f05.tar.gz differ: char 12, line 1
++++++ lite-xl-plugin-manager.obsinfo ++++++
--- /var/tmp/diff_new_pack.Y8Xqrr/_old 2024-07-01 11:20:54.112222302 +0200
+++ /var/tmp/diff_new_pack.Y8Xqrr/_new 2024-07-01 11:20:54.116222448 +0200
@@ -1,5 +1,5 @@
name: lite-xl-plugin-manager
-version: 1.2.9+git20240603.5343f48
-mtime: 1717446308
-commit: 5343f4820b5acf49da65b1ea635d2f42d0292c16
+version: 1.2.9+git20240622.1cf4f05
+mtime: 1719071097
+commit: 1cf4f05df305513e6b7907513bd69fe05c276ce9
++++++ lpm.c.diff ++++++
--- /var/tmp/diff_new_pack.Y8Xqrr/_old 2024-07-01 11:20:54.132223031 +0200
+++ /var/tmp/diff_new_pack.Y8Xqrr/_new 2024-07-01 11:20:54.136223176 +0200
@@ -5,7 +5,7 @@
#ifndef LPM_VERSION
- #define LPM_VERSION "unknown"
-+ #define LPM_VERSION "1.2.9+git20240603.5343f48"
++ #define LPM_VERSION "1.2.9+git20240622.1cf4f05"
#endif
#ifndef LPM_DEFAULT_REPOSITORY
#define LPM_DEFAULT_REPOSITORY "https://github.com/lite-xl/lite-xl-plugin-manager.git:latest"
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-google-api-core for openSUSE:Factory checked in at 2024-07-01 11:20:20
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-google-api-core (Old)
and /work/SRC/openSUSE:Factory/.python-google-api-core.new.18349 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-google-api-core"
Mon Jul 1 11:20:20 2024 rev:33 rq:1184029 version:2.19.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-google-api-core/python-google-api-core.changes 2024-05-17 20:06:10.501576885 +0200
+++ /work/SRC/openSUSE:Factory/.python-google-api-core.new.18349/python-google-api-core.changes 2024-07-01 11:20:54.280228422 +0200
@@ -1,0 +2,7 @@
+Sat Jun 29 19:31:29 UTC 2024 - Dirk Müller <dmueller(a)suse.com>
+
+- update to 2.19.1:
+ * Add support for protobuf 5.x
+ * Ignore unknown fields in rest streaming.
+
+-------------------------------------------------------------------
Old:
----
google-api-core-2.19.0.tar.gz
New:
----
google-api-core-2.19.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-google-api-core.spec ++++++
--- /var/tmp/diff_new_pack.bpNaz0/_old 2024-07-01 11:20:54.748245472 +0200
+++ /var/tmp/diff_new_pack.bpNaz0/_new 2024-07-01 11:20:54.752245618 +0200
@@ -26,7 +26,7 @@
%endif
%{?sle15_python_module_pythons}
Name: python-google-api-core
-Version: 2.19.0
+Version: 2.19.1
Release: 0
Summary: Google API client core library
License: Apache-2.0
++++++ google-api-core-2.19.0.tar.gz -> google-api-core-2.19.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/google-api-core-2.19.0/PKG-INFO new/google-api-core-2.19.1/PKG-INFO
--- old/google-api-core-2.19.0/PKG-INFO 2024-04-30 19:02:12.001921400 +0200
+++ new/google-api-core-2.19.1/PKG-INFO 2024-06-24 18:51:14.210885800 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: google-api-core
-Version: 2.19.0
+Version: 2.19.1
Summary: Google API client core library
Home-page: https://github.com/googleapis/python-api-core
Author: Google LLC
@@ -23,7 +23,7 @@
Requires-Python: >=3.7
License-File: LICENSE
Requires-Dist: googleapis-common-protos<2.0.dev0,>=1.56.2
-Requires-Dist: protobuf!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0.dev0,>=3.19.5
+Requires-Dist: protobuf!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0,>=3.19.5
Requires-Dist: proto-plus<2.0.0dev,>=1.22.3
Requires-Dist: google-auth<3.0.dev0,>=2.14.1
Requires-Dist: requests<3.0.0.dev0,>=2.18.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/google-api-core-2.19.0/google/api_core/grpc_helpers_async.py new/google-api-core-2.19.1/google/api_core/grpc_helpers_async.py
--- old/google-api-core-2.19.0/google/api_core/grpc_helpers_async.py 2024-04-30 19:00:19.000000000 +0200
+++ new/google-api-core-2.19.1/google/api_core/grpc_helpers_async.py 2024-06-24 18:49:18.000000000 +0200
@@ -159,7 +159,6 @@
def _wrap_unary_errors(callable_):
"""Map errors for Unary-Unary async callables."""
- grpc_helpers._patch_callable_name(callable_)
@functools.wraps(callable_)
def error_remapped_callable(*args, **kwargs):
@@ -169,23 +168,13 @@
return error_remapped_callable
-def _wrap_stream_errors(callable_):
+def _wrap_stream_errors(callable_, wrapper_type):
"""Map errors for streaming RPC async callables."""
- grpc_helpers._patch_callable_name(callable_)
@functools.wraps(callable_)
async def error_remapped_callable(*args, **kwargs):
call = callable_(*args, **kwargs)
-
- if isinstance(call, aio.UnaryStreamCall):
- call = _WrappedUnaryStreamCall().with_call(call)
- elif isinstance(call, aio.StreamUnaryCall):
- call = _WrappedStreamUnaryCall().with_call(call)
- elif isinstance(call, aio.StreamStreamCall):
- call = _WrappedStreamStreamCall().with_call(call)
- else:
- raise TypeError("Unexpected type of call %s" % type(call))
-
+ call = wrapper_type().with_call(call)
await call.wait_for_connection()
return call
@@ -207,10 +196,16 @@
Returns: Callable: The wrapped gRPC callable.
"""
- if isinstance(callable_, aio.UnaryUnaryMultiCallable):
- return _wrap_unary_errors(callable_)
+ grpc_helpers._patch_callable_name(callable_)
+
+ if isinstance(callable_, aio.UnaryStreamMultiCallable):
+ return _wrap_stream_errors(callable_, _WrappedUnaryStreamCall)
+ elif isinstance(callable_, aio.StreamUnaryMultiCallable):
+ return _wrap_stream_errors(callable_, _WrappedStreamUnaryCall)
+ elif isinstance(callable_, aio.StreamStreamMultiCallable):
+ return _wrap_stream_errors(callable_, _WrappedStreamStreamCall)
else:
- return _wrap_stream_errors(callable_)
+ return _wrap_unary_errors(callable_)
def create_channel(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/google-api-core-2.19.0/google/api_core/operations_v1/__init__.py new/google-api-core-2.19.1/google/api_core/operations_v1/__init__.py
--- old/google-api-core-2.19.0/google/api_core/operations_v1/__init__.py 2024-04-30 19:00:19.000000000 +0200
+++ new/google-api-core-2.19.1/google/api_core/operations_v1/__init__.py 2024-06-24 18:49:18.000000000 +0200
@@ -14,7 +14,9 @@
"""Package for interacting with the google.longrunning.operations meta-API."""
-from google.api_core.operations_v1.abstract_operations_client import AbstractOperationsClient
+from google.api_core.operations_v1.abstract_operations_client import (
+ AbstractOperationsClient,
+)
from google.api_core.operations_v1.operations_async_client import OperationsAsyncClient
from google.api_core.operations_v1.operations_client import OperationsClient
from google.api_core.operations_v1.transports.rest import OperationsRestTransport
@@ -23,5 +25,5 @@
"AbstractOperationsClient",
"OperationsAsyncClient",
"OperationsClient",
- "OperationsRestTransport"
+ "OperationsRestTransport",
]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/google-api-core-2.19.0/google/api_core/operations_v1/transports/base.py new/google-api-core-2.19.1/google/api_core/operations_v1/transports/base.py
--- old/google-api-core-2.19.0/google/api_core/operations_v1/transports/base.py 2024-04-30 19:00:19.000000000 +0200
+++ new/google-api-core-2.19.1/google/api_core/operations_v1/transports/base.py 2024-06-24 18:49:18.000000000 +0200
@@ -45,7 +45,7 @@
self,
*,
host: str = DEFAULT_HOST,
- credentials: ga_credentials.Credentials = None,
+ credentials: Optional[ga_credentials.Credentials] = None,
credentials_file: Optional[str] = None,
scopes: Optional[Sequence[str]] = None,
quota_project_id: Optional[str] = None,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/google-api-core-2.19.0/google/api_core/operations_v1/transports/rest.py new/google-api-core-2.19.1/google/api_core/operations_v1/transports/rest.py
--- old/google-api-core-2.19.0/google/api_core/operations_v1/transports/rest.py 2024-04-30 19:00:19.000000000 +0200
+++ new/google-api-core-2.19.1/google/api_core/operations_v1/transports/rest.py 2024-06-24 18:49:18.000000000 +0200
@@ -29,9 +29,13 @@
from google.longrunning import operations_pb2 # type: ignore
from google.protobuf import empty_pb2 # type: ignore
from google.protobuf import json_format # type: ignore
+import google.protobuf
+
import grpc
from .base import DEFAULT_CLIENT_INFO as BASE_DEFAULT_CLIENT_INFO, OperationsTransport
+PROTOBUF_VERSION = google.protobuf.__version__
+
OptionalRetry = Union[retries.Retry, object]
DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(
@@ -66,7 +70,7 @@
self,
*,
host: str = "longrunning.googleapis.com",
- credentials: ga_credentials.Credentials = None,
+ credentials: Optional[ga_credentials.Credentials] = None,
credentials_file: Optional[str] = None,
scopes: Optional[Sequence[str]] = None,
client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None,
@@ -184,11 +188,7 @@
"google.longrunning.Operations.ListOperations"
]
- request_kwargs = json_format.MessageToDict(
- request,
- preserving_proto_field_name=True,
- including_default_value_fields=True,
- )
+ request_kwargs = self._convert_protobuf_message_to_dict(request)
transcoded_request = path_template.transcode(http_options, **request_kwargs)
uri = transcoded_request["uri"]
@@ -199,7 +199,6 @@
json_format.ParseDict(transcoded_request["query_params"], query_params_request)
query_params = json_format.MessageToDict(
query_params_request,
- including_default_value_fields=False,
preserving_proto_field_name=False,
use_integers_for_enums=False,
)
@@ -265,11 +264,7 @@
"google.longrunning.Operations.GetOperation"
]
- request_kwargs = json_format.MessageToDict(
- request,
- preserving_proto_field_name=True,
- including_default_value_fields=True,
- )
+ request_kwargs = self._convert_protobuf_message_to_dict(request)
transcoded_request = path_template.transcode(http_options, **request_kwargs)
uri = transcoded_request["uri"]
@@ -280,7 +275,6 @@
json_format.ParseDict(transcoded_request["query_params"], query_params_request)
query_params = json_format.MessageToDict(
query_params_request,
- including_default_value_fields=False,
preserving_proto_field_name=False,
use_integers_for_enums=False,
)
@@ -339,11 +333,7 @@
"google.longrunning.Operations.DeleteOperation"
]
- request_kwargs = json_format.MessageToDict(
- request,
- preserving_proto_field_name=True,
- including_default_value_fields=True,
- )
+ request_kwargs = self._convert_protobuf_message_to_dict(request)
transcoded_request = path_template.transcode(http_options, **request_kwargs)
uri = transcoded_request["uri"]
@@ -354,7 +344,6 @@
json_format.ParseDict(transcoded_request["query_params"], query_params_request)
query_params = json_format.MessageToDict(
query_params_request,
- including_default_value_fields=False,
preserving_proto_field_name=False,
use_integers_for_enums=False,
)
@@ -411,11 +400,7 @@
"google.longrunning.Operations.CancelOperation"
]
- request_kwargs = json_format.MessageToDict(
- request,
- preserving_proto_field_name=True,
- including_default_value_fields=True,
- )
+ request_kwargs = self._convert_protobuf_message_to_dict(request)
transcoded_request = path_template.transcode(http_options, **request_kwargs)
# Jsonify the request body
@@ -423,7 +408,6 @@
json_format.ParseDict(transcoded_request["body"], body_request)
body = json_format.MessageToDict(
body_request,
- including_default_value_fields=False,
preserving_proto_field_name=False,
use_integers_for_enums=False,
)
@@ -435,7 +419,6 @@
json_format.ParseDict(transcoded_request["query_params"], query_params_request)
query_params = json_format.MessageToDict(
query_params_request,
- including_default_value_fields=False,
preserving_proto_field_name=False,
use_integers_for_enums=False,
)
@@ -458,6 +441,38 @@
return empty_pb2.Empty()
+ def _convert_protobuf_message_to_dict(
+ self, message: google.protobuf.message.Message
+ ):
+ r"""Converts protobuf message to a dictionary.
+
+ When the dictionary is encoded to JSON, it conforms to proto3 JSON spec.
+
+ Args:
+ message(google.protobuf.message.Message): The protocol buffers message
+ instance to serialize.
+
+ Returns:
+ A dict representation of the protocol buffer message.
+ """
+ # For backwards compatibility with protobuf 3.x 4.x
+ # Remove once support for protobuf 3.x and 4.x is dropped
+ # https://github.com/googleapis/python-api-core/issues/643
+ if PROTOBUF_VERSION[0:2] in ["3.", "4."]:
+ result = json_format.MessageToDict(
+ message,
+ preserving_proto_field_name=True,
+ including_default_value_fields=True, # type: ignore # backward compatibility
+ )
+ else:
+ result = json_format.MessageToDict(
+ message,
+ preserving_proto_field_name=True,
+ always_print_fields_with_no_presence=True,
+ )
+
+ return result
+
@property
def list_operations(
self,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/google-api-core-2.19.0/google/api_core/rest_streaming.py new/google-api-core-2.19.1/google/api_core/rest_streaming.py
--- old/google-api-core-2.19.0/google/api_core/rest_streaming.py 2024-04-30 19:00:19.000000000 +0200
+++ new/google-api-core-2.19.1/google/api_core/rest_streaming.py 2024-06-24 18:49:18.000000000 +0200
@@ -118,7 +118,9 @@
def _grab(self):
# Add extra quotes to make json.loads happy.
if issubclass(self._response_message_cls, proto.Message):
- return self._response_message_cls.from_json(self._ready_objs.popleft())
+ return self._response_message_cls.from_json(
+ self._ready_objs.popleft(), ignore_unknown_fields=True
+ )
elif issubclass(self._response_message_cls, google.protobuf.message.Message):
return Parse(self._ready_objs.popleft(), self._response_message_cls())
else:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/google-api-core-2.19.0/google/api_core/version.py new/google-api-core-2.19.1/google/api_core/version.py
--- old/google-api-core-2.19.0/google/api_core/version.py 2024-04-30 19:00:19.000000000 +0200
+++ new/google-api-core-2.19.1/google/api_core/version.py 2024-06-24 18:49:18.000000000 +0200
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "2.19.0"
+__version__ = "2.19.1"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/google-api-core-2.19.0/google_api_core.egg-info/PKG-INFO new/google-api-core-2.19.1/google_api_core.egg-info/PKG-INFO
--- old/google-api-core-2.19.0/google_api_core.egg-info/PKG-INFO 2024-04-30 19:02:11.000000000 +0200
+++ new/google-api-core-2.19.1/google_api_core.egg-info/PKG-INFO 2024-06-24 18:51:14.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: google-api-core
-Version: 2.19.0
+Version: 2.19.1
Summary: Google API client core library
Home-page: https://github.com/googleapis/python-api-core
Author: Google LLC
@@ -23,7 +23,7 @@
Requires-Python: >=3.7
License-File: LICENSE
Requires-Dist: googleapis-common-protos<2.0.dev0,>=1.56.2
-Requires-Dist: protobuf!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0.dev0,>=3.19.5
+Requires-Dist: protobuf!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0,>=3.19.5
Requires-Dist: proto-plus<2.0.0dev,>=1.22.3
Requires-Dist: google-auth<3.0.dev0,>=2.14.1
Requires-Dist: requests<3.0.0.dev0,>=2.18.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/google-api-core-2.19.0/google_api_core.egg-info/requires.txt new/google-api-core-2.19.1/google_api_core.egg-info/requires.txt
--- old/google-api-core-2.19.0/google_api_core.egg-info/requires.txt 2024-04-30 19:02:11.000000000 +0200
+++ new/google-api-core-2.19.1/google_api_core.egg-info/requires.txt 2024-06-24 18:51:14.000000000 +0200
@@ -1,5 +1,5 @@
googleapis-common-protos<2.0.dev0,>=1.56.2
-protobuf!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0.dev0,>=3.19.5
+protobuf!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0,>=3.19.5
proto-plus<2.0.0dev,>=1.22.3
google-auth<3.0.dev0,>=2.14.1
requests<3.0.0.dev0,>=2.18.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/google-api-core-2.19.0/setup.py new/google-api-core-2.19.1/setup.py
--- old/google-api-core-2.19.0/setup.py 2024-04-30 19:00:19.000000000 +0200
+++ new/google-api-core-2.19.1/setup.py 2024-06-24 18:49:18.000000000 +0200
@@ -30,7 +30,7 @@
release_status = "Development Status :: 5 - Production/Stable"
dependencies = [
"googleapis-common-protos >= 1.56.2, < 2.0.dev0",
- "protobuf>=3.19.5,<5.0.0.dev0,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5",
+ "protobuf>=3.19.5,<6.0.0.dev0,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5",
"proto-plus >= 1.22.3, <2.0.0dev",
"google-auth >= 2.14.1, < 3.0.dev0",
"requests >= 2.18.0, < 3.0.0.dev0",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/google-api-core-2.19.0/tests/asyncio/test_grpc_helpers_async.py new/google-api-core-2.19.1/tests/asyncio/test_grpc_helpers_async.py
--- old/google-api-core-2.19.0/tests/asyncio/test_grpc_helpers_async.py 2024-04-30 19:00:19.000000000 +0200
+++ new/google-api-core-2.19.1/tests/asyncio/test_grpc_helpers_async.py 2024-06-24 18:49:18.000000000 +0200
@@ -98,11 +98,39 @@
@pytest.mark.asyncio
+(a)pytest.mark.parametrize(
+ "callable_type,expected_wrapper_type",
+ [
+ (grpc.aio.UnaryStreamMultiCallable, grpc_helpers_async._WrappedUnaryStreamCall),
+ (grpc.aio.StreamUnaryMultiCallable, grpc_helpers_async._WrappedStreamUnaryCall),
+ (
+ grpc.aio.StreamStreamMultiCallable,
+ grpc_helpers_async._WrappedStreamStreamCall,
+ ),
+ ],
+)
+async def test_wrap_errors_w_stream_type(callable_type, expected_wrapper_type):
+ class ConcreteMulticallable(callable_type):
+ def __call__(self, *args, **kwargs):
+ raise NotImplementedError("Should not be called")
+
+ with mock.patch.object(
+ grpc_helpers_async, "_wrap_stream_errors"
+ ) as wrap_stream_errors:
+ callable_ = ConcreteMulticallable()
+ grpc_helpers_async.wrap_errors(callable_)
+ assert wrap_stream_errors.call_count == 1
+ wrap_stream_errors.assert_called_once_with(callable_, expected_wrapper_type)
+
+
+(a)pytest.mark.asyncio
async def test_wrap_stream_errors_unary_stream():
mock_call = mock.Mock(aio.UnaryStreamCall, autospec=True)
multicallable = mock.Mock(return_value=mock_call)
- wrapped_callable = grpc_helpers_async._wrap_stream_errors(multicallable)
+ wrapped_callable = grpc_helpers_async._wrap_stream_errors(
+ multicallable, grpc_helpers_async._WrappedUnaryStreamCall
+ )
await wrapped_callable(1, 2, three="four")
multicallable.assert_called_once_with(1, 2, three="four")
@@ -114,7 +142,9 @@
mock_call = mock.Mock(aio.StreamUnaryCall, autospec=True)
multicallable = mock.Mock(return_value=mock_call)
- wrapped_callable = grpc_helpers_async._wrap_stream_errors(multicallable)
+ wrapped_callable = grpc_helpers_async._wrap_stream_errors(
+ multicallable, grpc_helpers_async._WrappedStreamUnaryCall
+ )
await wrapped_callable(1, 2, three="four")
multicallable.assert_called_once_with(1, 2, three="four")
@@ -126,7 +156,9 @@
mock_call = mock.Mock(aio.StreamStreamCall, autospec=True)
multicallable = mock.Mock(return_value=mock_call)
- wrapped_callable = grpc_helpers_async._wrap_stream_errors(multicallable)
+ wrapped_callable = grpc_helpers_async._wrap_stream_errors(
+ multicallable, grpc_helpers_async._WrappedStreamStreamCall
+ )
await wrapped_callable(1, 2, three="four")
multicallable.assert_called_once_with(1, 2, three="four")
@@ -134,24 +166,15 @@
@pytest.mark.asyncio
-async def test_wrap_stream_errors_type_error():
- mock_call = mock.Mock()
- multicallable = mock.Mock(return_value=mock_call)
-
- wrapped_callable = grpc_helpers_async._wrap_stream_errors(multicallable)
-
- with pytest.raises(TypeError):
- await wrapped_callable()
-
-
-(a)pytest.mark.asyncio
async def test_wrap_stream_errors_raised():
grpc_error = RpcErrorImpl(grpc.StatusCode.INVALID_ARGUMENT)
mock_call = mock.Mock(aio.StreamStreamCall, autospec=True)
mock_call.wait_for_connection = mock.AsyncMock(side_effect=[grpc_error])
multicallable = mock.Mock(return_value=mock_call)
- wrapped_callable = grpc_helpers_async._wrap_stream_errors(multicallable)
+ wrapped_callable = grpc_helpers_async._wrap_stream_errors(
+ multicallable, grpc_helpers_async._WrappedStreamStreamCall
+ )
with pytest.raises(exceptions.InvalidArgument):
await wrapped_callable()
@@ -166,7 +189,9 @@
mock_call.read = mock.AsyncMock(side_effect=grpc_error)
multicallable = mock.Mock(return_value=mock_call)
- wrapped_callable = grpc_helpers_async._wrap_stream_errors(multicallable)
+ wrapped_callable = grpc_helpers_async._wrap_stream_errors(
+ multicallable, grpc_helpers_async._WrappedStreamStreamCall
+ )
wrapped_call = await wrapped_callable(1, 2, three="four")
multicallable.assert_called_once_with(1, 2, three="four")
@@ -189,7 +214,9 @@
mock_call.__aiter__ = mock.Mock(return_value=mocked_aiter)
multicallable = mock.Mock(return_value=mock_call)
- wrapped_callable = grpc_helpers_async._wrap_stream_errors(multicallable)
+ wrapped_callable = grpc_helpers_async._wrap_stream_errors(
+ multicallable, grpc_helpers_async._WrappedStreamStreamCall
+ )
wrapped_call = await wrapped_callable()
with pytest.raises(exceptions.InvalidArgument) as exc_info:
@@ -210,7 +237,9 @@
mock_call.__aiter__ = mock.Mock(return_value=mocked_aiter)
multicallable = mock.Mock(return_value=mock_call)
- wrapped_callable = grpc_helpers_async._wrap_stream_errors(multicallable)
+ wrapped_callable = grpc_helpers_async._wrap_stream_errors(
+ multicallable, grpc_helpers_async._WrappedStreamStreamCall
+ )
wrapped_call = await wrapped_callable()
with pytest.raises(TypeError) as exc_info:
@@ -224,7 +253,9 @@
mock_call = mock.Mock(aio.StreamStreamCall, autospec=True)
multicallable = mock.Mock(return_value=mock_call)
- wrapped_callable = grpc_helpers_async._wrap_stream_errors(multicallable)
+ wrapped_callable = grpc_helpers_async._wrap_stream_errors(
+ multicallable, grpc_helpers_async._WrappedStreamStreamCall
+ )
wrapped_call = await wrapped_callable()
assert wrapped_call.__aiter__() == wrapped_call.__aiter__()
@@ -239,7 +270,9 @@
mock_call.done_writing = mock.AsyncMock(side_effect=[None, grpc_error])
multicallable = mock.Mock(return_value=mock_call)
- wrapped_callable = grpc_helpers_async._wrap_stream_errors(multicallable)
+ wrapped_callable = grpc_helpers_async._wrap_stream_errors(
+ multicallable, grpc_helpers_async._WrappedStreamStreamCall
+ )
wrapped_call = await wrapped_callable()
@@ -295,7 +328,9 @@
result = grpc_helpers_async.wrap_errors(callable_)
assert result == wrap_stream_errors.return_value
- wrap_stream_errors.assert_called_once_with(callable_)
+ wrap_stream_errors.assert_called_once_with(
+ callable_, grpc_helpers_async._WrappedUnaryStreamCall
+ )
@pytest.mark.parametrize(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/google-api-core-2.19.0/tests/unit/test_rest_streaming.py new/google-api-core-2.19.1/tests/unit/test_rest_streaming.py
--- old/google-api-core-2.19.0/tests/unit/test_rest_streaming.py 2024-04-30 19:00:19.000000000 +0200
+++ new/google-api-core-2.19.1/tests/unit/test_rest_streaming.py 2024-06-24 18:49:18.000000000 +0200
@@ -101,9 +101,11 @@
# json.dumps returns a string surrounded with quotes that need to be stripped
# in order to be an actual JSON.
json_responses = [
- self._response_message_cls.to_json(r).strip('"')
- if issubclass(self._response_message_cls, proto.Message)
- else MessageToJson(r).strip('"')
+ (
+ self._response_message_cls.to_json(r).strip('"')
+ if issubclass(self._response_message_cls, proto.Message)
+ else MessageToJson(r).strip('"')
+ )
for r in responses
]
logging.info(f"Sending JSON stream: {json_responses}")
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package pgbackrest for openSUSE:Factory checked in at 2024-07-01 11:20:16
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/pgbackrest (Old)
and /work/SRC/openSUSE:Factory/.pgbackrest.new.18349 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "pgbackrest"
Mon Jul 1 11:20:16 2024 rev:13 rq:1184020 version:2.52.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/pgbackrest/pgbackrest.changes 2024-06-03 17:44:08.416524271 +0200
+++ /work/SRC/openSUSE:Factory/.pgbackrest.new.18349/pgbackrest.changes 2024-07-01 11:20:51.692134138 +0200
@@ -1,0 +2,6 @@
+Wed Jun 26 07:19:48 UTC 2024 - Andrea Manzini <andrea.manzini(a)suse.com>
+
+- update to version 2.52.1
+ * Fix issue with files larger on the replica than on the primary.
+
+-------------------------------------------------------------------
Old:
----
pgbackrest-2.52.tar.gz
New:
----
pgbackrest-2.52.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ pgbackrest.spec ++++++
--- /var/tmp/diff_new_pack.nTd223/_old 2024-07-01 11:20:52.284155706 +0200
+++ /var/tmp/diff_new_pack.nTd223/_new 2024-07-01 11:20:52.288155852 +0200
@@ -19,7 +19,7 @@
%define services pgbackrest.target pgbackrest-diff@.service pgbackrest-full@.service pgbackrest-incr@.service pgbackrest.service pgbackrest-diff@.timer pgbackrest-full@.timer pgbackrest-incr@.timer
Name: pgbackrest
-Version: 2.52
+Version: 2.52.1
Release: 0
Summary: Reliable PostgreSQL Backup & Restore
License: MIT
++++++ libpq-fe.h_localisation.patch ++++++
--- /var/tmp/diff_new_pack.nTd223/_old 2024-07-01 11:20:52.328157309 +0200
+++ /var/tmp/diff_new_pack.nTd223/_new 2024-07-01 11:20:52.332157454 +0200
@@ -1,7 +1,7 @@
-Index: pgbackrest-release-2.52/src/postgres/client.c
+Index: pgbackrest-release-2.52.1/src/postgres/client.c
===================================================================
---- pgbackrest-release-2.52.orig/src/postgres/client.c
-+++ pgbackrest-release-2.52/src/postgres/client.c
+--- pgbackrest-release-2.52.1.orig/src/postgres/client.c
++++ pgbackrest-release-2.52.1/src/postgres/client.c
@@ -3,7 +3,7 @@ Postgres Client
***********************************************************************************************************************************/
#include "build.auto.h"
@@ -11,10 +11,10 @@
#include "common/debug.h"
#include "common/log.h"
-Index: pgbackrest-release-2.52/src/configure
+Index: pgbackrest-release-2.52.1/src/configure
===================================================================
---- pgbackrest-release-2.52.orig/src/configure
-+++ pgbackrest-release-2.52/src/configure
+--- pgbackrest-release-2.52.1.orig/src/configure
++++ pgbackrest-release-2.52.1/src/configure
@@ -3655,12 +3655,12 @@ else $as_nop
as_fn_error $? "library 'pq' is required" "$LINENO" 5
fi
++++++ pgbackrest-2.52.tar.gz -> pgbackrest-2.52.1.tar.gz ++++++
++++ 2320 lines of diff (skipped)
++++++ use-run-pgbackrest.patch ++++++
--- /var/tmp/diff_new_pack.nTd223/_old 2024-07-01 11:20:52.944179750 +0200
+++ /var/tmp/diff_new_pack.nTd223/_new 2024-07-01 11:20:52.948179896 +0200
@@ -1,7 +1,7 @@
-Index: pgbackrest-release-2.52/CODING.md
+Index: pgbackrest-release-2.52.1/CODING.md
===================================================================
---- pgbackrest-release-2.52.orig/CODING.md
-+++ pgbackrest-release-2.52/CODING.md
+--- pgbackrest-release-2.52.1.orig/CODING.md
++++ pgbackrest-release-2.52.1/CODING.md
@@ -268,11 +268,11 @@ Continuation characters should be aligne
This function can be called without variable parameters:
@@ -16,11 +16,11 @@
```
If the majority of functions in a module or object are variadic it is best to provide macros for all functions even if they do not have variable parameters. Do not use the base function when variadic macros exist.
-Index: pgbackrest-release-2.52/doc/resource/git-history.cache
+Index: pgbackrest-release-2.52.1/doc/resource/git-history.cache
===================================================================
---- pgbackrest-release-2.52.orig/doc/resource/git-history.cache
-+++ pgbackrest-release-2.52/doc/resource/git-history.cache
-@@ -7784,7 +7784,7 @@
+--- pgbackrest-release-2.52.1.orig/doc/resource/git-history.cache
++++ pgbackrest-release-2.52.1/doc/resource/git-history.cache
+@@ -7806,7 +7806,7 @@
{
"commit": "a1365b26d4c2383eaacea3714eeb521435ca79aa",
"date": "2021-01-18 23:41:09 -0500",
@@ -29,7 +29,7 @@
},
{
"commit": "8322dfd7af97e307b952cfb37e6a65b65f55be0f",
-@@ -10600,8 +10600,8 @@
+@@ -10622,8 +10622,8 @@
{
"commit": "3fbfcba811499a59b943dd893eef9ff52090f7b6",
"date": "2020-03-16 17:27:01 -0400",
@@ -40,7 +40,7 @@
},
{
"commit": "46911c64c19dc8ff76d2a6ff4548fc01647043e0",
-@@ -12501,7 +12501,7 @@
+@@ -12523,7 +12523,7 @@
"commit": "45881c74aeff4bb25559ec0254fa7fc1960d9cab",
"date": "2019-10-08 12:06:30 -0400",
"subject": "Allow most unit tests to run outside of a container.",
@@ -49,7 +49,7 @@
},
{
"commit": "77b0c6c993a0e6ff45a6a99f343c3709a016d152",
-@@ -20988,7 +20988,7 @@
+@@ -21010,7 +21010,7 @@
"commit": "18fd25233b1db7b3197f5d8dc537d239dcfc7aba",
"date": "2016-04-14 09:30:54 -0400",
"subject": "New simpler configuration and consistent project/exe/path naming.",
@@ -58,10 +58,10 @@
},
{
"commit": "885797e4b58a675487a3531ba16908c1d1e9f970",
-Index: pgbackrest-release-2.52/doc/xml/coding.xml
+Index: pgbackrest-release-2.52.1/doc/xml/coding.xml
===================================================================
---- pgbackrest-release-2.52.orig/doc/xml/coding.xml
-+++ pgbackrest-release-2.52/doc/xml/coding.xml
+--- pgbackrest-release-2.52.1.orig/doc/xml/coding.xml
++++ pgbackrest-release-2.52.1/doc/xml/coding.xml
@@ -365,13 +365,13 @@ void storagePathCreate(const Storage *th
<p>This function can be called without variable parameters:</p>
@@ -78,10 +78,10 @@
</code-block>
<p>If the majority of functions in a module or object are variadic it is best to provide macros for all functions even if they do not have variable parameters. Do not use the base function when variadic macros exist.</p>
-Index: pgbackrest-release-2.52/doc/xml/release/2016/1.00.xml
+Index: pgbackrest-release-2.52.1/doc/xml/release/2016/1.00.xml
===================================================================
---- pgbackrest-release-2.52.orig/doc/xml/release/2016/1.00.xml
-+++ pgbackrest-release-2.52/doc/xml/release/2016/1.00.xml
+--- pgbackrest-release-2.52.1.orig/doc/xml/release/2016/1.00.xml
++++ pgbackrest-release-2.52.1/doc/xml/release/2016/1.00.xml
@@ -43,7 +43,7 @@
<release-item-contributor id="david.steele"/>
</release-item-contributor-list> -->
@@ -91,10 +91,10 @@
</release-item>
<release-item>
-Index: pgbackrest-release-2.52/src/build/config/config.yaml
+Index: pgbackrest-release-2.52.1/src/build/config/config.yaml
===================================================================
---- pgbackrest-release-2.52.orig/src/build/config/config.yaml
-+++ pgbackrest-release-2.52/src/build/config/config.yaml
+--- pgbackrest-release-2.52.1.orig/src/build/config/config.yaml
++++ pgbackrest-release-2.52.1/src/build/config/config.yaml
@@ -844,7 +844,7 @@ option:
lock-path:
section: global
@@ -104,10 +104,10 @@
command:
annotate: {}
archive-get: {}
-Index: pgbackrest-release-2.52/src/config/parse.auto.c.inc
+Index: pgbackrest-release-2.52.1/src/config/parse.auto.c.inc
===================================================================
---- pgbackrest-release-2.52.orig/src/config/parse.auto.c.inc
-+++ pgbackrest-release-2.52/src/config/parse.auto.c.inc
+--- pgbackrest-release-2.52.1.orig/src/config/parse.auto.c.inc
++++ pgbackrest-release-2.52.1/src/config/parse.auto.c.inc
@@ -11,7 +11,7 @@ Rule Strings
static const StringPub parseRuleValueStr[] =
@@ -117,10 +117,10 @@
PARSE_RULE_STRPUB("/var/lib/pgbackrest"), // val/str
PARSE_RULE_STRPUB("/var/log/pgbackrest"), // val/str
PARSE_RULE_STRPUB("/var/spool/pgbackrest"), // val/str
-Index: pgbackrest-release-2.52/test/ci.pl
+Index: pgbackrest-release-2.52.1/test/ci.pl
===================================================================
---- pgbackrest-release-2.52.orig/test/ci.pl
-+++ pgbackrest-release-2.52/test/ci.pl
+--- pgbackrest-release-2.52.1.orig/test/ci.pl
++++ pgbackrest-release-2.52.1/test/ci.pl
@@ -202,8 +202,8 @@ eval
$strPackage .= " libdbd-pg-perl";
}
@@ -132,10 +132,10 @@
processEnd();
processBegin('install test packages');
-Index: pgbackrest-release-2.52/test/src/module/command/helpTest.c
+Index: pgbackrest-release-2.52.1/test/src/module/command/helpTest.c
===================================================================
---- pgbackrest-release-2.52.orig/test/src/module/command/helpTest.c
-+++ pgbackrest-release-2.52/test/src/module/command/helpTest.c
+--- pgbackrest-release-2.52.1.orig/test/src/module/command/helpTest.c
++++ pgbackrest-release-2.52.1/test/src/module/command/helpTest.c
@@ -246,7 +246,7 @@ testRun(void)
" [default=n]\n"
" --io-timeout I/O timeout [default=60]\n"
@@ -145,10 +145,10 @@
" --neutral-umask use a neutral umask [default=y]\n"
" --process-max max processes to use for\n"
" compress/transfer [default=1]\n"
-Index: pgbackrest-release-2.52/test/Vagrantfile
+Index: pgbackrest-release-2.52.1/test/Vagrantfile
===================================================================
---- pgbackrest-release-2.52.orig/test/Vagrantfile
-+++ pgbackrest-release-2.52/test/Vagrantfile
+--- pgbackrest-release-2.52.1.orig/test/Vagrantfile
++++ pgbackrest-release-2.52.1/test/Vagrantfile
@@ -54,12 +54,12 @@ Vagrant.configure(2) do |config|
sudo /etc/init.d/virtualbox-guest-utils stop
sudo /usr/sbin/VBoxService --timesync-set-on-restore --timesync-interval 5000 --timesync-set-threshold 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-django-celery-beat for openSUSE:Factory checked in at 2024-07-01 11:20:14
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-django-celery-beat (Old)
and /work/SRC/openSUSE:Factory/.python-django-celery-beat.new.18349 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-django-celery-beat"
Mon Jul 1 11:20:14 2024 rev:3 rq:1184021 version:2.6.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-django-celery-beat/python-django-celery-beat.changes 2024-02-13 22:43:51.723468554 +0100
+++ /work/SRC/openSUSE:Factory/.python-django-celery-beat.new.18349/python-django-celery-beat.changes 2024-07-01 11:20:50.972107908 +0200
@@ -1,0 +2,33 @@
+Sat Jun 29 17:21:30 UTC 2024 - Dirk Müller <dmueller(a)suse.com>
+
+- update to 2.6.0:
+ * Avoid crash when can not get human readable description
+ * Update codeql-analysis.yml (#653).
+ * Fix CI: Change assert self.app.timezone.zone to assert
+ self.app.timezone.key (#664).
+ * Drop Django 4.0 from CI to avoid security issues (#662).
+ * Fix Issue #388: Celery Beat scheduled tasks may be executed
+ repeatedly (#660).
+ * Update README.rst (#670).
+ * Update runtime.txt to include Django 5.0 (#681).
+ * Replace case.patching fixture with mockeypatch + MagicMock
+ * Update README.rst - Crontab effect description (#689).
+ * Update supported Python & Django version in setup.py (#672).
+ * Add Python 3.12 to test matrix and add classifier (#690).
+ * Django v5.0: django.utils.timezone.utc alias -->
+ datetime.timezone.utc (#703).
+ * Upgrade GitHub Actions and PyPy 3.10 and Django 5.0 (#699).
+ * Testing Django v5.0 on pypy-3.10-v7.3.14 passes (#705).
+ * Prepare for release v2.6.0 to support Py3.12 and Dj5.0
+ * GitHub Actions: Do not hardcode an out-of-date version of
+ PyPy (#715).
+ * Use the same order in the admin as in the cron schedule
+ expression (#716).
+ * Upgrade pip and GitHub Actions dependencies with dependabot
+ * Update pytest requirement from <8.0,>=6.2.5 to >=6.2.5,<9.0
+ * Remove requirements/test-djangoXY.txt (#728).
+ * Remove code for unsupported django.VERSION < (3, 2) (#729).
+ * Added sphinxcontrib-django to extensions (#736).
+- drop support-zoneinfo.patch (upstream)
+
+-------------------------------------------------------------------
Old:
----
django-celery-beat-2.5.0.tar.gz
support-zoneinfo.patch
New:
----
django-celery-beat-2.6.0.tar.gz
BETA DEBUG BEGIN:
Old: * Added sphinxcontrib-django to extensions (#736).
- drop support-zoneinfo.patch (upstream)
BETA DEBUG END:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-django-celery-beat.spec ++++++
--- /var/tmp/diff_new_pack.IdesRr/_old 2024-07-01 11:20:51.412123938 +0200
+++ /var/tmp/diff_new_pack.IdesRr/_new 2024-07-01 11:20:51.416124083 +0200
@@ -17,14 +17,12 @@
Name: python-django-celery-beat
-Version: 2.5.0
+Version: 2.6.0
Release: 0
Summary: Database-backed Periodic Tasks
License: BSD-3-Clause
URL: https://github.com/celery/django-celery-beat
Source: https://files.pythonhosted.org/packages/source/d/django-celery-beat/django-…
-# PATCH-FIX-UPSTREAM gh#celery/django-celery-beat#664
-Patch0: support-zoneinfo.patch
BuildRequires: %{python_module pip}
BuildRequires: %{python_module setuptools}
BuildRequires: %{python_module wheel}
++++++ django-celery-beat-2.5.0.tar.gz -> django-celery-beat-2.6.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-celery-beat-2.5.0/Changelog new/django-celery-beat-2.6.0/Changelog
--- old/django-celery-beat-2.5.0/Changelog 2023-03-14 10:54:42.000000000 +0100
+++ new/django-celery-beat-2.6.0/Changelog 2024-03-03 18:06:27.000000000 +0100
@@ -4,6 +4,43 @@
Change history
================
+Next
+====
+
+
+.. _version-2.6.0:
+
+2.6.0
+=====
+:release-date: 2024-03-03
+:release-by: Christian Clauss
+
+- Avoid crash when can not get human readable description (#648).
+- Update codeql-analysis.yml (#653).
+- Fix CI: Change assert self.app.timezone.zone to assert self.app.timezone.key (#664).
+- Drop Django 4.0 from CI to avoid security issues (#662).
+- Fix Issue #388: Celery Beat scheduled tasks may be executed repeatedly (#660).
+- Update README.rst (#670).
+- Update runtime.txt to include Django 5.0 (#681).
+- Replace case.patching fixture with mockeypatch + MagicMock (#692).
+- Update README.rst - Crontab effect description (#689).
+- Update supported Python & Django version in setup.py (#672).
+- Add Python 3.12 to test matrix and add classifier (#690).
+- Django v5.0: django.utils.timezone.utc alias --> datetime.timezone.utc (#703).
+- Upgrade GitHub Actions and PyPy 3.10 and Django 5.0 (#699).
+- Testing Django v5.0 on pypy-3.10-v7.3.14 passes (#705).
+- Prepare for release v2.6.0 to support Py3.12 and Dj5.0 (#712).
+- GitHub Actions: Do not hardcode an out-of-date version of PyPy (#715).
+- Use the same order in the admin as in the cron schedule expression (#716).
+- Upgrade pip and GitHub Actions dependencies with dependabot (#721).
+- Bump github/codeql-action from 2 to 3 (#722).
+- Bump actions/checkout from 3 to 4 (#723).
+- Update pytest requirement from <8.0,>=6.2.5 to >=6.2.5,<9.0 (#724).
+- Remove requirements/test-djangoXY.txt (#728).
+- Remove code for unsupported django.VERSION < (3, 2) (#729).
+- Added sphinxcontrib-django to extensions (#736).
+
+
.. _version-2.5.0:
2.5.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-celery-beat-2.5.0/PKG-INFO new/django-celery-beat-2.6.0/PKG-INFO
--- old/django-celery-beat-2.5.0/PKG-INFO 2023-03-14 11:01:21.075267600 +0100
+++ new/django-celery-beat-2.6.0/PKG-INFO 2024-03-03 18:06:49.625830700 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: django-celery-beat
-Version: 2.5.0
+Version: 2.6.0
Summary: Database-backed Periodic Tasks.
Home-page: https://github.com/celery/django-celery-beat
Author: Asif Saif Uddin, Ask Solem
@@ -12,18 +12,18 @@
Classifier: License :: OSI Approved :: BSD License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
+Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Framework :: Django
Classifier: Framework :: Django :: 3.2
-Classifier: Framework :: Django :: 4.0
Classifier: Framework :: Django :: 4.1
Classifier: Framework :: Django :: 4.2
+Classifier: Framework :: Django :: 5.0
Classifier: Operating System :: OS Independent
Classifier: Topic :: Communications
Classifier: Topic :: System :: Distributed Computing
@@ -31,6 +31,14 @@
Description-Content-Type: text/x-rst
License-File: LICENSE
License-File: AUTHORS
+Requires-Dist: celery<6.0,>=5.2.3
+Requires-Dist: importlib-metadata<5.0; python_version < "3.8"
+Requires-Dist: django-timezone-field>=5.0
+Requires-Dist: backports.zoneinfo; python_version < "3.9"
+Requires-Dist: tzdata
+Requires-Dist: python-crontab>=2.3.4
+Requires-Dist: cron-descriptor>=1.2.32
+Requires-Dist: Django<5.1,>=2.2
=====================================================================
Database-backed Periodic Tasks
@@ -38,7 +46,7 @@
|build-status| |coverage| |license| |wheel| |pyversion| |pyimp|
-:Version: 2.5.0
+:Version: 2.6.0
:Web: http://django-celery-beat.readthedocs.io/
:Download: http://pypi.python.org/pypi/django-celery-beat
:Source: http://github.com/celery/django-celery-beat
@@ -204,7 +212,7 @@
A crontab schedule has the fields: ``minute``, ``hour``, ``day_of_week``,
``day_of_month`` and ``month_of_year``, so if you want the equivalent
-of a ``30 * * * *`` (execute every 30 minutes) crontab entry you specify:
+of a ``30 * * * *`` (execute 30 minutes past every hour) crontab entry you specify:
.. code-block:: Python
@@ -332,12 +340,12 @@
With pip
~~~~~~~~
-You can install the latest snapshot of django-celery-beat using the following
+You can install the latest main version of django-celery-beat using the following
pip command:
.. code-block:: bash
- $ pip install https://github.com/celery/django-celery-beat/zipball/master#egg=django-cele…
+ $ pip install git+https://github.com/celery/django-celery-beat#egg=django-celery-beat
Developing django-celery-beat
@@ -387,5 +395,3 @@
The maintainers of django-celery-beat and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. `Learn more`_.
.. _Learn more: https://tidelift.com/subscription/pkg/pypi-django-celery-beat?utm_source=py…
-
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-celery-beat-2.5.0/README.rst new/django-celery-beat-2.6.0/README.rst
--- old/django-celery-beat-2.5.0/README.rst 2023-03-14 10:59:06.000000000 +0100
+++ new/django-celery-beat-2.6.0/README.rst 2024-03-03 18:06:27.000000000 +0100
@@ -4,7 +4,7 @@
|build-status| |coverage| |license| |wheel| |pyversion| |pyimp|
-:Version: 2.5.0
+:Version: 2.6.0
:Web: http://django-celery-beat.readthedocs.io/
:Download: http://pypi.python.org/pypi/django-celery-beat
:Source: http://github.com/celery/django-celery-beat
@@ -170,7 +170,7 @@
A crontab schedule has the fields: ``minute``, ``hour``, ``day_of_week``,
``day_of_month`` and ``month_of_year``, so if you want the equivalent
-of a ``30 * * * *`` (execute every 30 minutes) crontab entry you specify:
+of a ``30 * * * *`` (execute 30 minutes past every hour) crontab entry you specify:
.. code-block:: Python
@@ -298,12 +298,12 @@
With pip
~~~~~~~~
-You can install the latest snapshot of django-celery-beat using the following
+You can install the latest main version of django-celery-beat using the following
pip command:
.. code-block:: bash
- $ pip install https://github.com/celery/django-celery-beat/zipball/master#egg=django-cele…
+ $ pip install git+https://github.com/celery/django-celery-beat#egg=django-celery-beat
Developing django-celery-beat
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-celery-beat-2.5.0/django_celery_beat/__init__.py new/django-celery-beat-2.6.0/django_celery_beat/__init__.py
--- old/django-celery-beat-2.5.0/django_celery_beat/__init__.py 2023-03-14 10:56:49.000000000 +0100
+++ new/django-celery-beat-2.6.0/django_celery_beat/__init__.py 2024-03-03 18:06:27.000000000 +0100
@@ -5,9 +5,7 @@
import re
from collections import namedtuple
-import django
-
-__version__ = '2.5.0'
+__version__ = '2.6.0'
__author__ = 'Asif Saif Uddin, Ask Solem'
__contact__ = 'auvipy(a)gmail.com, ask(a)celeryproject.org'
__homepage__ = 'https://github.com/celery/django-celery-beat'
@@ -29,6 +27,3 @@
del re
__all__ = []
-
-if django.VERSION < (3, 2):
- default_app_config = 'django_celery_beat.apps.BeatConfig'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-celery-beat-2.5.0/django_celery_beat/admin.py new/django-celery-beat-2.6.0/django_celery_beat/admin.py
--- old/django-celery-beat-2.5.0/django_celery_beat/admin.py 2023-03-14 09:11:44.000000000 +0100
+++ new/django-celery-beat-2.6.0/django_celery_beat/admin.py 2024-03-03 18:06:27.000000000 +0100
@@ -105,6 +105,7 @@
return self._clean_json('kwargs')
+(a)admin.register(PeriodicTask)
class PeriodicTaskAdmin(admin.ModelAdmin):
"""Admin-interface for periodic tasks."""
@@ -184,17 +185,21 @@
),
)
+ @admin.action(
+ description=_('Enable selected tasks')
+ )
def enable_tasks(self, request, queryset):
rows_updated = queryset.update(enabled=True)
PeriodicTasks.update_changed()
self._message_user_about_update(request, rows_updated, 'enabled')
- enable_tasks.short_description = _('Enable selected tasks')
+ @admin.action(
+ description=_('Disable selected tasks')
+ )
def disable_tasks(self, request, queryset):
rows_updated = queryset.update(enabled=False, last_run_at=None)
PeriodicTasks.update_changed()
self._message_user_about_update(request, rows_updated, 'disabled')
- disable_tasks.short_description = _('Disable selected tasks')
def _toggle_tasks_activity(self, queryset):
return queryset.update(enabled=Case(
@@ -202,12 +207,17 @@
default=Value(True),
))
+ @admin.action(
+ description=_('Toggle activity of selected tasks')
+ )
def toggle_tasks(self, request, queryset):
rows_updated = self._toggle_tasks_activity(queryset)
PeriodicTasks.update_changed()
self._message_user_about_update(request, rows_updated, 'toggled')
- toggle_tasks.short_description = _('Toggle activity of selected tasks')
+ @admin.action(
+ description=_('Run selected tasks')
+ )
def run_tasks(self, request, queryset):
self.celery_app.loader.import_default_modules()
tasks = [(self.celery_app.tasks.get(task.task),
@@ -249,9 +259,9 @@
pluralize(tasks_run, _('was,were')),
),
)
- run_tasks.short_description = _('Run selected tasks')
+(a)admin.register(ClockedSchedule)
class ClockedScheduleAdmin(admin.ModelAdmin):
"""Admin-interface for clocked schedules."""
@@ -263,12 +273,12 @@
)
+(a)admin.register(CrontabSchedule)
class CrontabScheduleAdmin(admin.ModelAdmin):
+ """Admin class for CrontabSchedule."""
+
list_display = ('__str__', 'human_readable')
admin.site.register(IntervalSchedule)
-admin.site.register(CrontabSchedule, CrontabScheduleAdmin)
admin.site.register(SolarSchedule)
-admin.site.register(ClockedSchedule, ClockedScheduleAdmin)
-admin.site.register(PeriodicTask, PeriodicTaskAdmin)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-celery-beat-2.5.0/django_celery_beat/models.py new/django-celery-beat-2.6.0/django_celery_beat/models.py
--- old/django-celery-beat-2.5.0/django_celery_beat/models.py 2023-03-14 09:11:44.000000000 +0100
+++ new/django-celery-beat-2.6.0/django_celery_beat/models.py 2024-03-03 18:06:27.000000000 +0100
@@ -8,7 +8,8 @@
import timezone_field
from celery import current_app, schedules
-from cron_descriptor import get_description
+from cron_descriptor import (FormatException, MissingFieldException,
+ WrongArgumentException, get_description)
from django.conf import settings
from django.core.exceptions import MultipleObjectsReturned, ValidationError
from django.core.validators import MaxValueValidator, MinValueValidator
@@ -273,14 +274,6 @@
'Cron Hours to Run. Use "*" for "all". (Example: "8,20")'),
validators=[validators.hour_validator],
)
- day_of_week = models.CharField(
- max_length=64, default='*',
- verbose_name=_('Day(s) Of The Week'),
- help_text=_(
- 'Cron Days Of The Week to Run. Use "*" for "all", Sunday '
- 'is 0 or 7, Monday is 1. (Example: "0,5")'),
- validators=[validators.day_of_week_validator],
- )
day_of_month = models.CharField(
max_length=31 * 4, default='*',
verbose_name=_('Day(s) Of The Month'),
@@ -297,6 +290,14 @@
'(Example: "1,12")'),
validators=[validators.month_of_year_validator],
)
+ day_of_week = models.CharField(
+ max_length=64, default='*',
+ verbose_name=_('Day(s) Of The Week'),
+ help_text=_(
+ 'Cron Days Of The Week to Run. Use "*" for "all", Sunday '
+ 'is 0 or 7, Monday is 1. (Example: "0,5")'),
+ validators=[validators.day_of_week_validator],
+ )
timezone = timezone_field.TimeZoneField(
default=crontab_schedule_celery_timezone,
@@ -316,11 +317,19 @@
@property
def human_readable(self):
- human_readable = get_description('{} {} {} {} {}'.format(
+ cron_expression = '{} {} {} {} {}'.format(
cronexp(self.minute), cronexp(self.hour),
cronexp(self.day_of_month), cronexp(self.month_of_year),
cronexp(self.day_of_week)
- ))
+ )
+ try:
+ human_readable = get_description(cron_expression)
+ except (
+ MissingFieldException,
+ FormatException,
+ WrongArgumentException
+ ):
+ return f'{cron_expression} {str(self.timezone)}'
return f'{human_readable} {str(self.timezone)}'
def __str__(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-celery-beat-2.5.0/django_celery_beat/schedulers.py new/django-celery-beat-2.6.0/django_celery_beat/schedulers.py
--- old/django-celery-beat-2.5.0/django_celery_beat/schedulers.py 2023-03-14 09:11:44.000000000 +0100
+++ new/django-celery-beat-2.6.0/django_celery_beat/schedulers.py 2024-03-03 18:06:27.000000000 +0100
@@ -300,9 +300,9 @@
while self._dirty:
name = self._dirty.pop()
try:
- self.schedule[name].save()
+ self._schedule[name].save()
_tried.add(name)
- except (KeyError, ObjectDoesNotExist):
+ except (KeyError, TypeError, ObjectDoesNotExist):
_failed.add(name)
except DatabaseError as exc:
logger.exception('Database error while sync: %r', exc)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-celery-beat-2.5.0/django_celery_beat/utils.py new/django-celery-beat-2.6.0/django_celery_beat/utils.py
--- old/django-celery-beat-2.5.0/django_celery_beat/utils.py 2022-10-19 14:20:27.000000000 +0200
+++ new/django-celery-beat-2.6.0/django_celery_beat/utils.py 2024-03-03 18:06:27.000000000 +0100
@@ -1,6 +1,8 @@
"""Utilities."""
# -- XXX This module must not use translation as that causes
# -- a recursive loader import!
+from datetime import timezone as datetime_timezone
+
from django.conf import settings
from django.utils import timezone
@@ -17,7 +19,7 @@
if getattr(settings, 'USE_TZ', False):
# naive datetimes are assumed to be in UTC.
if timezone.is_naive(value):
- value = timezone.make_aware(value, timezone.utc)
+ value = timezone.make_aware(value, datetime_timezone.utc)
# then convert to the Django configured timezone.
default_tz = timezone.get_default_timezone()
value = timezone.localtime(value, default_tz)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-celery-beat-2.5.0/django_celery_beat.egg-info/PKG-INFO new/django-celery-beat-2.6.0/django_celery_beat.egg-info/PKG-INFO
--- old/django-celery-beat-2.5.0/django_celery_beat.egg-info/PKG-INFO 2023-03-14 11:01:20.000000000 +0100
+++ new/django-celery-beat-2.6.0/django_celery_beat.egg-info/PKG-INFO 2024-03-03 18:06:49.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: django-celery-beat
-Version: 2.5.0
+Version: 2.6.0
Summary: Database-backed Periodic Tasks.
Home-page: https://github.com/celery/django-celery-beat
Author: Asif Saif Uddin, Ask Solem
@@ -12,18 +12,18 @@
Classifier: License :: OSI Approved :: BSD License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
+Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Framework :: Django
Classifier: Framework :: Django :: 3.2
-Classifier: Framework :: Django :: 4.0
Classifier: Framework :: Django :: 4.1
Classifier: Framework :: Django :: 4.2
+Classifier: Framework :: Django :: 5.0
Classifier: Operating System :: OS Independent
Classifier: Topic :: Communications
Classifier: Topic :: System :: Distributed Computing
@@ -31,6 +31,14 @@
Description-Content-Type: text/x-rst
License-File: LICENSE
License-File: AUTHORS
+Requires-Dist: celery<6.0,>=5.2.3
+Requires-Dist: importlib-metadata<5.0; python_version < "3.8"
+Requires-Dist: django-timezone-field>=5.0
+Requires-Dist: backports.zoneinfo; python_version < "3.9"
+Requires-Dist: tzdata
+Requires-Dist: python-crontab>=2.3.4
+Requires-Dist: cron-descriptor>=1.2.32
+Requires-Dist: Django<5.1,>=2.2
=====================================================================
Database-backed Periodic Tasks
@@ -38,7 +46,7 @@
|build-status| |coverage| |license| |wheel| |pyversion| |pyimp|
-:Version: 2.5.0
+:Version: 2.6.0
:Web: http://django-celery-beat.readthedocs.io/
:Download: http://pypi.python.org/pypi/django-celery-beat
:Source: http://github.com/celery/django-celery-beat
@@ -204,7 +212,7 @@
A crontab schedule has the fields: ``minute``, ``hour``, ``day_of_week``,
``day_of_month`` and ``month_of_year``, so if you want the equivalent
-of a ``30 * * * *`` (execute every 30 minutes) crontab entry you specify:
+of a ``30 * * * *`` (execute 30 minutes past every hour) crontab entry you specify:
.. code-block:: Python
@@ -332,12 +340,12 @@
With pip
~~~~~~~~
-You can install the latest snapshot of django-celery-beat using the following
+You can install the latest main version of django-celery-beat using the following
pip command:
.. code-block:: bash
- $ pip install https://github.com/celery/django-celery-beat/zipball/master#egg=django-cele…
+ $ pip install git+https://github.com/celery/django-celery-beat#egg=django-celery-beat
Developing django-celery-beat
@@ -387,5 +395,3 @@
The maintainers of django-celery-beat and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. `Learn more`_.
.. _Learn more: https://tidelift.com/subscription/pkg/pypi-django-celery-beat?utm_source=py…
-
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-celery-beat-2.5.0/django_celery_beat.egg-info/SOURCES.txt new/django-celery-beat-2.6.0/django_celery_beat.egg-info/SOURCES.txt
--- old/django-celery-beat-2.5.0/django_celery_beat.egg-info/SOURCES.txt 2023-03-14 11:01:20.000000000 +0100
+++ new/django-celery-beat-2.6.0/django_celery_beat.egg-info/SOURCES.txt 2024-03-03 18:06:49.000000000 +0100
@@ -90,10 +90,6 @@
requirements/runtime.txt
requirements/test-ci.txt
requirements/test-django.txt
-requirements/test-django32.txt
-requirements/test-django40.txt
-requirements/test-django41.txt
-requirements/test-django42.txt
requirements/test.txt
t/__init__.py
t/proj/__init__.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-celery-beat-2.5.0/django_celery_beat.egg-info/entry_points.txt new/django-celery-beat-2.6.0/django_celery_beat.egg-info/entry_points.txt
--- old/django-celery-beat-2.5.0/django_celery_beat.egg-info/entry_points.txt 2023-03-14 11:01:20.000000000 +0100
+++ new/django-celery-beat-2.6.0/django_celery_beat.egg-info/entry_points.txt 2024-03-03 18:06:49.000000000 +0100
@@ -1,3 +1,2 @@
[celery.beat_schedulers]
django = django_celery_beat.schedulers:DatabaseScheduler
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-celery-beat-2.5.0/django_celery_beat.egg-info/requires.txt new/django-celery-beat-2.6.0/django_celery_beat.egg-info/requires.txt
--- old/django-celery-beat-2.5.0/django_celery_beat.egg-info/requires.txt 2023-03-14 11:01:20.000000000 +0100
+++ new/django-celery-beat-2.6.0/django_celery_beat.egg-info/requires.txt 2024-03-03 18:06:49.000000000 +0100
@@ -1,9 +1,9 @@
-Django<5.0,>=2.2
celery<6.0,>=5.2.3
-cron-descriptor>=1.2.32
django-timezone-field>=5.0
-python-crontab>=2.3.4
tzdata
+python-crontab>=2.3.4
+cron-descriptor>=1.2.32
+Django<5.1,>=2.2
[:python_version < "3.8"]
importlib-metadata<5.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-celery-beat-2.5.0/docs/conf.py new/django-celery-beat-2.6.0/docs/conf.py
--- old/django-celery-beat-2.5.0/docs/conf.py 2022-10-19 14:20:27.000000000 +0200
+++ new/django-celery-beat-2.6.0/docs/conf.py 2024-03-03 18:06:27.000000000 +0100
@@ -37,4 +37,10 @@
None
),
},
+ extensions=['sphinxcontrib_django']
))
+
+intersphinx_mapping = globals().get('intersphinx_mapping', {})
+intersphinx_mapping['celery'] = (
+ 'https://celery.readthedocs.io/en/main/', None)
+globals().update({'intersphinx_mapping': intersphinx_mapping})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-celery-beat-2.5.0/docs/includes/introduction.txt new/django-celery-beat-2.6.0/docs/includes/introduction.txt
--- old/django-celery-beat-2.5.0/docs/includes/introduction.txt 2023-03-14 10:57:52.000000000 +0100
+++ new/django-celery-beat-2.6.0/docs/includes/introduction.txt 2024-03-03 18:06:27.000000000 +0100
@@ -1,4 +1,4 @@
-:Version: 2.5.0
+:Version: 2.6.0
:Web: http://django-celery-beat.readthedocs.io/
:Download: http://pypi.python.org/pypi/django-celery-beat
:Source: http://github.com/celery/django-celery-beat
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-celery-beat-2.5.0/docs/reference/django-celery-beat.models.rst new/django-celery-beat-2.6.0/docs/reference/django-celery-beat.models.rst
--- old/django-celery-beat-2.5.0/docs/reference/django-celery-beat.models.rst 2022-04-17 10:00:57.000000000 +0200
+++ new/django-celery-beat-2.6.0/docs/reference/django-celery-beat.models.rst 2024-03-03 18:06:27.000000000 +0100
@@ -8,4 +8,3 @@
.. automodule:: django_celery_beat.models
:members:
- :undoc-members:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-celery-beat-2.5.0/requirements/docs.txt new/django-celery-beat-2.6.0/requirements/docs.txt
--- old/django-celery-beat-2.5.0/requirements/docs.txt 2023-03-14 10:22:19.000000000 +0100
+++ new/django-celery-beat-2.6.0/requirements/docs.txt 2024-03-03 18:06:27.000000000 +0100
@@ -1,4 +1,5 @@
Django>=2.2,<5.0
+sphinxcontrib-django
https://github.com/celery/sphinx_celery/archive/master.zip
https://github.com/celery/kombu/zipball/main#egg=kombu
https://github.com/celery/celery/zipball/main#egg=celery
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-celery-beat-2.5.0/requirements/runtime.txt new/django-celery-beat-2.6.0/requirements/runtime.txt
--- old/django-celery-beat-2.5.0/requirements/runtime.txt 2023-03-14 10:22:19.000000000 +0100
+++ new/django-celery-beat-2.6.0/requirements/runtime.txt 2024-03-03 18:06:27.000000000 +0100
@@ -1 +1 @@
-Django>=2.2,<5.0
+Django>=2.2,<5.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-celery-beat-2.5.0/requirements/test-django32.txt new/django-celery-beat-2.6.0/requirements/test-django32.txt
--- old/django-celery-beat-2.5.0/requirements/test-django32.txt 2022-04-17 10:00:57.000000000 +0200
+++ new/django-celery-beat-2.6.0/requirements/test-django32.txt 1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-django>=3.2.13,<4.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-celery-beat-2.5.0/requirements/test-django40.txt new/django-celery-beat-2.6.0/requirements/test-django40.txt
--- old/django-celery-beat-2.5.0/requirements/test-django40.txt 2022-04-17 10:00:57.000000000 +0200
+++ new/django-celery-beat-2.6.0/requirements/test-django40.txt 1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-django>=4.0.4,<4.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-celery-beat-2.5.0/requirements/test-django41.txt new/django-celery-beat-2.6.0/requirements/test-django41.txt
--- old/django-celery-beat-2.5.0/requirements/test-django41.txt 2023-03-14 09:11:44.000000000 +0100
+++ new/django-celery-beat-2.6.0/requirements/test-django41.txt 1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-django>=4.1.4,<4.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-celery-beat-2.5.0/requirements/test-django42.txt new/django-celery-beat-2.6.0/requirements/test-django42.txt
--- old/django-celery-beat-2.5.0/requirements/test-django42.txt 2023-03-14 10:22:19.000000000 +0100
+++ new/django-celery-beat-2.6.0/requirements/test-django42.txt 1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-django>=4.2b1,<5.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-celery-beat-2.5.0/requirements/test.txt new/django-celery-beat-2.6.0/requirements/test.txt
--- old/django-celery-beat-2.5.0/requirements/test.txt 2023-03-14 10:22:19.000000000 +0100
+++ new/django-celery-beat-2.6.0/requirements/test.txt 2024-03-03 18:06:27.000000000 +0100
@@ -1,5 +1,4 @@
-case>=1.3.1
pytest-django>=4.5.2,<5.0
-pytest>=6.2.5,<8.0
+pytest>=6.2.5,<9.0
pytest-timeout
ephem
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-celery-beat-2.5.0/setup.py new/django-celery-beat-2.6.0/setup.py
--- old/django-celery-beat-2.5.0/setup.py 2023-03-14 09:36:29.000000000 +0100
+++ new/django-celery-beat-2.6.0/setup.py 2024-03-03 18:06:27.000000000 +0100
@@ -21,12 +21,12 @@
E_UNSUPPORTED_PYTHON = f'{NAME} 1.0 requires %s %s or later!'
PYIMP = _pyimp()
-PY37_OR_LESS = sys.version_info < (3, 7)
+PY38_OR_LESS = sys.version_info < (3, 8)
PYPY_VERSION = getattr(sys, 'pypy_version_info', None)
PYPY24_ATLEAST = PYPY_VERSION and PYPY_VERSION >= (2, 4)
-if PY37_OR_LESS and not PYPY24_ATLEAST:
- raise Exception(E_UNSUPPORTED_PYTHON % (PYIMP, '3.7'))
+if PY38_OR_LESS and not PYPY24_ATLEAST:
+ raise Exception(E_UNSUPPORTED_PYTHON % (PYIMP, '3.8'))
# -*- Classifiers -*-
@@ -35,18 +35,18 @@
License :: OSI Approved :: BSD License
Programming Language :: Python
Programming Language :: Python :: 3
- Programming Language :: Python :: 3.7
Programming Language :: Python :: 3.8
Programming Language :: Python :: 3.9
Programming Language :: Python :: 3.10
Programming Language :: Python :: 3.11
+ Programming Language :: Python :: 3.12
Programming Language :: Python :: Implementation :: CPython
Programming Language :: Python :: Implementation :: PyPy
Framework :: Django
Framework :: Django :: 3.2
- Framework :: Django :: 4.0
Framework :: Django :: 4.1
Framework :: Django :: 4.2
+ Framework :: Django :: 5.0
Operating System :: OS Independent
Topic :: Communications
Topic :: System :: Distributed Computing
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-celery-beat-2.5.0/t/unit/conftest.py new/django-celery-beat-2.6.0/t/unit/conftest.py
--- old/django-celery-beat-2.5.0/t/unit/conftest.py 2022-10-19 14:20:27.000000000 +0200
+++ new/django-celery-beat-2.6.0/t/unit/conftest.py 2024-03-03 18:06:27.000000000 +0100
@@ -1,3 +1,5 @@
+from unittest.mock import MagicMock
+
import pytest
# we have to import the pytest plugin fixtures here,
# in case user did not do the `python setup.py develop` yet,
@@ -40,3 +42,11 @@
yield
if request.instance:
request.instance.app = None
+
+
+(a)pytest.fixture
+def patching(monkeypatch):
+ def _patching(attr):
+ monkeypatch.setattr(attr, MagicMock())
+
+ return _patching
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-celery-beat-2.5.0/t/unit/test_models.py new/django-celery-beat-2.6.0/t/unit/test_models.py
--- old/django-celery-beat-2.5.0/t/unit/test_models.py 2022-10-19 14:20:27.000000000 +0200
+++ new/django-celery-beat-2.6.0/t/unit/test_models.py 2024-03-03 18:06:27.000000000 +0100
@@ -207,3 +207,40 @@
'The `PeriodicTasks.last_update` has not be update.'
)
# Check the `PeriodicTasks` does be updated.
+
+
+class HumanReadableTestCase(TestCase):
+ def test_good(self):
+ """Valid crontab display."""
+ cron = CrontabSchedule.objects.create(
+ hour="2",
+ minute="0",
+ day_of_week="mon",
+ )
+ self.assertNotEqual(
+ cron.human_readable, "0 2 * * mon UTC"
+ )
+
+ def test_invalid(self):
+ """Invalid crontab display."""
+ cron = CrontabSchedule.objects.create(
+ hour="2",
+ minute="0",
+ day_of_week="monxxx",
+ )
+ self.assertEqual(
+ cron.human_readable, "0 2 * * monxxx UTC"
+ )
+
+ def test_long_name(self):
+ """Long day name display."""
+ # TODO: this should eventually work, but probably needs conversion
+ # before passing data to cron_description
+ cron = CrontabSchedule.objects.create(
+ hour="2",
+ minute="0",
+ day_of_week="monday",
+ )
+ self.assertEqual(
+ cron.human_readable, "0 2 * * monday UTC"
+ )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django-celery-beat-2.5.0/t/unit/test_schedulers.py new/django-celery-beat-2.6.0/t/unit/test_schedulers.py
--- old/django-celery-beat-2.5.0/t/unit/test_schedulers.py 2023-03-14 09:11:44.000000000 +0100
+++ new/django-celery-beat-2.6.0/t/unit/test_schedulers.py 2024-03-03 18:06:27.000000000 +0100
@@ -159,7 +159,7 @@
os.environ["TZ"] = "Europe/Berlin"
if hasattr(time, "tzset"):
time.tzset()
- assert self.app.timezone.zone == 'Europe/Berlin'
+ assert self.app.timezone.key == 'Europe/Berlin'
# simulate last_run_at from DB - not TZ aware but localtime
right_now = datetime.utcnow()
@@ -191,7 +191,7 @@
os.environ["TZ"] = "Europe/Berlin"
if hasattr(time, "tzset"):
time.tzset()
- assert self.app.timezone.zone == 'Europe/Berlin'
+ assert self.app.timezone.key == 'Europe/Berlin'
# simulate last_run_at from DB - not TZ aware but localtime
right_now = datetime.utcnow()
# make sure to use fixed date time
@@ -227,7 +227,7 @@
os.environ["TZ"] = "Europe/Berlin"
if hasattr(time, "tzset"):
time.tzset()
- assert self.app.timezone.zone == 'America/New_York'
+ assert self.app.timezone.key == 'America/New_York'
# simulate last_run_at all none, doing the same thing that
# _default_now() would do
@@ -444,6 +444,28 @@
assert self.s.flushed == 1
assert self.m2.name in self.s._dirty
+ def test_sync_not_saves_last_run_at_while_schedule_changed(self):
+ # Update e1 last_run_at and add to dirty
+ e1 = self.s.schedule[self.m2.name]
+ time.sleep(3)
+ e1.model.last_run_at = e1._default_now()
+ self.s._dirty.add(e1.model.name)
+
+ # Record e1 pre sync last_run_at
+ e1_pre_sync_last_run_at = e1.model.last_run_at
+
+ # Set schedule_changed() == True
+ self.s._last_timestamp = monotonic()
+ # Do sync
+ self.s.sync()
+
+ # Record e1 post sync last_run_at
+ e1_m = PeriodicTask.objects.get(pk=e1.model.pk)
+ e1_post_sync_last_run_at = e1_m.last_run_at
+
+ # Check
+ assert e1_pre_sync_last_run_at == e1_post_sync_last_run_at
+
def test_sync_saves_last_run_at(self):
e1 = self.s.schedule[self.m2.name]
last_run = e1.last_run_at
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-django-cors-headers for openSUSE:Factory checked in at 2024-07-01 11:20:14
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-django-cors-headers (Old)
and /work/SRC/openSUSE:Factory/.python-django-cors-headers.new.18349 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-django-cors-headers"
Mon Jul 1 11:20:14 2024 rev:13 rq:1184019 version:4.4.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-django-cors-headers/python-django-cors-headers.changes 2024-03-21 17:01:38.575078366 +0100
+++ /work/SRC/openSUSE:Factory/.python-django-cors-headers.new.18349/python-django-cors-headers.changes 2024-07-01 11:20:50.316084009 +0200
@@ -1,0 +2,21 @@
+Sat Jun 29 17:11:17 UTC 2024 - Dirk Müller <dmueller(a)suse.com>
+
+- update to 4.4.0:
+ * Support Django 5.1.
+ * Fixed ASGI compatibility on Python 3.12. Thanks to Adrian
+ Capitanu for the report in Issue #908 and Rooyal in PR #911.
+ * Avoid adding the access-control-allow-credentials header to
+ unallowed responses.
+ * Drop Python 3.7 support.
+ * Support Python 3.12.
+ * Add CORS_ALLOW_PRIVATE_NETWORK setting, which enables support
+ for the Local Network Access draft specification. Thanks to
+ Issac Kelly in PR #745 and jjurgens0 in PR #833.
+ * Switch from urlparse() to urlsplit() for URL parsing,
+ reducing the middleware runtime up to 5%. This changes the
+ type passed to origin_found_in_white_lists(), so if you have
+ subclassed the middleware to override this method, you should
+ check it is compatible (it most likely is). Thanks to Thibaut
+ Decombe in PR #793.
+
+-------------------------------------------------------------------
Old:
----
django-cors-headers-3.13.0.tar.gz
New:
----
django-cors-headers-4.4.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-django-cors-headers.spec ++++++
--- /var/tmp/diff_new_pack.y1a3ll/_old 2024-07-01 11:20:50.744099601 +0200
+++ /var/tmp/diff_new_pack.y1a3ll/_new 2024-07-01 11:20:50.744099601 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-django-cors-headers
#
-# Copyright (c) 2022 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -16,19 +16,19 @@
#
-%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%{?sle15_python_module_pythons}
Name: python-django-cors-headers
-Version: 3.13.0
+Version: 4.4.0
Release: 0
Summary: A Django App that adds CORS headers to responses
License: MIT
URL: https://github.com/adamchainz/django-cors-headers
Source: https://github.com/adamchainz/django-cors-headers/archive/refs/tags/%{versi…
-BuildRequires: %{python_module base >= 3.8}
BuildRequires: %{python_module Django}
+BuildRequires: %{python_module base >= 3.8}
+BuildRequires: %{python_module pip}
BuildRequires: %{python_module pytest-django}
-BuildRequires: %{python_module setuptools}
+BuildRequires: %{python_module wheel}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
Requires: python-Django
@@ -43,10 +43,10 @@
%setup -q -n django-cors-headers-%{version}
%build
-%python_build
+%pyproject_wheel
%install
-%python_install
+%pyproject_install
%python_expand %fdupes %{buildroot}%{$python_sitelib}
%check
++++++ django-cors-headers-3.13.0.tar.gz -> django-cors-headers-4.4.0.tar.gz ++++++
++++ 6596 lines of diff (skipped)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-blosc for openSUSE:Factory checked in at 2024-07-01 11:20:07
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-blosc (Old)
and /work/SRC/openSUSE:Factory/.python-blosc.new.18349 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-blosc"
Mon Jul 1 11:20:07 2024 rev:23 rq:1184012 version:1.11.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-blosc/python-blosc.changes 2024-04-29 17:58:26.503579465 +0200
+++ /work/SRC/openSUSE:Factory/.python-blosc.new.18349/python-blosc.changes 2024-07-01 11:20:48.072002258 +0200
@@ -1,0 +2,11 @@
+Sat Jun 29 16:40:01 UTC 2024 - Dirk Müller <dmueller(a)suse.com>
+
+- update to 1.11.2:
+ * Add support for NumPy 2.0. Thanks to Michał Górny.
+ * Internal C-Blosc sources updated to 1.21.6.
+ * Add assembly source in MANIFEST.in. Thanks to Ben Hekster.
+ * Deprecated support for Python 3.8 and added support for
+ Python 3.12.
+ * Some fixes in the building process.
+
+-------------------------------------------------------------------
Old:
----
blosc-1.11.1.tar.gz
New:
----
blosc-1.11.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-blosc.spec ++++++
--- /var/tmp/diff_new_pack.VS2waB/_old 2024-07-01 11:20:48.632022659 +0200
+++ /var/tmp/diff_new_pack.VS2waB/_new 2024-07-01 11:20:48.636022804 +0200
@@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: python-blosc
-Version: 1.11.1
+Version: 1.11.2
Release: 0
Summary: Blosc data compressor for Python
License: MIT
++++++ blosc-1.11.1.tar.gz -> blosc-1.11.2.tar.gz ++++++
++++ 242098 lines of diff (skipped)
1
0