Repository navigation
Update maintenance - #269
Open
renovate[bot] wants to merge 1 commit into
Open
renovate[bot] wants to merge 1 commit into
renovate[bot] wants to merge 1 commit into
Conversation
|
|
renovate
Bot
force-pushed
the
renovate/maintenance
branch
11 times, most recently
from
November 6, 2026 15:54
28d6584 to
473a3a1
Compare
renovate
Bot
force-pushed
the
renovate/maintenance
branch
from
November 6, 2026 19:14
473a3a1 to
8c4af55
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
This PR body was truncated due to platform limits.
This PR contains the following updates:
v7.0.0→v7.1.0==26.10.0→==26.10.1==8.5.0→==8.5.1==0.4.3→==0.4.4==4.0.12→==4.2.9==1.1.0→==1.2.0==7.21→==7.22==7.21→==7.22==4.12.4→==4.14.5==1.6.0→==1.7.0==4.1.2→==4.1.3dc37677→72459063.14→3.15v2.22.1→v2.22.4==4.64.9→==4.67.13==21.14.5→==21.15.6Release Notes
actions/setup-python
v7.1.0Compare Source
What's Changed
Enhancements
mirrorandmirror-tokeninputs for custom Python distribution sources by @luhenry in #1302Dependency Upgrade
New Contributors
Full Changelog: actions/setup-python@v7.0.0...v7.1.0
psf/black (black)
v26.10.1Compare Source
Highlights
This release fixes a security issue in Black's bundled GitHub Action. Repositories that
use the action are encouraged to update to the latest version of Black immediately. This
update is received automatically when using
psf/black@stable, and is independent ofthe version of Black installed by the action.
When the GitHub Action reads version specifiers from
tool.black.required-version, itnow only accepts released versions of Black, as it already did for
blackrequirementsin dependency lists. Other values, such as URL references, are now rejected. This issue
has been registered as
GHSA-cg8m-r9f2-5wm2; a CVE identifier is pending.Stable style
x = !ls -la) being wrappedin parentheses, which IPython can no longer run; such cells are now left unchanged
(#5481)
--line-rangesunchanged (#5436)--line-rangesformatting lines that follow a statement when formatting joins orre-indents that statement (#5484)
--line-rangescrashing with an internal error when an unselected statement has a# fmt: skipcomment on the last line before a closing bracket (#5477)# -*- coding: latin-1 -*-) ontothe first two lines of a file (#5487)
last line is near the line length limit (#5494)
--line-ranges, and ensure a blank line is added between an unselected import and anewly formatted statement (#5493, #5649)
{(x := f())}) when targeting Python 3.9 or older, since Python 3.8 and 3.9.0 can'tparse it without them (#5502)
Preview style
or comprehensions) inside brackets when preceded by a standalone comment (#5455)
string_processingfeature removing backslash-newline sequences fromraw strings, which changed their value (#5482)
assignments (such as annotated assignments or subscript targets) (#5473)
under
--preview(#5442)wrap_long_dict_values_in_parensdropping the parentheses around a right-handside that contains a dictionary, leaving a line over the length limit (#5492)
string_processingfeature adding a space after*or**in a PEP695 type parameter (
* Ts = ...) when it splits a string in the parameter's default(#5504)
earlier bracket split exceeds the line length only due to a trailing comment (#5498)
Configuration
--cache-dirto configure the cache directory from the command line (#5433)--line-ranges,which made a later full
black --checkpass andblackskip the unformatted lines(#5476)
.gitignorethat starts with a UTF-8 byte order mark. The mark became partof the first pattern, so that pattern never matched and Black formatted files that git
ignores (#5497)
Performance
pairs (such as consecutive subscripts) (#5475)
Integrations
use_pyprojectisenabled (#5479)
tool.black.required-version, itnow only accepts released versions of Black, as it already did for
blackrequirements in dependency lists. Other values, such as URL references, are now
rejected. (#5510)
pallets/click (click)
v8.5.1Compare Source
Released 2026-11-09
copy.deepcopy()andpickleon aParameter,OptionorCommand. {pr}3805KeyboardInterruptarriving whileCommand.main()reports an abort or an error,or while it exits, no longer escapes as an unhandled traceback. The command still
exits with the intended code; only the message may be lost. {issue}
3802Option.get_help_spec, which returns the option's left helpcolumn even when the option is hidden. {meth}
Option.get_help_recordstillreturns
Nonefor hidden options, so help screens are unchanged. {pr}3821Positional argumentshelp section lists every argument of the command,not only the documented ones. An argument with no
helpgets an emptydescription, the same way an option with no
helpdoes. {pr}3860Argument.get_help_recordalways returns a tuple. It used to returnNonefor an argument with nohelp. {pr}3860default, and what an unrecognizedtypecallable does to a command-line value. {issue}3036{pr}3808path_typenarrows the converted value's type forconvertandprompt.{issue}
3822{pr}3858Parameteraccepts a newhelpargument and {class}Optionand {class}Argumentinherits it. {meth}
Parameter.to_info_dictnow reportshelpfor every kind of parameter.{pr}
3861vs.ore.g.inside the first sentence. A period ends the sentence only when it closes the text
or the next word does not start in lowercase. {pr}
3865show_envvar=True, an option's error message now prints all variables of anenvvarsequence instead of thereprof the sequence. {pr}3884envvar, such as[]or"", shows the same help and error message asno
envvarwhenshow_envvar=True. The help screen used to show[env var: ].{pr}
3884command's own help text, only the
(DEPRECATED)label. {pr}3901pypa/distlib (distlib)
v0.4.4Compare Source
tox-dev/filelock (filelock)
v4.2.9Compare Source
Bug fixes
ReadWriteLock,SoftReadWriteLockand their async wrappers now raiseTypeErrorfor a blocking that is not abool, in the constructor and on acquire, asFileLockalready does. Before,blocking=0waited out the full timeout on a contendedReadWriteLockwhileblocking=Falsefailed at once, and a truthy value such as"false"turned a single attempt into a blocking wait (#908) by @abhishekcpp007 and @gaborbernat.New Contributors
🐍 PyPI release
📜 Full Changelog
v4.2.8Compare Source
Documentation
New Contributors
🐍 PyPI release
📜 Full Changelog
v4.2.7Compare Source
Bug fixes
SoftFileLeasereclaims a dead holder's lease marker even when that holder published anotherlease_duration. It used to raiseLeaseSettingsMismatchon every attempt instead, so after a holder crashed and its peers restarted with a changed duration the lock stayed wedged untilforce_break(). A live holder with another duration still raises (#900) by @dxbjavid and @gaborbernat.PyPI release
Full Changelog
v4.2.6Compare Source
Bug fixes
SoftFileLock,MarkerSoftFileLockandSoftFileLeasewhen three or more contenders reclaim a dead marker. The race could strand a live holder's marker under a break name, leaving the lock unusable or admitting a second holder. Contenders now recheck the marker before exchanging names and unwind nested exchanges in order. If the filesystem refuses a return exchange, the contender leaves its marker at the lock path for later recovery (#899) by @dxbjavid and @gaborbernat.PyPI release
Full Changelog
v4.2.5Compare Source
Bug fixes
acquireandacquireraiseTypeErrorfor a blocking that is not abool, as the constructor and theblockingsetter already do. A truthy value such as the string"false"used to count asTrue, so a call meant as a single attempt waited for the instance'stimeout, and without a limit at the default-1(#870) by @simpleqt and @gaborbernat.SoftFileLockacquisition whose first read of its new marker's identity failed reads it again before rolling back. On Windows the rollback could otherwise not recognize the marker it had created, and the empty marker it left blocked the path for every later acquisition, since no contender breaks an empty marker (#869) by @simpleqt and @gaborbernat.fork()child of a process holding aSoftFileLeasestarts from an unheld claim. It used to inherit the parent's token, last compromise and heartbeat, sotokenandcompromisereported a claim the child never held whileis_lockedreported it unheld (#868) by @dxbjavid and @gaborbernat.FileLockorSoftFileLockno longer creates the lock file's parent directory. After a rename of that directory during the hold, the nested acquire recreated the old name, and when a file had taken the name it raisedFileExistsErrorand left the hold's recursion count incremented (#878) by @0x5t4l1n and @gaborbernat.ReadWriteLockfailing every acquire with "link directory ... was replaced while opening" in a group-writable directory whose inherited ACL, such as an NFSv4 one on ZFS, opens the link directory to the group. The lock now closes the empty link directory to its owner, and where the filesystem refuses that, such as ZFS withaclmode=restricted, it names the directory to make writable by its owner only (#898) by @gaborbernat.SoftFileLock,MarkerSoftFileLockandSoftFileLeaseraisingOverflowErrorout ofacquire(), or never reclaiming a dead holder's lock, when a stranded restore claim beside the lock names a process number outside1..2**31-1or spells it in non-ASCII digits. Such a claim is now ignored, as no filelock writes one (#871) by @dxbjavid and @gaborbernat.subprocess.Popenafterwait()ormultiprocessing.Processafterjoin(). Acquiring such a lock with the defaulttimeout=-1waited forever (#874) by @nk-batman21.chdirbetween the refusedO_RDWRopen and the reopen made the acquisition wait on a file that is not there, or probe one in another directory. The reopen now uses the path the acquisition pinned (#889) by @dxbjavid and @gaborbernat.EMLINK, the error FreeBSD reports when a no-follow open refuses a symlink, in a soft reader/writer lock's protocol tree, so heartbeat reports lost ownership there rather than a transient refresh error (#866) by @pacocartones and @gaborbernat.ReadWriteLockorAsyncReadWriteLockraises theImportErrorwhen a module other than Python'ssqlite3is missing, as in a frozen application that left out a filelock submodule. The names areNoneonly without SQLite (#880) by @pintu544 and @gaborbernat.Documentation
blocking=Falseinstead of a tinytimeout(#873) by @tongwentao and @gaborbernat.Packaging
New Contributors
PyPI release
Full Changelog
v4.2.4Compare Source
🐍 PyPI release
📜 Full Changelog
v4.2.3Compare Source
Bug fixes
types.LazyImportTypeno longer triggersAttributeErrorat exit. #861 by @gaborbernat.EFTYPEwhen a no-follow open refuses a symlink in a soft reader/writer lock's protocol tree, so heartbeat reports lost ownership rather than a transient refresh error. #859 by @edsonsims.New Contributors
🐍 PyPI release
📜 Full Changelog
v4.2.2Compare Source
Bug fixes
with lock:ended, when an earlieracquire()had failed because the working directory no longer exists. That call still raisesFileNotFoundError, and it now leaves the lock's hold count unchanged. #856 by @spicysharkco.New Contributors
🐍 PyPI release
📜 Full Changelog
v4.2.1Compare Source
Security
This release fixes the following vulnerabilities:
Bug fixes
AsyncReadWriteLock.close()andAsyncSoftReadWriteLock.close()end only the holds that tasks acquired through that wrapper. A reader that arrives duringclose()gets the closed error instead of joining the ending hold. After synchronous code closes or force-releases the shared lock, the wrappers refuse to admit readers into the ended hold, andclose()on such a wrapper returns. Closing one wrapper no longer ends a task's nested hold taken through another wrapper on the same path. #832 by @gaborbernat.ReadWriteLocklocks again after arelease()that an exception from a signal handler interrupted. The async read-write wrappers stop admitting readers into such a level. The async read-write locks forget a hold whose backend release failed after the backend let go, and they free the memory of each acquire that times out or is canceled.AsyncFileLockreturns fromrelease()after a few hundred acquires gave up behind a waiting one. An exception from a signal handler delivered while anAsyncFileLockcall joins its queue no longer blocks every later call on that lock. #833 by @gaborbernat.ReadWriteLockacting on-journal,-walor-shmfiles another process puts beside its database: a write could land in another file, a reader could get in beside a writer, and an acquire could fail. SQLite now opens the database by name only in a directory no other account can write, and through a private hard link elsewhere. On Windows the directory's access control list decides. Where hard links are unavailable, keep the database in a directory other accounts cannot write, such as one under%LOCALAPPDATA%. The lock removes link directories through a checked descriptor rather than by name, reads a link directory's name only when the locking account owns it, and leaves alone a directory with other content renamed onto a link directory's name. A database whose schema takes more than a few kilobytes to load raisesValueErrorinstead of running past the acquire timeout. #834 by @gaborbernat.UnixFileLockno longer truncates a file it did not create, such as one renamed to the lock path, and no longer appliesmodeto it. Anon_acquiredhook that writes holder metadata now truncates the file itself. A lease (Linux) or an oplock (Windows) on the lock file or a soft lock's marker no longer holdsacquire()past itstimeoutorblocking=False, and an oplock no longer holdsrelease();ReadWriteLockon Windows waits for itstimeoutand raisesTimeout. On Windows, amodewithout group and other bits, such as0o600, now creates the lock file with an owner-only permission list; theReadWriteLockdatabase gets the same. The soft locks' writability check no longer follows a symlink swapped in at the lock path. On a filesystem withoutflock, a contender from another account now waits on a marker it cannot write instead of raisingPermissionError. #835 by @gaborbernat.SoftFileLock,MarkerSoftFileLockandSoftFileLeaseremoving a live holder's marker in three cases: the holder and the contender run in Linux time namespaces with different boottime offsets; only one of them can read the boot id; a process other than the owner rewrote the marker. Soft markers no longer carry group or other write bits. A process name containing a carriage return or another line separator no longer makes the stale check raiseValueError. When/proc/self/ns/timeexists but cannot be read, the stale check no longer compares start times and keeps the marker. #836 by @gaborbernat.AsyncSoftReadWriteLockgives back one level on release, so synchronous readers of a shared singleton keep theirs.SoftReadWriteLocktracks read levels per thread:release()from a thread that holds none raisesRuntimeError. After its heartbeat recorded a lost hold, it refuses new acquires until that hold is released. #838 by @gaborbernat.StrictSoftFileLockcreates<path>.filelockand itsclaimsdirectory with the lock'smodeand sets the sticky bit (a directory flag that lets only a file's owner remove it) on both. On the next acquisition it narrows a directory it owns that an earlier release created wider; it leaves a directory of another account as it is, so remove such leftovers by hand. It reachesclaimsthrough a descriptor opened without following symlinks; on Windows it holds both directories open and refuses a junction (a directory that points at another directory). Under a sticky parent such as/tmpit refuses a coordination directory of another account, asSoftReadWriteLockdoes for<path>.rw. One read grace now covers a whole claim scan, a failed claim cleanup no longer leaves the sentinel descriptor open, and a non-regular node at a sentinel private-record name raisesSoftFileLockProtocolError. On Windows, contenders read claims without blocking their owner's unlink. #839 by @gaborbernat.acquireorrelease. A release that a signal handler cuts short after it has started now completes before the error propagates. A handler that acquires the lock its own thread is releasing now getsRuntimeErrorinstead of a hold that stays held. The singleton cache no longer hands out anis_singleton=Truelock or aReadWriteLockwhose finalizer is running, which released the new holder's lock. A signal duringos.fork()no longer leaves the other threads blocked in their next lock call, and a fork from another thread no longer waits for aReadWriteLockacquire on a busy database. #840 by @gaborbernat.is_singleton=Truelookup no longer returns a cached lock whose relative path now resolves to another file; a held lock still matches the file it holds. A rename of the lock's directory during a hold no longer leaves the marker behind or reports a false lease compromise, and a waiter no longer creates a second lock file in a directory that was renamed away. #841 by @gaborbernat.SoftReadWriteLockreaches its records through descriptors of<path>.rwandgenorholdersopened without following symlinks. On Windows it holds those directories open and refuses a junction (a directory that points at another directory). A tree swapped in after an earlier acquire therefore cannot redirect them. Its heartbeat rewrites a holder record only when the name still leads to the file it created, and does not block on a FIFO (a named pipe). A heartbeat that finds<path>.rwreplaced by a symlink or junction reports the hold lost instead of ending the heartbeat thread. A live lock object repeats the ownership check whenever the tree it opens is not the one it prepared. #842 by @gaborbernat.SoftFileLock,MarkerSoftFileLockandSoftFileLeaseremoving or displacing a live holder's marker in five cases. ext4 gave a freed inode number to the next marker. A stalledFileLockremoved itsENOSYSplaceholder after a peer replaced it. A failed acquire cleaned up after a successor took the path. A stale break left the lock path empty while it checked the marker it had moved. Alifetimebreak judged a marker by a reused inode number. On Linux and macOS a stale marker now changes hands in one atomic exchange. On other platforms without one, except Windows, including NFS and SMB, the marker stays in place and waits fortimeoutorbreak_lock(). Restoring a marker no longer follows a symlink found under the break name. A holder that releases while a peer's exchange has its marker aside leaves a record no lock parses, so the put-back lands a marker that ages out. A lease heartbeat that finds another file at the lock path once, while a peer's break has its marker aside, waits for the next refresh before it reports a compromise. A contender that finds a dead breaker's marker puts back the marker that breaker left under its break name. A marker is the breaker's own only when it names the breaker's process on this host; the same process number on another host is a holder. A contender takes a stranded marker under a name of its own before it puts the marker back, so two contenders no longer reverse each other's exchange and remove the live holder's marker. A claim left behind by a failed put-back is retried on the next poll. #843 by @gaborbernat.AsyncReadWriteLockorAsyncSoftReadWriteLockacquire that waits for another process now stops the wait and raises the cancellation. It used to wait until that process released, or raiseTimeout. Athread_local=TrueAsyncFileLockthat threads with their own event loops share no longer deadlocks when one thread waits for the lock while another holds it. #844 by @gaborbernat.SoftReadWriteLockrefuses a commit that lands a whole retention window behind the log, so two committers stalled at adjacent generations can no longer admit a second writer. Its stale check samples the clock before it reads a holder record, so a pause between the two no longer counts as time the record stayed unchanged. #845 by @gaborbernat.SoftFileLockcontender evicting an empty marker after two seconds while its owner held the lock. The owner is aSoftFileLockbefore 3.22, which writes nothing into its marker, or a current one still writing its record. An empty marker now reads as held, andtimeout,lifetimeorbreak_lock()clears it. A contender that finds an empty marker a dead breaker left aside puts it back instead of removing it. #846 by @gaborbernat.ReadWriteLockon Windows acting on-journaland-walfiles another account places beside its database: an acquire could fail withOperationalError, or SQLite could replay the journal and delete the file it names. The lock now reads the database directory's access control list. Where an account other than the locking account,SYSTEMandAdministratorscan add or remove names, SQLite opens a hard link inside a directory only those accounts can write. A filesystem without hard links raisesOSError. #854 by @gaborbernat.SoftReadWriteLocksubclasses sharing singleton instances with the base class or sibling subclasses. Each concrete class now keeps its own cache and construction guard, including after fork, while preserving cooperative class-definition keywords. #855 by @AryanRG.New Contributors
🐍 PyPI release
📜 Full Changelog
v4.2.0Compare Source
Bug fixes
StrictSoftFileLockraisingSoftFileLockProtocolErroron Windows when a contender read a claim whose owner was still finishing its unlink. [#829](https://redirConfiguration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR was generated by Mend Renovate. View the repository job log.