Skaha¶
A lightweight python interface to the CANFAR Science Platform.
New in v1.6+
Asynchronous Sessions¶
Skaha now supports asynchronous sessions using the AsyncSession
class while maintaining 1-to-1 compatibility with the Session
class.
from skaha.session import AsyncSession
asession = AsyncSession()
response = await asession.create(
name="test",
image="images.canfar.net/skaha/base-notebook:latest",
cores=2,
ram=8,
gpu=1,
kind="headless",
cmd="env",
env={"KEY": "VALUE"},
replicas=3,
)
END Upgrades¶
- 📡 Skaha now uses the
httpx
library for making HTTP requests instead ofrequests
. This adds asynchronous support and also to circumvent therequests
dependence onurllib3
which was causing SSL issues on MacOS. See this issue for more details. - 🔑 Skaha now supports tokens for authentication. As a result, the constraints for providing a valid certificate filepath have been relaxed and are only enforced when the certificate is used for authentication.
- 🏎️💨 Added
loglevel
andconcurrency
support to manage the new explosion in functionality!s
Logs to stdout
¶
The [Session|AsyncSession].logs
method now prints colored output to stdout
instead of returning them as a string with verbose=True
flag.
from skaha.session import AsyncSession
asession = AsyncSession()
await asession.logs(ids=["some-uuid"], verbose=True)
New in v1.4+
Support for Private Container Images on Harbor
Starting October 2024, to create a session with a private container image from the CANFAR Harbor Registry, you will need to provide your harbor username
and the CLI Secret
through a ContainerRegistry
object.
from skaha.models import ContainerRegistry
from skaha.session import Session
registry = ContainerRegistry(username="username", secret="sUp3rS3cr3t")
session = Session(registry=registry)
Alernatively, if you have environment variables, SKAHA_REGISTRY_USERNAME
and SKAHA_REGISTRY_SECRET
, you can create a ContainerRegistry
object without providing the username
and secret
.
from skaha.models import ContainerRegistry
registry = ContainerRegistry()
Destroy Sessions without
ids
from skaha.session import Session
session = Session()
session.destroy_with(prefix="test", kind="headless", status="Running")
session.destroy_with(prefix="test", kind="headless", status="Pending")
Example
from skaha.session import Session
session = Session()
session_id = session.create(
name="test",
image="images.canfar.net/skaha/base-notebook:latest",
cores=2,
ram=8,
gpu=1,
kind="headless",
cmd="env",
env={"KEY": "VALUE"},
replicas=3,
)