Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-libusb1 for openSUSE:Factory 
checked in at 2026-07-02 20:09:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-libusb1 (Old)
 and      /work/SRC/openSUSE:Factory/.python-libusb1.new.1982 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-libusb1"

Thu Jul  2 20:09:57 2026 rev:10 rq:1363033 version:3.4.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-libusb1/python-libusb1.changes    
2025-07-01 11:35:26.172497281 +0200
+++ /work/SRC/openSUSE:Factory/.python-libusb1.new.1982/python-libusb1.changes  
2026-07-02 20:13:14.009243662 +0200
@@ -1,0 +2,10 @@
+Wed Jul  1 16:22:42 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 3.4.0:
+  * Fix Python 3.14 DeprecationWarning caused by implicit ctypes
+    layout when using _pack_ = 1.
+  * Bundle libusb1 1.0.29 dlls in Windows wheels
+  * Fix a licence inconsistency: the old pypi classifier was
+    refering to the LGPL2+ instead of the LGPL2.1+ .
+
+-------------------------------------------------------------------

Old:
----
  libusb1-3.3.1.tar.gz

New:
----
  libusb1-3.4.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-libusb1.spec ++++++
--- /var/tmp/diff_new_pack.4Y12Tx/_old  2026-07-02 20:13:14.901274543 +0200
+++ /var/tmp/diff_new_pack.4Y12Tx/_new  2026-07-02 20:13:14.913274959 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-libusb1
 #
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 %{?sle15_python_module_pythons}
 Name:           python-libusb1
-Version:        3.3.1
+Version:        3.4.0
 Release:        0
 Summary:        Python wrapper for libusb-1.0
 # Relicensed from GPL to LGPLv2.1+ in May 2015

