Observed since 20 Oct, 21:13 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Asyncio grpclib SDK for afs_proxy/afslet
This SDK talks to afs_proxy / afslet using asyncio + grpclib.
Generated protobuf modules are inside afs_sdk/api/....
When imported from a git checkout, afs_sdk.__version__ is resolved from:
git describe --tags --long --always --dirty --match 'v*'
Example output:
>>> import afs_sdk
>>> afs_sdk.__version__
'v0.2.0-1-gabc1234-dirty'
>>> afs_sdk.get_version_info()
VersionInfo(version='v0.2.0-1-gabc1234-dirty', tag='v0.2.0', commit_sha='abc1234', distance=1, dirty=True)
When installed from a built distribution without .git metadata, it falls back
to the package metadata version. PyPI release versions are derived from git tags
via setuptools_scm.
cd python
~/.local/bin/uv sync
AfsClient.raw_execute(requests: AsyncIterator[ExecuteRequest])AfsClient.execute(request: ExecuteInput)
image, optional command, optional env, resources, and extra file entries)env accepts either a dict[str, str] or a sequence of KEY=VALUE strings, and overrides image env on key conflictforce_local_fetch=True to force local layer fetch on selected layerstoreAsyncIterator[ExecuteEvent]AfsClient.status(include_layerstores=True, include_afslets=True)
AsyncIterator[ProxyStatusEvent]AfsClient.reconcile_image(request: ReconcileImageInput)
ReconcileImageResult(image_key, current_replica, requested_replica, ensured)TarDirectoryTarSymlinkTarFilePart (chunked file data; no full-file buffering)tar_executor=... to AfsClientThreadPoolExecutor(max_workers=1)ExtraFile.content supports:
bytesAsyncIterator[bytes]import asyncio
from afs_sdk import AfsClient, ExecuteInput, ExtraFile
async def run():
req = ExecuteInput(
image="alpine",
tag="latest",
command=["/bin/sh", "-c", "echo ok >/tmp/ok.txt"],
env={"FOO": "bar", "PATH": "/custom/bin"},
fuse_max_read_ahead_bytes=16 << 20,
cpu_cores=1,
memory_mb=256,
timeout_ms=2000,
extra_entries=[
ExtraFile(path="hello.txt", content=b"hello from sdk\n"),
],
)
async with AfsClient("127.0.0.1", 62051) as client:
async for event in client.execute(req):
print(type(event).__name__)
asyncio.run(run())
CLI-style demo:
PYTHONPATH=python ~/.local/bin/uv run python python/examples/execute_stream.py \
--addr 127.0.0.1:62051 \
--dir ./extra-dir \
--env FOO=bar \
--env PATH=/custom/bin \
--image alpine --tag latest \
-- /bin/sh -c 'echo ok >/tmp/ok.txt'
If command is omitted, AFS uses the image Entrypoint/Cmd defaults returned by discovery.
Reconcile image replica demo:
PYTHONPATH=python ~/.local/bin/uv run python python/examples/reconcile_image.py \
--addr 127.0.0.1:62051 \
--image alpine --tag latest --replica 0
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.2.4 | 18 Mar 2026 | 2 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 21:13 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:c7dd74935966c888ce92d2ef0a58109c3adc12a2d72d7fb926c8010c6a70641f