What's New in CANFAR¶
Stay up to date with the latest features, improvements, and changes in CANFAR.
v1.0
Breaking Changes
- Deprecation of support for Python 3.8 and 3.9.
- The Python package has been renamed from
skahatocanfar. - The
skaha.sessionAPI has been deprecated in favor ofcanfar.sessions. - See Migration guide to migrate from skaha โ canfar.
CLI Support
- Comprehensive CLI support has been added to the client under the
canfarentry point. See CLI Reference for more information. - The
canfarCLI is the recommended way to manage authentication. See Authentication Contexts for more information.
๐ SRCnet Support
- CANFAR now supports launching sessions on all the SRCnet CANFAR Science Platform instances worldwide.
OIDC Authentication
- OpenID Connect (OIDC) authentication is now supported for all SRCnet Science Platform servers where applicable.
Documentation
- Complete overhaul to bring all documentation sources under a single roof.
- Significant improvements to the Python client and brand new CLI documentation.
Recent Updates¶
New in v0.7+
๐ Enhanced Authentication System¶
Canfar now features a comprehensive authentication system with support for multiple authentication modes and automatic credential management.
from canfar.client import HTTPClient
from pathlib import Path
# X.509 certificate authentication
client = HTTPClient(certificate=Path("/path/to/cert.pem"))
# OIDC token authentication (configured)
client = HTTPClient() # Uses auth.mode = "oidc"
# Bearer token authentication
from pydantic import SecretStr
client = HTTPClient(token=SecretStr("your-token"))
๐ Asynchronous Sessions¶
Canfar now supports asynchronous sessions using the AsyncSession class while maintaining 1-to-1 compatibility with the Session class.
from canfar.session import AsyncSession
asession = AsyncSession()
response = await asession.create(
name="test",
image="images.canfar.net/skaha/astroml:latest",
cores=2,
ram=8,
gpu=1,
kind="headless",
cmd="env",
env={"KEY": "VALUE"},
replicas=3,
)
๐๏ธ Backend Upgrades¶
- ๐ก Canfar now uses the
httpxlibrary for making HTTP requests instead ofrequests. This adds asynchronous support and also to circumvent therequestsdependence onurllib3which was causing SSL issues on MacOS. See this issue for more details. - ๐ Canfar now supports multiple authentication methods including X.509 certificates, OIDC tokens, and bearer tokens with automatic SSL context management.
- ๐๏ธ๐จ Added
loglevelandconcurrencysupport to manage the new explosion in functionality! - ๐ Comprehensive debug logging for authentication flow and client creation troubleshooting.
๐งพ 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 canfar.session import AsyncSession
asession = AsyncSession()
await asession.logs(ids=["some-uuid"], verbose=True)
๐ชฐ Firefly Support¶
Canfar now supports launching firefly session on the CANFAR Science Platform.
session.create(
name="firefly",
image="images.canfar.net/skaha/firefly:latest",
)
New in v0.4+
๐ Private Images¶
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 canfar.models import ContainerRegistry
from canfar.session import Session
registry = ContainerRegistry(username="username", secret="sUp3rS3cr3t")
session = Session(registry=registry)
Alternatively, if you have environment variables, CANFAR_REGISTRY_USERNAME and CANFAR_REGISTRY_SECRET, you can create a ContainerRegistry object without providing the username and secret.
from canfar.models import ContainerRegistry
registry = ContainerRegistry()
๐ฃ Destroy Sessions¶
from canfar.session import Session
session = Session()
session.destroy_with(prefix="test", kind="headless", status="Running")
session.destroy_with(prefix="test", kind="headless", status="Pending")
Previous Versions¶
For a complete history of changes, see the Changelog.
Stay Updated¶
- ๐ข GitHub Releases
- ๐ฌ Discussions