Changelog¶
3.29.4 (2026-06-13)¶
3.29.3 (2026-06-10)¶
3.29.2 (2026-06-10)¶
build(deps): bump actions/checkout from 6.0.2 to 6.0.3 PR #555 - by @dependabot[bot]
[pre-commit.ci] pre-commit autoupdate PR #554 - by @pre-commit-ci[bot]
🔒 fix(soft): harden stale-lock breaking and self-heal malformed locks PR #551
open marker reads non-blocking to refuse attacker-placed fifo PR #549 - by @dxbjavid
3.29.1 (2026-06-03)¶
🐛 fix(soft): refuse to follow symlinks when reading the lock file PR #548 - by @dxbjavid
[pre-commit.ci] pre-commit autoupdate PR #547 - by @pre-commit-ci[bot]
[pre-commit.ci] pre-commit autoupdate PR #546 - by @pre-commit-ci[bot]
chore: improve filelock maintenance path PR #545 - by @lphuc2250gma
chore: improve filelock maintenance path PR #544 - by @lphuc2250gma
chore: improve filelock maintenance path PR #542 - by @lphuc2250gma
docs: clarify per-thread scope of FileLock configuration PR #543 - by @Gares95
[pre-commit.ci] pre-commit autoupdate PR #541 - by @pre-commit-ci[bot]
[pre-commit.ci] pre-commit autoupdate PR #539 - by @pre-commit-ci[bot]
[pre-commit.ci] pre-commit autoupdate PR #538 - by @pre-commit-ci[bot]
[pre-commit.ci] pre-commit autoupdate PR #537 - by @pre-commit-ci[bot]
build(deps): bump astral-sh/setup-uv from 8.0.0 to 8.1.0 PR #536 - by @dependabot[bot]
[pre-commit.ci] pre-commit autoupdate PR #535 - by @pre-commit-ci[bot]
3.29.0 (2026-04-19)¶
✨ feat(soft): enable stale lock detection on Windows PR #534
🐛 fix(async): use single-thread executor for lock consistency PR #533
build(deps): bump actions/upload-artifact from 7.0.0 to 7.0.1 PR #530 - by @dependabot[bot]
3.28.0 (2026-04-14)¶
🐛 fix(ci): unbreak release workflow, publish to PyPI again PR #529
3.26.1 (2026-04-09)¶
🐛 fix(asyncio): add __exit__ to BaseAsyncFileLock and fix __del__ loop handling PR #518 - by @naarob
build(deps): bump pypa/gh-action-pypi-publish from 1.13.0 to 1.14.0 PR #525 - by @dependabot[bot]
3.26.0 (2026-04-06)¶
✨ feat(soft): add PID inspection and lock breaking PR #524
[pre-commit.ci] pre-commit autoupdate PR #523 - by @pre-commit-ci[bot]
build(deps): bump astral-sh/setup-uv from 7.6.0 to 8.0.0 PR #522 - by @dependabot[bot]
Remove persist-credentials: false from release job PR #520
[pre-commit.ci] pre-commit autoupdate PR #519 - by @pre-commit-ci[bot]
🔒 ci(workflows): add zizmor security auditing PR #517
[pre-commit.ci] pre-commit autoupdate PR #516 - by @pre-commit-ci[bot]
[pre-commit.ci] pre-commit autoupdate PR #514 - by @pre-commit-ci[bot]
3.25.2 (2026-03-11)¶
🐛 fix(unix): suppress EIO on close in Docker bind mounts PR #513
3.25.1 (2026-03-09)¶
[pre-commit.ci] pre-commit autoupdate PR #510 - by @pre-commit-ci[bot]
🐛 fix(win): restore best-effort lock file cleanup on release PR #511
[pre-commit.ci] pre-commit autoupdate PR #508 - by @pre-commit-ci[bot]
📝 docs(logo): add branded project logo PR #507
3.25.0 (2026-03-01)¶
✨ feat(async): add AsyncReadWriteLock PR #506
Standardize .github files to .yaml suffix
build(deps): bump actions/download-artifact from 7 to 8 PR #503 - by @dependabot[bot]
build(deps): bump actions/upload-artifact from 6 to 7 PR #502 - by @dependabot[bot]
Move SECURITY.md to .github/SECURITY.md
Add security policy
Add permissions to check workflow PR #500
[pre-commit.ci] pre-commit autoupdate PR #499 - by @pre-commit-ci[bot]
3.24.3 (2026-02-19)¶
3.24.2 (2026-02-16)¶
3.24.1 (2026-02-15)¶
🐛 fix(soft): resolve Windows deadlock and test race condition PR #488
3.24.0 (2026-02-14)¶
✨ feat(lock): add lifetime parameter for lock expiration (#68) PR #486
✨ feat(lock): add cancel_check to acquire (#309) PR #487
🐛 fix(api): detect same-thread self-deadlock PR #481
✨ feat(mode): respect POSIX default ACLs (#378) PR #483
🐛 fix(win): eliminate lock file race in threaded usage PR #484
✨ feat(lock): add poll_interval to constructor PR #482
🐛 fix(unix): auto-fallback to SoftFileLock on ENOSYS PR #480
3.23.0 (2026-02-14)¶
3.22.0 (2026-02-14)¶
3.21.2 (2026-02-13)¶
🐛 fix: catch ImportError for missing sqlite3 C library PR #475
3.21.1 (2026-02-12)¶
3.21.0 (2026-02-12)¶
🐛 fix(ci): make release workflow robust
👷 ci(release): commit changelog and use release config PR #472
👷 ci(release): consolidate to two jobs PR #471
✨ feat(unix): delete lock file on release PR #408 - by @sbc100
✨ feat(lock): add SQLite-based ReadWriteLock PR #399 - by @leventov
🔧 chore: modernize tooling and bump deps PR #470
v3.20.3 (2026-01-09)¶
Fix TOCTOU symlink vulnerability in
SoftFileLockPR #465.
v3.20.2 (2026-01-02)¶
Support Unix systems without
O_NOFOLLOWPR #463.
v3.20.1 (2025-12-15)¶
Fix TOCTOU symlink vulnerability in lock file creation PR #461.
v3.20.0 (2025-10-08)¶
v3.19.1 (2025-08-14)¶
Increase test coverage PR #434.
v3.19.0 (2025-08-13)¶
Add support for Python 3.14 PR #432.
v3.18.0 (2025-03-11)¶
v3.17.0 (2025-01-21)¶
Drop Python 3.8 support PR #388.
v3.16.1 (2024-09-17)¶
CI improvements PR #362.
v3.16.0 (2024-09-07)¶
Add Python 3.13 to CI PR #359.
v3.15.4 (2024-06-22)¶
Pass
file_lockas positional argument PR #347.
v3.15.3 (2024-06-19)¶
Fix
TypeError: _CountedFileLock.__init__() got an unexpected keyword argumentPR #345.
v3.15.2 (2024-06-19)¶
Use a metaclass to implement the singleton pattern PR #340.
v3.15.1 (2024-06-12)¶
Restore
__init__method; more robust initialization for singleton locks PR #338.
v3.15.0 (2024-06-11)¶
v3.14.0 (2024-04-27)¶
Add
blockingparameter on lock constructor PR #325.
v3.13.4 (2024-04-09)¶
Raise error on incompatible singleton
timeoutandmodearguments PR #320.
v3.13.3 (2024-03-25)¶
Make singleton class instance dict unique per subclass PR #318.
v3.13.2 (2024-03-25)¶
Fix permission denied error when lock file is placed in
/tmpPR #317.
v3.13.1 (2023-10-30)¶
Allow users to subclass
FileLockwith custom keyword arguments PR #284.
v3.13.0 (2023-10-27)¶
Support reentrant locking on lock file path via optional
is_singletoninstance PR #283.
v3.12.4 (2023-09-13)¶
Change
typing-extensionsto be installed only with the[typing]extra PR #276.
v3.12.3 (2023-08-28)¶
v3.12.2 (2023-06-12)¶
Restore
if TYPE_CHECKINGsyntax forFileLockdefinition PR #245.
v3.12.1 (2023-06-10)¶
v3.12.0 (2023-04-18)¶
Make the thread local behavior something the caller can enable/disable via a flag during the lock creation, it’s on by default.
Better error handling on Windows.
v3.11.0 (2023-04-06)¶
Make the lock thread local.
v3.10.7 (2023-03-27)¶
Use
fchmodinstead ofchmodto work around bug in PyPy via Anaconda.
v3.10.6 (2023-03-25)¶
Enhance the robustness of the try/catch block in _soft.py. by @jahrules.
v3.10.5 (2023-03-25)¶
Add explicit error check as certain UNIX filesystems do not support flock. by @jahrules.
v3.10.4 (2023-03-24)¶
Update os.open to preserve mode= for certain edge cases. by @jahrules.
v3.10.3 (2023-03-23)¶
Fix permission issue - by @jahrules.
v3.10.2 (2023-03-22)¶
Bug fix for using filelock with threaded programs causing undesired file permissions - by @jahrules.
v3.10.1 (2023-03-22)¶
Handle pickle for
filelock.TimeoutPR #203 - by @TheMatt2.
v3.10.0 (2023-03-15)¶
v3.9.1 (2023-03-14)¶
Use
time.perf_counterinstead oftime.monotonicfor calculating timeouts.
v3.9.0 (2022-12-28)¶
Move build backend to
hatchlingPR #185 - by @gaborbernat.
v3.8.1 (2022-12-04)¶
Fix mypy does not accept
filelock.FileLockas a valid type
v3.8.0 (2022-12-04)¶
Bump project dependencies
Add timeout unit to docstrings
Support 3.11
v3.7.1 (2022-05-31)¶
Make the readme documentation point to the index page
v3.7.0 (2022-05-13)¶
Add ability to return immediately when a lock cannot be obtained
v3.6.0 (2022-02-17)¶
Fix pylint warning “Abstract class
WindowsFileLockwith abstract methods instantiated” PR #135 - by @vonschultzFix pylint warning “Abstract class
UnixFileLockwith abstract methods instantiated” PR #135 - by @vonschultz
v3.5.1 (2022-02-16)¶
Use
time.monotonicinstead oftime.timefor calculating timeouts.
v3.5.0 (2022-02-15)¶
Enable use as context decorator
v3.4.2 (2021-12-16)¶
Drop support for python
3.6
v3.4.1 (2021-12-16)¶
Add
stacklevelto deprecation warnings for argument name change
v3.4.0 (2021-11-16)¶
Add correct spelling of poll interval parameter for
acquiremethod, raise deprecation warning when using the misspelled form PR #119 - by @XuehaiPan.
v3.3.2 (2021-10-29)¶
Accept path types (like
pathlib.Pathandpathlib.PurePath) in the constructor forFileLockobjects.
v3.3.1 (2021-10-15)¶
Add changelog to the documentation PR #108 - by @gaborbernat
Leave the log level of the
filelocklogger as not set (previously was set to warning) PR #108 - by @gaborbernat
v3.3.0 (2021-10-03)¶
Drop python 2.7 and 3.5 support, add type hints PR #100 - by @gaborbernat
Document asyncio support - by @gaborbernat
v3.2.1 (2021-10-02)¶
v3.2.0 (2021-09-30)¶
Raise when trying to acquire in R/O or missing folder PR #96 - by @gaborbernat
Move lock acquire/release log from INFO to DEBUG PR #95 - by @gaborbernat
Fix spelling and remove ignored flake8 checks - by @gaborbernat
Split main module PR #94 - by @gaborbernat
Move test suite to pytest PR #93 - by @gaborbernat
v3.1.0 (2021-09-27)¶
Fixed link to LICENSE file PR #63 - by @sharkwouter
Adopt tox-dev organization best practices PR #87 - by @gaborbernat
Ownership moved from @benediktschmitt to the tox-dev organization (new primary maintainer @gaborbernat)
v3.0.12 (2019-05-18)¶
fixed setuptools and twine/warehouse error by making the license only 1 line long
update version for pypi upload
fixed python2 setup error
added test.py module to MANIFEST and made tests available in the setup commands issue #48
fixed documentation thanks to @AnkurTank issue #49
Update Trove classifiers for PyPI
test: Skip test_del on PyPy since it hangs
v3.0.10 (2018-11-01)¶
Fix README rendering on PyPI
v3.0.9 (2018-10-02)¶
PR #38 from cottsay/shebang
updated docs config for older sphinx compatibility
removed misleading shebang from module
v3.0.8 (2018-09-09)¶
updated use setuptools
v3.0.7 (2018-09-09)¶
fixed garbage collection (issue #37)
fix travis ci badge (use rst not markdown)
changed travis uri
v3.0.6 (2018-08-22)¶
clean up
Fixed unit test for Python 2.7
Added Travis banner
Added Travis CI support
v3.0.5 (2018-04-26)¶
Corrected the prequel reference
v3.0.4 (2018-02-01)¶
updated README
v3.0.3 (2018-01-30)¶
updated readme
v3.0.1 (2018-01-30)¶
v3.0.0 (2018-01-05)¶
v2.0.13 (2017-11-05)¶
changed The logger is now acquired when first needed. issue #24
v2.0.12 (2017-09-02)¶
correct spelling mistake
v2.0.11 (2017-07-19)¶
added official support for python 2 issue #20
v2.0.10 (2017-06-07)¶
updated readme
v2.0.9 (2017-06-07)¶
v2.0.8 (2017-01-24)¶
Added logging
Removed unused imports
v2.0.7 (2016-11-05)¶
fixed issue #14 (moved license and readme file to
MANIFEST)
v2.0.6 (2016-05-01)¶
changed unlocking sequence to fix transient test failures
changed threads in tests so exceptions surface
added test lock file cleanup
v2.0.5 (2015-11-11)¶
Don’t remove file after releasing lock
updated docs
v2.0.4 (2015-07-29)¶
added the new classes to
__all__
v2.0.3 (2015-07-29)¶
added The
SoftFileLockis now always tested
v2.0.2 (2015-07-29)¶
The filelock classes are now always available and have been moved out of the
if msvrct: ... elif fcntl ... elseclauses.
v2.0.1 (2015-06-13)¶
v2.0.0 (2015-05-25)¶
added default timeout (fixes issue #2)
v1.0.3 (2015-04-22)¶
added new test case, fixed unhandled exception
v1.0.2 (2015-04-22)¶
fixed a timeout could still be thrown if the lock is already acquired
v1.0.1 (2015-04-22)¶
fixed issue #1
v1.0.0 (2015-04-07)¶
added lock counter, added unittest, updated to version 1
changed filenames
updated version for pypi
updated README, LICENSE (changed format from md to rst)
added MANIFEST to gitignore
added os independent file lock ; changed setup.py for pypi
Update README.md
initial version