unlok
The python client for lok, the authentication and identity server of an Arkitekt deployment: users and groups, apps, releases and their clients, the services a deployment composes, and the redeem tokens deployed apps enrol with.
Installation
pip install unlok
With arkitekt, pip install "arkitekt[rekuest,unlok]" brings it in.
Usage
Every lok operation is a method of the Unlok client, in a blocking and an a-prefixed async
flavour (unlok.me(), await unlok.ame()).
Unlike the other service clients, unlok requires nothing from the deployment: it talks to the app's own lok server, the one the app authenticated against.
In an arkitekt app
Add the service to your app and ask for unlok: Unlok; the client is injected by annotation.
Services travel between actions by id (@lok/service):
from arkitekt import App, run
from unlok import Unlok, unlok_service
app = App("whoami", "0.1.0", services=[unlok_service])
@app.action
def whoami(unlok: Unlok) -> str:
"""Who Am I
The user this app is acting for.
"""
return unlok.me().username
if __name__ == "__main__":
run(app)
From a script
from arkitekt import easy
from unlok import unlok_service
with easy("my-script", unlok_service) as unlok:
for service in unlok.list_services():
print(service.identifier, service.name)
Testing
Unit tests need nothing but the package:
uv run pytest -k "not integration"
The integration tests start a real lok (plus postgres, redis and minio) with
docker compose through dokker, enrol into
it the way a deployed app does — by redeeming the token provisioned in
tests/integration/configs/lok.yaml through the fakts redeem grant — and then
exercise the client against it, including the pinned redeem-token flow a
deployer drives:
uv run pytest -m integration
The stack runs the published jhnnsrs/lok:${LOK_SERVICE_TAG:-latest} image, so the
schema under test is whatever was last pushed to :latest. CI defaults to the same tag;
set the repository variable LOK_SERVICE_TAG (or export it locally) to test against
another published tag, such as next. To test against a local
server checkout instead, drop a gitignored tests/integration/docker-compose.local.yml
next to the compose file that builds the lok service from that checkout; the
fixtures pick it up automatically.
Metadata
Release files for unlok 4.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| unlok-4.2.1.tar.gz | 35.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| unlok-4.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 71.9 kB
Release files / unlok-4.2.1.tar.gz
| Download URL | unlok-4.2.1.tar.gz |
|---|---|
| Size | 35.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
15251fe3effb15dd3f475d079426c0ef47e01148b65031bd28b617080b7dab67
|
|
BLAKE2b-256 checksum How to use checksums |
777ca8e62b8e062af5a1a5cbf1ae26e7ab844924d49216f13072c333511ca8da
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / unlok-4.2.1-py3-none-any.whl
| Download URL | unlok-4.2.1-py3-none-any.whl |
|---|---|
| Size | 36.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6126d52b88b920165747a5d90fe9832565d32abeee27fa1da22609bf5170057b
|
|
BLAKE2b-256 checksum How to use checksums |
ec7ccd7c47a5eca175916e1d54ab25d3fbe261837899cd0b1d51cfd893f25574
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|