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.0
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.0.tar.gz | 35.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| unlok-4.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 71.8 kB
Release files / unlok-4.2.0.tar.gz
| Download URL | unlok-4.2.0.tar.gz |
|---|---|
| Size | 35.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0064c85e1308888fa2d4f345f9aa99af3857e292bb90a1470475c29e4dbc3497
|
|
BLAKE2b-256 checksum How to use checksums |
674a81c4f905e7a4a28d27c64a9ac0e355b86ef6ce2accc5688f5922d7c2efad
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.20 {"installer":{"name":"uv","version":"0.12.20","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.0-py3-none-any.whl
| Download URL | unlok-4.2.0-py3-none-any.whl |
|---|---|
| Size | 36.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9e12217440e7bcd58c7839fbada6f94722e2278934daf21f7bf91ed3869f0b89
|
|
BLAKE2b-256 checksum How to use checksums |
eab7d874325529c431354b430b0387ad27e7bad28b5ef97d3b4f50141e3db375
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.20 {"installer":{"name":"uv","version":"0.12.20","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}
|