++++++ libusb1-3.3.1.tar.gz -> libusb1-3.4.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libusb1-3.3.1/.gitattributes 
new/libusb1-3.4.0/.gitattributes
--- old/libusb1-3.3.1/.gitattributes    2019-05-10 00:49:51.000000000 +0200
+++ new/libusb1-3.4.0/.gitattributes    1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-usb1/_version.py export-subst
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libusb1-3.3.1/.gitignore new/libusb1-3.4.0/.gitignore
--- old/libusb1-3.3.1/.gitignore        2020-11-29 10:11:16.000000000 +0100
+++ new/libusb1-3.4.0/.gitignore        1970-01-01 01:00:00.000000000 +0100
@@ -1,6 +0,0 @@
-/test-libusb/
-/MANIFEST
-/dist/
-/build/
-*.pyc
-/.eggs/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libusb1-3.3.1/.pylintrc new/libusb1-3.4.0/.pylintrc
--- old/libusb1-3.3.1/.pylintrc 2024-12-28 13:46:10.000000000 +0100
+++ new/libusb1-3.4.0/.pylintrc 1970-01-01 01:00:00.000000000 +0100
@@ -1,636 +0,0 @@
-[MAIN]
-
-# Analyse import fallback blocks. This can be used to support both Python 2 and
-# 3 compatible code, which means that the block might have code that exists
-# only in one or another interpreter, leading to false positives when analysed.
-analyse-fallback-blocks=no
-
-# Clear in-memory caches upon conclusion of linting. Useful if running pylint
-# in a server-like mode.
-clear-cache-post-run=no
-
-# Load and enable all available extensions. Use --list-extensions to see a list
-# all available extensions.
-#enable-all-extensions=
-
-# In error mode, messages with a category besides ERROR or FATAL are
-# suppressed, and no reports are done by default. Error mode is compatible with
-# disabling specific errors.
-#errors-only=
-
-# Always return a 0 (non-error) status code, even if lint errors are found.
-# This is primarily useful in continuous integration scripts.
-#exit-zero=
-
-# A comma-separated list of package or module names from where C extensions may
-# be loaded. Extensions are loading into the active Python interpreter and may
-# run arbitrary code.
-extension-pkg-allow-list=
-
-# A comma-separated list of package or module names from where C extensions may
-# be loaded. Extensions are loading into the active Python interpreter and may
-# run arbitrary code. (This is an alternative name to extension-pkg-allow-list
-# for backward compatibility.)
-extension-pkg-whitelist=
-
-# Return non-zero exit code if any of these messages/categories are detected,
-# even if score is above --fail-under value. Syntax same as enable. Messages
-# specified are enabled, while categories only check already-enabled messages.
-fail-on=
-
-# Specify a score threshold under which the program will exit with error.
-fail-under=10
-
-# Interpret the stdin as a python script, whose filename needs to be passed as
-# the module_or_package argument.
-#from-stdin=
-
-# Files or directories to be skipped. They should be base names, not paths.
-ignore=CVS,_version.py
-
-# Add files or directories matching the regular expressions patterns to the
-# ignore-list. The regex matches against paths and can be in Posix or Windows
-# format. Because '\\' represents the directory delimiter on Windows systems,
-# it can't be used as an escape character.
-ignore-paths=
-
-# Files or directories matching the regular expression patterns are skipped.
-# The regex matches against base names, not paths. The default value ignores
-# Emacs file locks
-ignore-patterns=^\.#
-
-# List of module names for which member attributes should not be checked
-# (useful for modules/projects where namespaces are manipulated during runtime
-# and thus existing member attributes cannot be deduced by static analysis). It
-# supports qualified module names, as well as Unix pattern matching.
-ignored-modules=usb1._libusb1
-
-# Python code to execute, usually for sys.path manipulation such as
-# pygtk.require().
-#init-hook=
-
-# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the
-# number of processors available to use, and will cap the count on Windows to
-# avoid hangs.
-jobs=1
-
-# Control the amount of potential inferred values when inferring a single
-# object. This can help the performance when dealing with large functions or
-# complex, nested conditions.
-limit-inference-results=100
-
-# List of plugins (as comma separated values of python module names) to load,
-# usually to register additional checkers.
-load-plugins=
-
-# Pickle collected data for later comparisons.
-persistent=yes
-
-# Minimum Python version to use for version dependent checks. Will default to
-# the version used to run pylint.
-py-version=3.11
-
-# Discover python modules and packages in the file system subtree.
-recursive=no
-
-# Add paths to the list of the source roots. Supports globbing patterns. The
-# source root is an absolute path or a path relative to the current working
-# directory used to determine a package namespace for modules located under the
-# source root.
-source-roots=
-
-# When enabled, pylint would attempt to guess common misconfiguration and emit
-# user-friendly hints instead of false-positive error messages.
-suggestion-mode=yes
-
-# Allow loading of arbitrary C extensions. Extensions are imported into the
-# active Python interpreter and may run arbitrary code.
-unsafe-load-any-extension=no
-
-# In verbose mode, extra non-checker-related info will be displayed.
-#verbose=
-
-
-[BASIC]
-
-# Naming style matching correct argument names.
-argument-naming-style=snake_case
-
-# Regular expression matching correct argument names. Overrides argument-
-# naming-style. If left empty, argument names will be checked with the set
-# naming style.
-#argument-rgx=
-
-# Naming style matching correct attribute names.
-attr-naming-style=snake_case
-
-# Regular expression matching correct attribute names. Overrides attr-naming-
-# style. If left empty, attribute names will be checked with the set naming
-# style.
-#attr-rgx=
-
-# Bad variable names which should always be refused, separated by a comma.
-bad-names=foo,
-          bar,
-          baz,
-          toto,
-          tutu,
-          tata
-
-# Bad variable names regexes, separated by a comma. If names match any regex,
-# they will always be refused
-bad-names-rgxs=
-
-# Naming style matching correct class attribute names.
-class-attribute-naming-style=any
-
-# Regular expression matching correct class attribute names. Overrides class-
-# attribute-naming-style. If left empty, class attribute names will be checked
-# with the set naming style.
-#class-attribute-rgx=
-
-# Naming style matching correct class constant names.
-class-const-naming-style=UPPER_CASE
-
-# Regular expression matching correct class constant names. Overrides class-
-# const-naming-style. If left empty, class constant names will be checked with
-# the set naming style.
-#class-const-rgx=
-
-# Naming style matching correct class names.
-class-naming-style=PascalCase
-
-# Regular expression matching correct class names. Overrides class-naming-
-# style. If left empty, class names will be checked with the set naming style.
-#class-rgx=
-
-# Naming style matching correct constant names.
-const-naming-style=UPPER_CASE
-
-# Regular expression matching correct constant names. Overrides const-naming-
-# style. If left empty, constant names will be checked with the set naming
-# style.
-#const-rgx=
-
-# Minimum line length for functions/classes that require docstrings, shorter
-# ones are exempt.
-docstring-min-length=-1
-
-# Naming style matching correct function names.
-function-naming-style=snake_case
-
-# Regular expression matching correct function names. Overrides function-
-# naming-style. If left empty, function names will be checked with the set
-# naming style.
-#function-rgx=
-
-# Good variable names which should always be accepted, separated by a comma.
-good-names=i,
-           j,
-           k,
-           ex,
-           Run,
-           _
-
-# Good variable names regexes, separated by a comma. If names match any regex,
-# they will always be accepted
-good-names-rgxs=
-
-# Include a hint for the correct naming format with invalid-name.
-include-naming-hint=no
-
-# Naming style matching correct inline iteration names.
-inlinevar-naming-style=any
-
-# Regular expression matching correct inline iteration names. Overrides
-# inlinevar-naming-style. If left empty, inline iteration names will be checked
-# with the set naming style.
-#inlinevar-rgx=
-
-# Naming style matching correct method names.
-method-naming-style=snake_case
-
-# Regular expression matching correct method names. Overrides method-naming-
-# style. If left empty, method names will be checked with the set naming style.
-#method-rgx=
-
-# Naming style matching correct module names.
-module-naming-style=snake_case
-
-# Regular expression matching correct module names. Overrides module-naming-
-# style. If left empty, module names will be checked with the set naming style.
-#module-rgx=
-
-# Colon-delimited sets of names that determine each other's naming style when
-# the name regexes allow several styles.
-name-group=
-
-# Regular expression which should only match function or class names that do
-# not require a docstring.
-no-docstring-rgx=^_
-
-# List of decorators that produce properties, such as abc.abstractproperty. Add
-# to this list to register other decorators that produce valid properties.
-# These decorators are taken in consideration only for invalid-name.
-property-classes=abc.abstractproperty
-
-# Regular expression matching correct type alias names. If left empty, type
-# alias names will be checked with the set naming style.
-#typealias-rgx=
-
-# Regular expression matching correct type variable names. If left empty, type
-# variable names will be checked with the set naming style.
-#typevar-rgx=
-
-# Naming style matching correct variable names.
-variable-naming-style=snake_case
-
-# Regular expression matching correct variable names. Overrides variable-
-# naming-style. If left empty, variable names will be checked with the set
-# naming style.
-#variable-rgx=
-
-
-[CLASSES]
-
-# Warn about protected attribute access inside special methods
-check-protected-access-in-special-methods=no
-
-# List of method names used to declare (i.e. assign) instance attributes.
-defining-attr-methods=__init__,
-                      __new__,
-                      setUp,
-                      asyncSetUp,
-                      __post_init__
-
-# List of member names, which should be excluded from the protected access
-# warning.
-exclude-protected=_asdict,_fields,_replace,_source,_make,os._exit
-
-# List of valid names for the first argument in a class method.
-valid-classmethod-first-arg=cls
-
-# List of valid names for the first argument in a metaclass class method.
-valid-metaclass-classmethod-first-arg=mcs
-
-
-[DESIGN]
-
-# List of regular expressions of class ancestor names to ignore when counting
-# public methods (see R0903)
-exclude-too-few-public-methods=
-
-# List of qualified class names to ignore when counting class parents (see
-# R0901)
-ignored-parents=
-
-# Maximum number of arguments for function / method.
-max-args=5
-
-# Maximum number of attributes for a class (see R0902).
-max-attributes=7
-
-# Maximum number of boolean expressions in an if statement (see R0916).
-max-bool-expr=5
-
-# Maximum number of branch for function / method body.
-max-branches=12
-
-# Maximum number of locals for function / method body.
-max-locals=15
-
-# Maximum number of parents for a class (see R0901).
-max-parents=7
-
-# Maximum number of public methods for a class (see R0904).
-max-public-methods=20
-
-# Maximum number of return / yield for function / method body.
-max-returns=6
-
-# Maximum number of statements in function / method body.
-max-statements=50
-
-# Minimum number of public methods for a class (see R0903).
-min-public-methods=2
-
-
-[EXCEPTIONS]
-
-# Exceptions that will emit a warning when caught.
-overgeneral-exceptions=builtins.BaseException,builtins.Exception
-
-
-[FORMAT]
-
-# Expected format of line ending, e.g. empty (any line ending), LF or CRLF.
-expected-line-ending-format=
-
-# Regexp for a line that is allowed to be longer than the limit.
-ignore-long-lines=^\s*(# )?<?https?://\S+>?$
-
-# Number of spaces of indent required inside a hanging or continued line.
-indent-after-paren=4
-
-# String used as indentation unit. This is usually "    " (4 spaces) or "\t" (1
-# tab).
-indent-string='    '
-
-# Maximum number of characters on a single line.
-max-line-length=100
-
-# Maximum number of lines in a module.
-max-module-lines=1000
-
-# Allow the body of a class to be on the same line as the declaration if body
-# contains single statement.
-single-line-class-stmt=no
-
-# Allow the body of an if to be on the same line as the test if there is no
-# else.
-single-line-if-stmt=no
-
-
-[IMPORTS]
-
-# List of modules that can be imported at any level, not just the top level
-# one.
-allow-any-import-level=
-
-# Allow explicit reexports by alias from a package __init__.
-allow-reexport-from-package=no
-
-# Allow wildcard imports from modules that define __all__.
-allow-wildcard-with-all=no
-
-# Deprecated modules which should not be used, separated by a comma.
-deprecated-modules=
-
-# Output a graph (.gv or any supported image format) of external dependencies
-# to the given file (report RP0402 must not be disabled).
-ext-import-graph=
-
-# Output a graph (.gv or any supported image format) of all (i.e. internal and
-# external) dependencies to the given file (report RP0402 must not be
-# disabled).
-import-graph=
-
-# Output a graph (.gv or any supported image format) of internal dependencies
-# to the given file (report RP0402 must not be disabled).
-int-import-graph=
-
-# Force import order to recognize a module as part of the standard
-# compatibility libraries.
-known-standard-library=
-
-# Force import order to recognize a module as part of a third party library.
-known-third-party=enchant
-
-# Couples of modules and preferred modules, separated by a comma.
-preferred-modules=
-
-
-[LOGGING]
-
-# The type of string formatting that logging methods do. `old` means using %
-# formatting, `new` is for `{}` formatting.
-logging-format-style=old
-
-# Logging modules to check that the string format arguments are in logging
-# function parameter format.
-logging-modules=logging
-
-
-[MESSAGES CONTROL]
-
-# Only show warnings with the listed confidence levels. Leave empty to show
-# all. Valid levels: HIGH, CONTROL_FLOW, INFERENCE, INFERENCE_FAILURE,
-# UNDEFINED.
-confidence=HIGH,
-           CONTROL_FLOW,
-           INFERENCE,
-           INFERENCE_FAILURE,
-           UNDEFINED
-
-# Disable the message, report, category or checker with the given id(s). You
-# can either give multiple identifiers separated by comma (,) or put this
-# option multiple times (only on the command line, not in the configuration
-# file where it should appear only once). You can also use "--disable=all" to
-# disable everything first and then re-enable specific checks. For example, if
-# you want to run only the similarities checker, you can use "--disable=all
-# --enable=similarities". If you want to run only the classes checker, but have
-# no Warning level messages displayed, use "--disable=all --enable=classes
-# --disable=W".
-disable=raw-checker-failed,
-        bad-inline-option,
-        locally-disabled,
-        file-ignored,
-        suppressed-message,
-        useless-suppression,
-        deprecated-pragma,
-        use-implicit-booleaness-not-comparison-to-string,
-        use-implicit-booleaness-not-comparison-to-zero,
-        use-symbolic-message-instead
-
-# Enable the message, report, category or checker with the given id(s). You can
-# either give multiple identifier separated by comma (,) or put this option
-# multiple time (only on the command line, not in the configuration file where
-# it should appear only once). See also the "--disable" option for examples.
-enable=
-
-
-[METHOD_ARGS]
-
-# List of qualified names (i.e., library.method) which require a timeout
-# parameter e.g. 'requests.api.get,requests.api.post'
-timeout-methods=requests.api.delete,requests.api.get,requests.api.head,requests.api.options,requests.api.patch,requests.api.post,requests.api.put,requests.api.request
-
-
-[MISCELLANEOUS]
-
-# List of note tags to take in consideration, separated by a comma.
-notes=FIXME,
-      XXX,
-      TODO
-
-# Regular expression of note tags to take in consideration.
-notes-rgx=
-
-
-[REFACTORING]
-
-# Maximum number of nested blocks for function / method body
-max-nested-blocks=5
-
-# Complete name of functions that never returns. When checking for
-# inconsistent-return-statements if a never returning function is called then
-# it will be considered as an explicit return statement and no message will be
-# printed.
-never-returning-functions=sys.exit,argparse.parse_error
-
-
-[REPORTS]
-
-# Python expression which should return a score less than or equal to 10. You
-# have access to the variables 'fatal', 'error', 'warning', 'refactor',
-# 'convention', and 'info' which contain the number of messages in each
-# category, as well as 'statement' which is the total number of statements
-# analyzed. This score is used by the global evaluation report (RP0004).
-evaluation=max(0, 0 if fatal else 10.0 - ((float(5 * error + warning + 
refactor + convention) / statement) * 10))
-
-# Template used to display messages. This is a python new-style format string
-# used to format the message information. See doc for all details.
-msg-template=
-
-# Set the output format. Available formats are: text, parseable, colorized,
-# json2 (improved json format), json (old json format) and msvs (visual
-# studio). You can also give a reporter class, e.g.
-# mypackage.mymodule.MyReporterClass.
-#output-format=
-
-# Tells whether to display a full report or only the messages.
-reports=no
-
-# Activate the evaluation score.
-score=yes
-
-
-[SIMILARITIES]
-
-# Comments are removed from the similarity computation
-ignore-comments=yes
-
-# Docstrings are removed from the similarity computation
-ignore-docstrings=yes
-
-# Imports are removed from the similarity computation
-ignore-imports=yes
-
-# Signatures are removed from the similarity computation
-ignore-signatures=yes
-
-# Minimum lines number of a similarity.
-min-similarity-lines=4
-
-
-[SPELLING]
-
-# Limits count of emitted suggestions for spelling mistakes.
-max-spelling-suggestions=4
-
-# Spelling dictionary name. Available dictionaries: en (aspell), en_AU
-# (aspell), en_CA (aspell), en_GB (aspell), en_US (aspell), fr (hunspell),
-# fr_BE (hunspell), fr_CA (hunspell), fr_CH (hunspell), fr_FR (hunspell), fr_LU
-# (hunspell), fr_MC (hunspell).
-spelling-dict=
-
-# List of comma separated words that should be considered directives if they
-# appear at the beginning of a comment and should not be checked.
-spelling-ignore-comment-directives=fmt: on,fmt: 
off,noqa:,noqa,nosec,isort:skip,mypy:
-
-# List of comma separated words that should not be checked.
-spelling-ignore-words=
-
-# A path to a file that contains the private dictionary; one word per line.
-spelling-private-dict-file=
-
-# Tells whether to store unknown words to the private dictionary (see the
-# --spelling-private-dict-file option) instead of raising a message.
-spelling-store-unknown-words=no
-
-
-[STRING]
-
-# This flag controls whether inconsistent-quotes generates a warning when the
-# character used as a quote delimiter is used inconsistently within a module.
-check-quote-consistency=no
-
-# This flag controls whether the implicit-str-concat should generate a warning
-# on implicit string concatenation in sequences defined over several lines.
-check-str-concat-over-line-jumps=no
-
-
-[TYPECHECK]
-
-# List of decorators that produce context managers, such as
-# contextlib.contextmanager. Add to this list to register other decorators that
-# produce valid context managers.
-contextmanager-decorators=contextlib.contextmanager
-
-# List of members which are set dynamically and missed by pylint inference
-# system, and so shouldn't trigger E1101 when accessed. Python regular
-# expressions are accepted.
-generated-members=
-
-# Tells whether to warn about missing members when the owner of the attribute
-# is inferred to be None.
-ignore-none=yes
-
-# This flag controls whether pylint should warn about no-member and similar
-# checks whenever an opaque object is returned when inferring. The inference
-# can return multiple potential results while evaluating a Python object, but
-# some branches might not be evaluated, which results in partial inference. In
-# that case, it might be useful to still emit no-member and other checks for
-# the rest of the inferred objects.
-ignore-on-opaque-inference=yes
-
-# List of symbolic message names to ignore for Mixin members.
-ignored-checks-for-mixins=no-member,
-                          not-async-context-manager,
-                          not-context-manager,
-                          attribute-defined-outside-init
-
-# List of class names for which member attributes should not be checked (useful
-# for classes with dynamically set attributes). This supports the use of
-# qualified names.
-ignored-classes=optparse.Values,thread._local,_thread._local,argparse.Namespace
-
-# Show a hint with possible names when a member name was not found. The aspect
-# of finding the hint is based on edit distance.
-missing-member-hint=yes
-
-# The minimum edit distance a name should have in order to be considered a
-# similar match for a missing member name.
-missing-member-hint-distance=1
-
-# The total number of similar names that should be taken in consideration when
-# showing a hint for a missing member.
-missing-member-max-choices=1
-
-# Regex pattern to define which classes are considered mixins.
-mixin-class-rgx=.*[Mm]ixin
-
-# List of decorators that change the signature of a decorated function.
-signature-mutators=
-
-
-[VARIABLES]
-
-# List of additional names supposed to be defined in builtins. Remember that
-# you should avoid defining new builtins when possible.
-additional-builtins=
-
-# Tells whether unused global variables should be treated as a violation.
-allow-global-unused-variables=yes
-
-# List of names allowed to shadow builtins
-allowed-redefined-builtins=
-
-# List of strings which can identify a callback function by name. A callback
-# name must start or end with one of those strings.
-callbacks=cb_,
-          _cb
-
-# A regular expression matching the name of dummy variables (i.e. expected to
-# not be used).
-dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_
-
-# Argument names that match this expression will be ignored.
-ignored-argument-names=_.*|^ignored_|^unused_
-
-# Tells whether we should check for unused import in __init__ files.
-init-import=no
-
-# List of qualified module names which can have objects that can redefine
-# builtins.
-redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libusb1-3.3.1/KEYS new/libusb1-3.4.0/KEYS
--- old/libusb1-3.3.1/KEYS      2020-11-29 08:39:10.000000000 +0100
+++ new/libusb1-3.4.0/KEYS      1970-01-01 01:00:00.000000000 +0100
@@ -1,160 +0,0 @@
-This file contains the PGP keys authorised to sign releases.
-
-NOTE: Releases from version 1.8.1 onward must be expected to be signed.
-If one is not signed, please do not use it, and report it as a bug here:
-  https://github.com/vpelletier/python-libusb1/issues/
-
-Users:
-  Adding/updating trusted keys:
-         gpg --homedir <gpg homedir to verify this project's releases>
-             --import KEYS
-  Fetching and checking a release (see https://stackoverflow.com/a/62687869):
-         wget <pypi release URL>
-         wget <pypi release URL>.asc
-         gpg --homedir <gpg homedir to verify this project's releases>
-             --verify <release file name>.asc
-Release maintainers:
-  Adding your key to this file:
-         LC_ALL=C; (gpg --list-sigs <your key id>
-              && gpg --armor --export <your key id>) >> KEYS
-  Signing and publishing a release:
-         git clean -idx
-         python setup.py sdist check
-         # Check dist content before signing as desired
-         gpg --armor --detach-sign dist/<release file>
-         twine upload dist/<release file> dist/<release file>.asc
-
-pub   rsa4096 2014-08-21 [SC]
-      983AE8B73B9115987A923845CAC936914257B0C1
-uid           [ unknown] Vincent Pelletier <[email protected]>
-sig 3        CAC936914257B0C1 2014-08-21  Vincent Pelletier 
<[email protected]>
-uid           [ unknown] Vincent Pelletier <[email protected]>
-sig 3        CAC936914257B0C1 2014-08-21  Vincent Pelletier 
<[email protected]>
-sub   rsa4096 2014-08-21 [E]
-sig          CAC936914257B0C1 2014-08-21  Vincent Pelletier 
<[email protected]>
-sub   rsa4096 2020-07-05 [S] [expires: 2022-07-05]
-sig          CAC936914257B0C1 2020-07-05  Vincent Pelletier 
<[email protected]>
-
------BEGIN PGP PUBLIC KEY BLOCK-----
-
-mQINBFP2ZD4BEAC3jysokNBSK8cKSO3AKg8a5noHsGB8G1yMzTURUlsoYGTCVFbx
-1S35xww0w2sgbJvMe8TG1hEReOVyf7GNIlDYtsEznWkib4MQQwLYVOgZE2ULxQOI
-gYmULaFa97CICdzt3VvmmcbWyxyNe4JaPKinAXmS46B70ep33wVDYih/ptPvAJxO
-Q+OU2AiPHcn2iEDuzP/1ey2YFnC4gLe2dG8Ri9JMf3Gxb4rOWJEf4mxHKWU9gC3i
-0Ne++z5cIXRY4Hiz37t0QKVEd6nOn/niR8KyjOoIHOu2n6cv05x+5Clq+5dfltU4
-/5Lg7UZF43aLr4W/udJ6PddAQnpHjIb7poFDTZqGGRvI59vsWCcNuzI1ENX+clBq
-fnbdGgfejY+cpjs1hyQGF5NduefG2A6utZXGsKqh6p8vslO2+3dDu6rlCUlhNoKH
-naXEPGjhyVZyeztm5VO4qTlvw71a4+BQZ0LV/3r3tVuD3RDEIOExn0w5QNoZ9s6M
-KlTWLNxLBmiH6qHKJUdaNtpZqkijEezeMh6pu6VVjzxEAWvejdvU/zMr81cVRFxt
-Y3mvtBFtNphFTHj3hYdY2U9WPRgpW7rmrvRRJdoV9MZxdiVZcD+qfrBua1Qxgd4X
-6xW+IOURd3o7oHX9Zlk0BUH671GQPUNeLEnAmd4gu2z2YairXW1ErK7YowARAQAB
-tCpWaW5jZW50IFBlbGxldGllciA8dmluY2VudC5wbHJAd2FuYWRvby5mcj6JAjkE
-EwECACMFAlP2Ze8CGwMHCwkIBwMCAQYVCAIJCgsEFgIDAQIeAQIXgAAKCRDKyTaR
-QlewwSk9EACf53GA86mlTl7Y5iHPm0/LbieldvBT2TcqElPTj1EGWXaYqfWr05lr
-1wSYCx0WWtcFP4zO7eExMsMKiRmdsxtkatrqlENb7SiRQ3kEFkiUWP9a1dFiGdlp
-X/5w4yIbWtd35y8Y6GR3e0YWRQ6FFTAKFTYQR5IfyGmWE8BfLo3RDH6CbHB4o7xS
-MpTYmmP4XqZgLMX8RpD9ikrvP0hB6rEUJ+chJWcNzqqAoLim91ViwOy5Fybwlp32
-jlPw722fOooTnAHDlbGffviBQQ1wcLOFtL3ODPOzAnL0Sm4rFmMghVG7qZgA+TWa
-/Fo21php2FCoVrx7ONlktkEm8niO3v/k6FMxi56yaFrk33O34fxbwVc3O+5xAKFt
-NfN38+DL3VuW2Fix1oA31xG+7HKVtLE03f1njjRAH7Y7oEiP77oy26IsPqmJfZfw
-kMweXV2haaLDKdGrF+UhYt4NFYeCcPDsl6FxGuVy9G61l8ko2xYG5pdbsmL4k2p8
-sHChuj49lbckhSPyhnnp/+2Bcwo/cWUK1Xh0S4u+ARlKKp/nJGKsQ3GpFlATMnhX
-4Mvwj/X24Its/VQi0mofXLeqonUSesj4duB7XDHLGy9cmRb4NSv6HEW9mrPaB8Xh
-b9Ws7tIEFC7xcx9z4qUTb8Czjpk5riJ9Jd/ye/hoa2ttqNS+fenlM7QwVmluY2Vu
-dCBQZWxsZXRpZXIgPHBlbGxldGllci52aW5jZW50QHdhbmFkb28uZnI+iQJEBDAB
-CAAuBQJXDYjJJx0gTWFpbCBhY2NvdW50IHRlcm1pbmF0ZWQgb24gMjAxNi8wMy8y
-MAAKCRDKyTaRQlewwaNXD/4ivgizOg2aslmTQXDze8nvqY07EuCh1kLHv4w/R67F
-EkxRlBnxgW47elyYiLxAnDtZ/rR9oaNHWs/MR2bHrxfT7sG1+oYds92/hqEFrU71
-VfLjGKcqMUv7HBVm1NlYphhl2pBMiTYihWMfVGDsMth8lbdjaV0lEksbL5WiHWlf
-sab6QetmK3voK6QnP3xqKhyJBNTjGKb3qThU+c4EI57QUqvLm4bGrYNp6m+/6VIv
-MbqUAT1nScWfDYGwTHmEr3caGH0ACJ/tMoCeqgFRVx0/llbnLHlCoAOs/k3UtTDk
-ltWPVr+QWFDNDIrCeZu/PQbW4HbwEwEdZmJvuxE0waMCr+gdSTXMe05ELen75EGu
-u2CaG3weHhIUVmbp4IHc+dP6kin2GxoxThZk4QgjAvhtxZFJhpd4H36E8UsxMLvH
-FNgIdMI6RHj3OPoQM21TmTZYrWjVSojmAaiPn64ktzh6CeyNZwu73ilFRJrqwInL
-cnm36BZtfNwXAJmDDah+e3wBr1SL+pF8nEHX/nZTtnHFl5KFY8VD8oDqu1HmzNak
-2Yt9ZC8yJmuq4vXKNzbmHqiWGsgtRPUGBN1/NaPT+TXkTBPGTnYUdBdX/8PP6wGI
-ssdg20Ndp57jRcP/InjvDElTjpzxfaBHvwPkWi3E2fE9AP4m19D+ONzJxjAYM0fT
-1IkCOQQTAQIAIwUCU/ZmCwIbAwcLCQgHAwIBBhUIAgkKCwQWAgMBAh4BAheAAAoJ
-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
-=52Ev
------END PGP PUBLIC KEY BLOCK-----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libusb1-3.3.1/PKG-INFO new/libusb1-3.4.0/PKG-INFO
--- old/libusb1-3.3.1/PKG-INFO  2025-03-24 06:34:36.048849800 +0100
+++ new/libusb1-3.4.0/PKG-INFO  2026-05-16 22:57:28.435092700 +0200
@@ -1,15 +1,14 @@
-Metadata-Version: 2.1
+Metadata-Version: 2.4
 Name: libusb1
-Version: 3.3.1
+Version: 3.4.0
 Summary: Pure-python wrapper for libusb-1.0
 Home-page: https://github.com/vpelletier/python-libusb1
 Author: Vincent Pelletier
 Author-email: [email protected]
-License: LGPLv2.1+
+License-Expression: LGPL-2.1-or-later
 Keywords: usb,libusb
 Platform: any
 Classifier: Intended Audience :: Developers
-Classifier: License :: OSI Approved :: GNU Lesser General Public License v2 or 
later (LGPLv2+)
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: Implementation :: CPython
@@ -19,6 +18,8 @@
 Description-Content-Type: text/x-rst
 License-File: COPYING
 License-File: COPYING.LESSER
+Dynamic: license-file
+Dynamic: license-expression
 
 .. contents::
 
@@ -616,6 +617,15 @@
 
 Fix ``AttributeError`` in ``USBContext.setPollFDNotifiers`` introduced in 
3.3.0 .
 
+3.4.0
+-----
+
+Resolve a python 3.14 deprecation warning about packed ctypes structs.
+
+Bundle libusb1 dll 1.0.29 in Windows wheels.
+
+Fix a licence inconsistency: the old pypi classifier was refering to the 
LGPL2+ instead of the LGPL2.1+ .
+
 .. _CPython: http://www.python.org/
 
 .. _pypy: http://pypy.org/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libusb1-3.3.1/README.rst new/libusb1-3.4.0/README.rst
--- old/libusb1-3.3.1/README.rst        2025-03-24 06:27:11.000000000 +0100
+++ new/libusb1-3.4.0/README.rst        2026-05-16 22:48:34.000000000 +0200
@@ -594,6 +594,15 @@
 
 Fix ``AttributeError`` in ``USBContext.setPollFDNotifiers`` introduced in 
3.3.0 .
 
+3.4.0
+-----
+
+Resolve a python 3.14 deprecation warning about packed ctypes structs.
+
+Bundle libusb1 dll 1.0.29 in Windows wheels.
+
+Fix a licence inconsistency: the old pypi classifier was refering to the 
LGPL2+ instead of the LGPL2.1+ .
+
 .. _CPython: http://www.python.org/
 
 .. _pypy: http://pypy.org/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libusb1-3.3.1/libusb1.egg-info/PKG-INFO 
new/libusb1-3.4.0/libusb1.egg-info/PKG-INFO
--- old/libusb1-3.3.1/libusb1.egg-info/PKG-INFO 2025-03-24 06:34:35.000000000 
+0100
+++ new/libusb1-3.4.0/libusb1.egg-info/PKG-INFO 2026-05-16 22:57:28.000000000 
+0200
@@ -1,15 +1,14 @@
-Metadata-Version: 2.1
+Metadata-Version: 2.4
 Name: libusb1
-Version: 3.3.1
+Version: 3.4.0
 Summary: Pure-python wrapper for libusb-1.0
 Home-page: https://github.com/vpelletier/python-libusb1
 Author: Vincent Pelletier
 Author-email: [email protected]
-License: LGPLv2.1+
+License-Expression: LGPL-2.1-or-later
 Keywords: usb,libusb
 Platform: any
 Classifier: Intended Audience :: Developers
-Classifier: License :: OSI Approved :: GNU Lesser General Public License v2 or 
later (LGPLv2+)
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: Implementation :: CPython
@@ -19,6 +18,8 @@
 Description-Content-Type: text/x-rst
 License-File: COPYING
 License-File: COPYING.LESSER
+Dynamic: license-file
+Dynamic: license-expression
 
 .. contents::
 
@@ -616,6 +617,15 @@
 
 Fix ``AttributeError`` in ``USBContext.setPollFDNotifiers`` introduced in 
3.3.0 .
 
+3.4.0
+-----
+
+Resolve a python 3.14 deprecation warning about packed ctypes structs.
+
+Bundle libusb1 dll 1.0.29 in Windows wheels.
+
+Fix a licence inconsistency: the old pypi classifier was refering to the 
LGPL2+ instead of the LGPL2.1+ .
+
 .. _CPython: http://www.python.org/
 
 .. _pypy: http://pypy.org/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libusb1-3.3.1/libusb1.egg-info/SOURCES.txt 
new/libusb1-3.4.0/libusb1.egg-info/SOURCES.txt
--- old/libusb1-3.3.1/libusb1.egg-info/SOURCES.txt      2025-03-24 
06:34:35.000000000 +0100
+++ new/libusb1-3.4.0/libusb1.egg-info/SOURCES.txt      2026-05-16 
22:57:28.000000000 +0200
@@ -1,16 +1,10 @@
-.gitattributes
-.gitignore
-.pylintrc
 COPYING
 COPYING.LESSER
-KEYS
 MANIFEST.in
 README.rst
 libusb1.py
-runTestLibusb.sh
 setup.cfg
 setup.py
-setup.sh
 stdeb.cfg
 versioneer.py
 examples/README
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libusb1-3.3.1/runTestLibusb.sh 
new/libusb1-3.4.0/runTestLibusb.sh
--- old/libusb1-3.3.1/runTestLibusb.sh  2022-02-01 01:23:42.000000000 +0100
+++ new/libusb1-3.4.0/runTestLibusb.sh  1970-01-01 01:00:00.000000000 +0100
@@ -1,78 +0,0 @@
-#!/bin/bash
-# Run tests against multiple libusb versions.
-# Useful to check backward-compatibility with libusb versions which lack some
-# exports.
-set -eu
-
-if [ $# -lt 4 ]; then
-  echo "Usage: $0 python remote remote_name changeset [changeset [...]]"
-  exit 1
-fi
-python="$1"
-remote="$2"
-remote_name="$3"
-shift 3
-
-if [ "x$python" = "x" ]; then
-  echo "<python> argument must not be empty"
-  exit 1
-fi
-
-python_libusb1="$(dirname "$(realpath "$0")")"
-base="${python_libusb1}/test-libusb"
-venv_dir="${base}/$(basename "$python")"
-build_base="${base}/build"
-repo_dir="${base}/repo/${remote_name}"
-
-test -e "$venv_dir" && rm -r "$venv_dir"
-virtualenv --python "$python" "$venv_dir"
-"${venv_dir}/bin/pip" install "$python_libusb1"
-
-if [ -e "$repo_dir" ]; then
-  git -C "$repo_dir" fetch
-else
-  git clone --no-checkout "$remote" "$repo_dir"
-fi
-cd "$repo_dir"
-# Also test against system-installed libusb
-lib_dir_list=("")
-# Build all first, test later, so errors are all visible at the end
-while [ $# -ne 0 ]; do
-  changeset="$1"
-  shift
-  build_dir="${build_base}/${remote_name}/${changeset}"
-  if [ ! -e "$build_dir" ]; then
-    mkdir -p "$build_dir"
-    git checkout --force "$changeset"
-    git clean --force -dx
-    ./autogen.sh --prefix="$build_dir"
-    make
-    make install
-  fi
-  lib_dir_list+=("${build_dir}/lib")
-done
-
-result=0
-venv_python="${venv_dir}/bin/python"
-for lib_dir in "${lib_dir_list[@]}"; do
-  export LD_LIBRARY_PATH="${lib_dir}"
-  if "$venv_python" -m usb1.testUSB1; then
-    :
-  else
-    echo "usb1.testUSB1 failed with ${lib_dir}: status=$?"
-    result=1
-  fi
-  if "$venv_python" "${python_libusb1}/examples/listdevs.py"; then
-    :
-  else
-    echo "examples/listdevs.py failed with ${lib_dir}: status=$?"
-    result=1
-  fi
-  if timeout --preserve-status --signal INT 1 "$venv_python" 
"${python_libusb1}/examples/hotplug.py"; then
-    :
-  else
-    echo "examples/hotplug.py failed with ${lib_dir}: status=$?"
-    result=1
-  fi
-done
-exit $result
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libusb1-3.3.1/setup.cfg new/libusb1-3.4.0/setup.cfg
--- old/libusb1-3.3.1/setup.cfg 2025-03-24 06:34:36.048849800 +0100
+++ new/libusb1-3.4.0/setup.cfg 2026-05-16 22:57:28.435624400 +0200
@@ -5,14 +5,13 @@
 author_email = [email protected]
 classifiers = 
        Intended Audience :: Developers
-       License :: OSI Approved :: GNU Lesser General Public License v2 or 
later (LGPLv2+)
        Operating System :: OS Independent
        Programming Language :: Python :: 3
        Programming Language :: Python :: Implementation :: CPython
        Programming Language :: Python :: Implementation :: PyPy
        Topic :: Software Development :: Libraries
        Topic :: System :: Hardware :: Hardware Drivers
-license = LGPLv2.1+
+license_expression = LGPL-2.1-or-later
 description = Pure-python wrapper for libusb-1.0
 long_description = file: README.rst
 long_description_content_type = text/x-rst
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libusb1-3.3.1/setup.py new/libusb1-3.4.0/setup.py
--- old/libusb1-3.3.1/setup.py  2025-03-24 06:34:02.000000000 +0100
+++ new/libusb1-3.4.0/setup.py  2026-05-16 22:48:34.000000000 +0200
@@ -34,9 +34,9 @@
     sys.exit(1)
 
 CURRENT_WINDOWS_7Z_SHA256 = (
-    'ce633f98c3ce6aec82be3c0d273ab8bdd160642174faba4eb47d8dcd92af7f05'
+    '964a38152ca9a104cd00ec8d2f0617b89cd814f9b635e29763c68563d951521d'
 )
-CURRENT_DLL_VERSION = '1.0.28.11946'
+CURRENT_DLL_VERSION = '1.0.29.11953'
 
 cmdclass = versioneer.get_cmdclass()
 class upload(Command):
@@ -123,7 +123,7 @@
             archive_sha256 = hashlib.sha256(archive_file.read()).hexdigest()
         if archive_sha256 != CURRENT_WINDOWS_7Z_SHA256:
             raise ValueError(
-                'Windows release sha56 mismatch: %r fetched with a sha256 of 
%r' % (
+                'Windows release sha256 mismatch: %r fetched with a sha256 of 
%r' % (
                     url,
                     archive_sha256,
                 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libusb1-3.3.1/setup.sh new/libusb1-3.4.0/setup.sh
--- old/libusb1-3.3.1/setup.sh  2025-03-04 05:50:19.000000000 +0100
+++ new/libusb1-3.4.0/setup.sh  1970-01-01 01:00:00.000000000 +0100
@@ -1,33 +0,0 @@
-#!/bin/bash
-set -eu
-cd "$(dirname "$(realpath "$0")")"
-for python_v in python3 pypy3; do
-  if ./runTestLibusb.sh "$python_v" https://github.com/libusb/libusb.git 
libusb.git master v1.0.19 v1.0.22 v1.0.24 v1.0.25 v1.0.26 v1.0.27; then
-    :
-  else
-    echo "runTestLibusb.sh failed with ${python_v} ($("$python_v" --version))"
-    exit 1
-  fi
-done
-export I_KNOW_HOW_TO_RELEASE_PYTHON_LIBUSB1=1
-echo "Fetching libusb1 windows binary distribution..."
-python3 setup.py --quiet update_libusb
-echo "Building distributions..."
-embedded_dll_path="usb1/libusb-1.0.dll"
-for python_v in python3; do
-  echo "$python_v bdist_wheel win32"
-  cp "build/win32/libusb-1.0.dll" "$embedded_dll_path"
-  "${python_v}" setup.py --quiet bdist_wheel --plat-name win32 clean --all
-  cp "build/win_amd64/libusb-1.0.dll" "$embedded_dll_path"
-  "${python_v}" setup.py --quiet bdist_wheel --plat-name win_amd64 clean --all
-  rm "$embedded_dll_path"
-  "${python_v}" setup.py --quiet bdist_wheel --plat-name any clean --all
-done
-python3 setup.py --quiet sdist clean --all
-release_prefix="dist/libusb1-$(python3 -c 'import versioneer; 
print(versioneer.get_version())')"
-twine check --strict "${release_prefix}"*.{whl,tar.gz}
-echo "Done. Next, check their content, sign each:"
-echo "  for release in ${release_prefix}-*.whl ${release_prefix}.tar.gz; do 
gpg --armor --detach-sign \"\$release\"; done"
-echo "upload them to pypi:"
-echo "  twine upload ${release_prefix}-*.whl ${release_prefix}.tar.gz"
-echo "and create a new release on github"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libusb1-3.3.1/usb1/_libusb1.py 
new/libusb1-3.4.0/usb1/_libusb1.py
--- old/libusb1-3.3.1/usb1/_libusb1.py  2025-03-24 06:27:11.000000000 +0100
+++ new/libusb1-3.4.0/usb1/_libusb1.py  2026-05-16 22:48:34.000000000 +0200
@@ -108,6 +108,7 @@
     #   will have no effect.
     # pylint: disable=protected-access
     result._pack_ = 1
+    result._layout_ = 'ms'
     result._fields_ = field_list
     # pylint: enable=protected-access
     return result
@@ -1070,6 +1071,7 @@
 
 class libusb_control_setup(Structure):
     _pack_ = 1
+    _layout_ = 'ms'
     _fields_ = [
         ('bmRequestType', c_uint8),
         ('bRequest', c_uint8),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libusb1-3.3.1/usb1/_version.py 
new/libusb1-3.4.0/usb1/_version.py
--- old/libusb1-3.3.1/usb1/_version.py  2025-03-24 06:34:36.048849800 +0100
+++ new/libusb1-3.4.0/usb1/_version.py  2026-05-16 22:57:28.435753000 +0200
@@ -8,11 +8,11 @@
 
 version_json = '''
 {
- "date": "2025-03-24T05:33:43+0000",
+ "date": "2026-05-16T22:56:31+0200",
  "dirty": false,
  "error": null,
- "full-revisionid": "292143c8f4465fdcb2c35ed40cdd7e4dd8d031e1",
- "version": "3.3.1"
+ "full-revisionid": "c9d2c1810e459a6b72848984c6ba228f137be285",
+ "version": "3.4.0"
 }
 '''  # END VERSION_JSON
 

Reply via email to