You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Drop support for python 3.11 and pypy3.11; python 3.12 is the new minimum version. Python 3.15 was added to CI (@arthurzam)
snakeoil.test.code_quality.Slots: fix test_slots_mandatory and test_shadowing killing any run under pytest-xdist with execnet.gateway_base.DumpError: can't serialize <class 'type'>. They named their subtests with the class object itself, which cannot cross the boundary to a worker; the subtest is now identified by the class' qualified name, as the other checks in the module already were (@arthurzam)
snakeoil.compression.ArComp.unpack: reimplemented on top of subprocess instead of snakeoil.process.spawn (@arthurzam, #119)
snakeoil.obj.DelayedInstantiation: fix AttributeError: __delayed__ when several threads first touch the same proxy at once (@arthurzam)
snakeoil.klass.GenericRichComparison: fix __lt__/__le__, and the __gt__/__ge__ negations of them, not ordering lexicographically over __attr_comparison__. A decisive leading attribute was ignored whenever it made the instance the greater one, so kls(2, 1) < kls(1, 2) was True (@arthurzam)
snakeoil.klass.get_slot_of/get_slots_of: the slot names are now normalized into a tuple. __slots__ = "name", the single slot spelling
python allows, was handed back as the raw string, so consumers walked its characters: get_attrs_of returned nothing for such an instance, which also emptied SlotsPicklingMixin.__getstate__, and GenericEquality with compare_slots=True compared per character attributes that no instance has, making every instance equal to every other (@arthurzam)
snakeoil.deprecation.suppress_deprecations: fix decorating a class replacing it with a function, which broke isinstance, issubclass and subclassing, and silently stopped pytest from collecting decorated test classes. Decorating a class now suppresses deprecations within the methods, classmethods, staticmethods and property accessors its body defines, and hands back the class itself (@arthurzam)
snakeoil.mappings.make_SlottedDict_kls: deprecated, removal in 0.12.0. It has generated classes without any slotting since 2019, so it delivers neither the memory savings nor the locked set of keys it documents, use a plain dict (@arthurzam)
snakeoil.test.code_quality.Slots: fix collecting no classes at all, which left test_slots_mandatory and test_shadowing passing while checking nothing (@arthurzam)
snakeoil.version.get_version: fix the result being memoized in a single global with no regard for which project was asked (@arthurzam)
snakeoil.compression.ArComp: fix unpacking of .tar.lzma, which always failed with no compression binary found from the following choices: l (@arthurzam)
snakeoil.compression.ArComp: fix unpacking a path containing { or } failing with KeyError, since the command was run through str.format twice (@arthurzam)
snakeoil.compression.compress_handle: fix seeking a write handle forward raising TypeError: a bytes-like object is required, not 'str' (@arthurzam)
snakeoil.formatters.Formatter.write: fix passing an empty prefixes, first_prefixes or later_prefixes sequence discarding the prefixes already standing on the formatter (@arthurzam)
snakeoil.iterables.iter_sort: fix TypeError when two of the iterables yield equal leading elements, which left the sorter comparing the iterables themselves. Iterables that tie are now ordered by the order they were passed in (@arthurzam)
snakeoil.constraints.Problem: fix a consumer that stops iterating early leaving the variable domains pruned, so a later iteration of the same problem silently returned an incomplete set of solutions (@arthurzam)
snakeoil.chksum.LazilyHashedPath.clear: fix computing every chksum the machine has a handler for, purely to discard them, which also made it raise FileNotFoundError for a path that had since been removed (@arthurzam)
snakeoil.test.protect_imports: fix sys.path and sys.modules being left mangled when the body of the context raises (@arthurzam)
snakeoil.fileutils.mmap_or_open_for_read: fix a file that cannot be opened reporting TypeError: 'NoneType' object cannot be interpreted as an integer instead of the actual OSError (@arthurzam)
snakeoil.process.spawn.spawn_get_output: raise TypeError instead of the ExecutionFailure when the spawn function returns no pids (@arthurzam)
snakeoil.dependant_methods.ForcedDepends: fix a class defining its own __set_stage_state__ having it silently replaced by the default one (@arthurzam)
snakeoil.deprecation.suppress_deprecations: fix the category argument being accepted and then ignored, always suppressing DeprecationWarning (@arthurzam)
snakeoil.process.namespaces.create_utsns: fix its errno handling being inverted, so an unsupported UTS namespace raised while every other failure was swallowed. simple_unshare no longer swallows failures to unshare the IPC namespace either (@arthurzam)