Skip to main content

unlok

PyPI version PyPI pyversions

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)

Source distribution for unlok 5.0.0
File Size Uploaded
unlok-5.0.0.tar.gz 36.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for unlok 5.0.0
File Interpreter ABI Platform
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}

Release history Release notifications | RSS feed

This release

5.0.0 This release

2 release files

4.2.1

2 release files

4.2.0

2 release files

4.1.0

2 release files

4.0.0

2 release files

3.0.1

2 release files

3.0.0

2 release files

2.0.0

2 release files

0.1.19

2 release files

0.1.18

2 release files

0.1.17

2 release files

0.1.12

2 release files

0.1.11

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page