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 mandates whose keys log deployed apps in.
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 by device code (approved with lok's validatecode), and then exercise the
client against it, including the mandate-key flow a deployer drives: issuing a
key and logging a second session in with it through the fakts mandate-key grant:
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 5.0.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-5.0.0.tar.gz | 36.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| unlok-5.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 73.7 kB
Release files / unlok-5.0.0.tar.gz
| Download URL | unlok-5.0.0.tar.gz |
|---|---|
| Size | 36.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5fbfe51b40ea5124d948903230abc233b6b3c8495bce39ae2875aba4ace8716b
|
|
BLAKE2b-256 checksum How to use checksums |
b50330d480deb1e319f3e97cac8413f47ce368b2998bdb63eb4bbed1e794637e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","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-5.0.0-py3-none-any.whl
| Download URL | unlok-5.0.0-py3-none-any.whl |
|---|---|
| Size | 37.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b400f2254987f9889651b169109f125ab87ea4d07b089ce8685bdf62cdd29b7b
|
|
BLAKE2b-256 checksum How to use checksums |
c29cae33e3cf0accbadd27cd1c2c947540b68aedc242840e69b4a076a31cd134
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","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}
|