Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 12 additions & 4 deletions koyeb/sandbox/sandbox.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

from koyeb.api.api.deployments_api import DeploymentsApi
from koyeb.api.exceptions import ApiException, NotFoundException
from koyeb.api.models.create_app import CreateApp, AppLifeCycle
from koyeb.api.models.create_app import AppLifeCycle, CreateApp
from koyeb.api.models.create_service import CreateService, ServiceLifeCycle
from koyeb.api.models.update_service import UpdateService

Expand Down Expand Up @@ -115,6 +115,7 @@ def create(
privileged: bool = False,
registry_secret: Optional[str] = None,
_experimental_enable_light_sleep: bool = False,
_experimental_deep_sleep_value: int = 3900,
delete_after_delay: int = 0,
delete_after_inactivity_delay: int = 0,
app_id: Optional[str] = None,
Expand Down Expand Up @@ -189,6 +190,7 @@ def create(
privileged=privileged,
registry_secret=registry_secret,
_experimental_enable_light_sleep=_experimental_enable_light_sleep,
_experimental_deep_sleep_value=_experimental_deep_sleep_value,
delete_after_delay=delete_after_delay,
delete_after_inactivity_delay=delete_after_inactivity_delay,
app_id=app_id,
Expand Down Expand Up @@ -221,6 +223,7 @@ def _create_sync(
privileged: bool = False,
registry_secret: Optional[str] = None,
_experimental_enable_light_sleep: bool = False,
_experimental_deep_sleep_value: int = 3900,
delete_after_delay: int = 0,
delete_after_inactivity_delay: int = 0,
app_id: Optional[str] = None,
Expand Down Expand Up @@ -269,6 +272,7 @@ def _create_sync(
idle_timeout=idle_timeout,
enable_tcp_proxy=enable_tcp_proxy,
_experimental_enable_light_sleep=_experimental_enable_light_sleep,
_experimental_deep_sleep_value=_experimental_deep_sleep_value,
)

service_life_cycle = ServiceLifeCycle(
Expand Down Expand Up @@ -952,6 +956,7 @@ async def create(
privileged: bool = False,
registry_secret: Optional[str] = None,
_experimental_enable_light_sleep: bool = False,
_experimental_deep_sleep_value: int = 3900,
delete_after_delay: int = 0,
delete_after_inactivity_delay: int = 0,
app_id: Optional[str] = None,
Expand All @@ -972,16 +977,18 @@ async def create(
api_token: Koyeb API token (if None, will try to get from KOYEB_API_TOKEN env var)
timeout: Timeout for sandbox creation in seconds
idle_timeout: Sleep timeout in seconds. Behavior depends on _experimental_enable_light_sleep:
- If _experimental_enable_light_sleep is True: sets light_sleep value (deep_sleep=3900)
- If _experimental_enable_light_sleep is True: sets light_sleep value (deep_sleep uses _experimental_deep_sleep_value)
- If _experimental_enable_light_sleep is False: sets deep_sleep value
- If 0: disables scale-to-zero (keep always-on)
- If None: uses default values
enable_tcp_proxy: If True, enables TCP proxy for direct TCP access to port 3031
privileged: If True, run the container in privileged mode (default: False)
registry_secret: Name of a Koyeb secret containing registry credentials for
pulling private images. Create the secret via Koyeb dashboard or CLI first.
_experimental_enable_light_sleep: If True, uses idle_timeout for light_sleep and sets
deep_sleep=3900. If False, uses idle_timeout for deep_sleep (default: False)
_experimental_enable_light_sleep: If True, uses idle_timeout for light_sleep and configurable
deep_sleep (default: False)
_experimental_deep_sleep_value: Number of seconds for deep sleep when light sleep is enabled (default: 3900).
Only used if _experimental_enable_light_sleep is True
delete_after_delay: If >0, automatically delete the sandbox if there was no activity
after this many seconds since creation.
delete_after_inactivity_delay: If >0, automatically delete the sandbox if service sleeps due to inactivity
Expand Down Expand Up @@ -1019,6 +1026,7 @@ async def create(
privileged=privileged,
registry_secret=registry_secret,
_experimental_enable_light_sleep=_experimental_enable_light_sleep,
_experimental_deep_sleep_value=_experimental_deep_sleep_value,
delete_after_delay=delete_after_delay,
delete_after_inactivity_delay=delete_after_inactivity_delay,
app_id=app_id,
Expand Down
11 changes: 7 additions & 4 deletions koyeb/sandbox/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@
from koyeb.api.api import (
AppsApi,
CatalogInstancesApi,
DeploymentsApi,
InstancesApi,
ServicesApi,
DeploymentsApi,
)
from koyeb.api.models.deployment_definition import DeploymentDefinition
from koyeb.api.models.deployment_definition_type import DeploymentDefinitionType
Expand Down Expand Up @@ -241,6 +241,7 @@ def create_deployment_definition(
idle_timeout: int = 300,
enable_tcp_proxy: bool = False,
_experimental_enable_light_sleep: bool = False,
_experimental_deep_sleep_value: int = 3900,
) -> DeploymentDefinition:
"""
Create deployment definition for a sandbox service.
Expand All @@ -258,7 +259,9 @@ def create_deployment_definition(
idle_timeout: Number of seconds to wait before sleeping the instance if it receives no traffic
enable_tcp_proxy: If True, enables TCP proxy for direct TCP access to port 3031
_experimental_enable_light_sleep: If True, uses light sleep when reaching idle_timeout.
Light Sleep reduces cold starts to ~200ms. After scaling to zero, the service stays in Light Sleep for 3600s before going into Deep Sleep.
Light Sleep reduces cold starts to ~200ms. After scaling to zero, the service stays in Light Sleep for idle_timeout seconds before going into Deep Sleep.
_experimental_deep_sleep_value: Number of seconds for deep sleep when light sleep is enabled (default: 3900).
Only used if _experimental_enable_light_sleep is True. Ignored otherwise.

Returns:
DeploymentDefinition object
Expand Down Expand Up @@ -287,10 +290,10 @@ def create_deployment_definition(
if idle_timeout == 0:
sleep_idle_delay = None
elif _experimental_enable_light_sleep:
# Experimental mode: idle_timeout sets light_sleep value, deep_sleep is always 3900
# Experimental mode: idle_timeout sets light_sleep value, deep_sleep uses _experimental_deep_sleep_value
sleep_idle_delay = DeploymentScalingTargetSleepIdleDelay(
light_sleep_value=idle_timeout,
deep_sleep_value=3900,
deep_sleep_value=_experimental_deep_sleep_value,
)
else:
# Normal mode: only use deep_sleep
Expand Down
12 changes: 6 additions & 6 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "koyeb-sdk"
version = "1.3.3"
version = "1.2.3"
description = "Koyeb python sdk"
authors = [{ name = "Koyeb team", email = "support@koyeb.com" }]
license = "Apache-2.0"
Expand Down Expand Up @@ -41,11 +41,11 @@ build-backend = "setuptools.build_meta"

[dependency-groups]
dev = [
"autopep8>=2.3.2",
"flake8>=7.3.0",
"pydoc-markdown>=4.8.2",
"pytest>=8.4.2",
"tqdm>=4.67.1",
"autopep8>=2.3.2",
"flake8>=7.3.0",
"pydoc-markdown>=4.8.2",
"pytest>=8.4.2",
"tqdm>=4.67.1",
]

[tool.pylint.'MESSAGES CONTROL']
Expand Down
2 changes: 1 addition & 1 deletion uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading