Skip to main content

lockable resource module

Project description

lockable

CI PyPI version Coverage Status

Resource locking module for python.

Originally designed for following projects:

Module provides python API and simple CLI interface.

Resource is released in following cases:

  • process ends
  • when context ends when lockable.auto_lock(..) is used
  • allocation.unlock() is called
  • lockable.unlock() is called

Resources data provider support following mechanisms:

  • resources.json file in file system
  • python list of dictionaries
  • http uri which points to API and is used with HTTP GET method. API should provide resources.json data as json object.

CLI interface

% lockable --help
usage: lockable [-h] [--validate-only] [--lock-folder LOCK_FOLDER] [--resources RESOURCES]
                [--timeout TIMEOUT] [--hostname HOSTNAME]
                [--requirements REQUIREMENTS]
                [command [command ...]]

run given command while suitable resource is allocated.
Usage example: lockable --requirements {"online":true} echo using resource: $ID

positional arguments:
  command               Command to be execute during device allocation

optional arguments:
  -h, --help            show this help message and exit
  --validate-only       Only validate resources.json
  --lock-folder LOCK_FOLDER
                        lock folder
  --resources RESOURCES
                        Resources file (utf-8) or http uri
  --timeout TIMEOUT     Timeout for trying allocate suitable resource
  --hostname HOSTNAME   Hostname
  --requirements REQUIREMENTS
                        requirements as json string

API's

Constructor

lockable = Lockable([hostname], [resource_list_file], [resource_list], [lock_folder])

Allocation

allocation_context = lockable.lock(requirements, [timeout_s])
print(allocation_context.resource_info)
print(allocation_context.resource_id)
allocation_context.unlock()
# or using resource info
lockable.unlock(allocation_context)

Allocation context contains following API:

  • requirements: dict Original requirements for allocation
  • resource_info: dict Allocated resource information
  • unlock(): func release resource lock function
  • allocation_queue_time: timedelta How long waited before allocation
  • allocation_start_time: datetime when allocation was started
  • release_time: datetime when allocation was ended
  • alloc_id: str allocation id
  • allocation_durations: timedelta how long time allocation takes

or using context manager which unlock automatically

with lockable.auto_lock(requirements, [timeout_s]) as allocation:
    print(allocation.resource_info)

Resource requirements are evaluated using mongoquery, so MongoDB-style operators like $in and $gt are supported when selecting resources.

Tips:

You can allocate also offline devices by set requirements "online": None . You can ignore also hostname same same way by setting it to None`

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lockable-0.13.1.tar.gz (24.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lockable-0.13.1-py3-none-any.whl (14.0 kB view details)

Uploaded Python 3

File details

Details for the file lockable-0.13.1.tar.gz.

File metadata

  • Download URL: lockable-0.13.1.tar.gz
  • Upload date:
  • Size: 24.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.11

File hashes

Hashes for lockable-0.13.1.tar.gz
Algorithm Hash digest
SHA256 fe5e28d297f4ac1c115fef7d6f68a933a9ea5e15d1e9dd44d8faeeae03de6d56
MD5 7af22255fdd07cf99b8500c79f568d78
BLAKE2b-256 d9da137bf2874789b6f6adb1d4c4d6dbcdb3b5b1cbabb3e83e684102d4781c11

See more details on using hashes here.

File details

Details for the file lockable-0.13.1-py3-none-any.whl.

File metadata

  • Download URL: lockable-0.13.1-py3-none-any.whl
  • Upload date:
  • Size: 14.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.11

File hashes

Hashes for lockable-0.13.1-py3-none-any.whl
Algorithm Hash digest
SHA256 dc1d21f8a18ad9c90d5a7d3ff8d1113540f507467bceae3c4b133cc9191c724d
MD5 a40aecce6501a6d17f2a0b9ca6ccea0a
BLAKE2b-256 900c7707ff3b532aabfcfb073efd4f978ed2e7734104df833cb0bf90d87b555c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page