Changelog
=========
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 ``fchmod`` instead of ``chmod`` to 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 :user:`jahrules`.

v3.10.5 (2023-03-25)
--------------------
- Add explicit error check as certain UNIX filesystems do not support flock. by :user:`jahrules`.

v3.10.4 (2023-03-24)
--------------------
- Update os.open to preserve mode= for certain edge cases. by :user:`jahrules`.

v3.10.3 (2023-03-23)
--------------------
- Fix permission issue - by :user:`jahrules`.

v3.10.2 (2023-03-22)
--------------------
- Bug fix for using filelock with threaded programs causing undesired file permissions - by :user:`jahrules`.

v3.10.1 (2023-03-22)
--------------------
- Handle pickle for :class:`filelock.Timeout` :pr:`203` - by :user:`TheMatt2`.

v3.10.0 (2023-03-15)
--------------------
- Add support for explicit file modes for lockfiles :pr:`192` - by :user:`jahrules`.

v3.9.1 (2023-03-14)
-------------------
- Use ``time.perf_counter`` instead of ``time.monotonic`` for calculating timeouts.

v3.9.0 (2022-12-28)
-------------------
- Move build backend to ``hatchling`` :pr:`185` - by :user:`gaborbernat`.

v3.8.1 (2022-12-04)
-------------------
- Fix mypy does not accept ``filelock.FileLock`` as 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 :class:`WindowsFileLock <filelock.WindowsFileLock>` with abstract methods instantiated"
  :pr:`135` - by :user:`vonschultz`
- Fix pylint warning "Abstract class :class:`UnixFileLock <filelock.UnixFileLock>` with abstract methods instantiated"
  :pr:`135` - by :user:`vonschultz`

v3.5.1 (2022-02-16)
-------------------
- Use ``time.monotonic`` instead of ``time.time`` for 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 ``stacklevel`` to deprecation warnings for argument name change

v3.4.0 (2021-11-16)
-------------------
- Add correct spelling of poll interval parameter for :meth:`acquire <filelock.BaseFileLock.acquire>` method, raise
  deprecation warning when using the misspelled form :pr:`119` - by :user:`XuehaiPan`.

v3.3.2 (2021-10-29)
-------------------
- Accept path types (like ``pathlib.Path`` and ``pathlib.PurePath``) in the constructor for ``FileLock`` objects.

v3.3.1 (2021-10-15)
-------------------
- Add changelog to the documentation :pr:`108` - by :user:`gaborbernat`
- Leave the log level of the ``filelock`` logger as not set (previously was set to warning) :pr:`108` - by
  :user:`gaborbernat`

v3.3.0 (2021-10-03)
-------------------
- Drop python 2.7 and 3.5 support, add type hints :pr:`100` - by :user:`gaborbernat`
- Document asyncio support - by :user:`gaborbernat`
- fix typo :pr:`98` - by :user:`jugmac00`

v3.2.1 (2021-10-02)
-------------------
- Improve documentation
- Changed logger name from ``filelock._api`` to ``filelock`` :pr:`97` - by :user:`hkennyv`

v3.2.0 (2021-09-30)
-------------------
- Raise when trying to acquire in R/O or missing folder :pr:`96` - by :user:`gaborbernat`
- Move lock acquire/release log from INFO to DEBUG :pr:`95` - by :user:`gaborbernat`
- Fix spelling and remove ignored flake8 checks - by :user:`gaborbernat`
- Split main module :pr:`94` - by :user:`gaborbernat`
- Move test suite to pytest :pr:`93` - by :user:`gaborbernat`

v3.1.0 (2021-09-27)
-------------------
- Update links for new home at tox-dev :pr:`88` - by :user:`hugovk`
- Fixed link to LICENSE file :pr:`63` - by :user:`sharkwouter`
- Adopt tox-dev organization best practices :pr:`87` - by :user:`gaborbernat`
- Ownership moved from :user:`benediktschmitt` to the tox-dev organization (new primary maintainer :user:`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 :user:`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)
-------------------
- *updated* README (added navigation)
- *updated* documentation :issue:`22`
- *fix* the ``SoftFileLock`` test was influenced by the test for ``FileLock``
- *undo* ``cb1d83d`` :issue:`31`

v3.0.0 (2018-01-05)
-------------------
- *updated* major version number due to :issue:`29` and :issue:`27`
- *fixed* use proper Python3 ``reraise`` method
- Attempting to clean up lock file on Unix after ``release``

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)
-------------------
- *updated* readme :issue:`19`
- *added* example :pr:`16`
- *updated* readthedocs url
- *updated* change order of the examples (:pr:`16`)

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 ``SoftFileLock`` is 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 ... else`` clauses.

v2.0.1 (2015-06-13)
-------------------
- fixed :issue:`5`
- *updated* test cases
- *updated* documentation
- *fixed* :issue:`2` which has been introduced with the lock counter

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
