0.17.3:
  - Allow writer to become a reader in thread ReaderWriter lock

0.17.2:
  - Remove unnecessary setuptools pin

0.17.1:
  - Switch to the modern python package build infrastructure

0.17: [NEVER RELEASED]
  - Remove support for python 3.5 and earlier, including 2.7
  - Add support for python 3.9 and 3.10
  - Fix a conflict with django lock
  - Add __version__ and __all__ attributes
  - Fix a failure to parse README as utf-8
  - Move from nosetest to pytest and cleanup testing infrastructure

0.16.3:
  - Fix a failure to parse README as utf-8 on python2

0.16.2:
  - Fix a failure to parse README as utf-8

0.16.1: [YANKED]

0.16:
  - Move from travis and appveyor to github actions
  - Add interprocess reader writer lock
  - Improve README
  - remove unused eventlet import
  - use stdlib monotonic instead of external for python >= 3.4

0.15:
  - Add testing for additional python versions
  - Remove python 2.6 support
  - Remove eventlet dependency and use
    threading.current_thread instead

0.14:
  - Allow providing a custom exception logger
    to 'locked' decorator
  - Allow providing a custom logger to process
    lock class
  - Fix issue #12

0.13:
  - Fix 'ensure_tree' check on freebsd

0.12:
  - Use a tiny retry util helper class
    for performing process locking
    retries.

0.11:
  - Directly use monotonic.monotonic.
  - Use BLATHER level for previously
    INFO/DEBUG statements.

0.10:
  - Add LICENSE in generated source tarballs
  - Add a version.py file that can be used to
    extract the current version.

0.9:
  - Allow providing a non-standard (eventlet or
    other condition class) to the r/w lock for
    cases where it is useful to do so.
  - Instead of having the r/w lock take a find
    eventlet keyword argument, allow for it to
    be provided a function that will be later
    called to get the current thread. This allows
    for the current *hack* to be easily removed
    by users (if they so desire).

0.8:
  - Add fastener logo (from openclipart).
  - Ensure r/w writer -> reader -> writer
    lock acquisition.
  - Attempt to use the monotonic pypi module
    if its installed for monotonically increasing
    time on python versions where this is not
    built-in.

0.7:
  - Add helpful `locked` decorator that can
    lock a method using a found attribute (a lock
    object or list of lock objects) in the
    instance the method is attached to.
  - Expose top level `try_lock` function.

0.6:
  - Allow the sleep function to be provided (so that
    various alternatives other than time.sleep can
    be used), ie eventlet.sleep (or other).
  - Remove dependency on oslo.utils (replace with
    small utility code that achieves the same effect).

0.5:
  - Make it possible to provide a acquisition timeout
    to the interprocess lock (which when acquisition
    can not complete in the desired time will return
    false).

0.4:
  - Have the interprocess lock acquire take a blocking
    keyword argument (defaulting to true) that can avoid
    blocking trying to acquire the lock

0.3:
  - Renamed from 'shared_lock' to 'fasteners'

0.2.1
  - Fix delay not working as expected

0.2:
  - Add a interprocess lock

0.1:
  - Add travis yaml file
  - Initial commit/import
