Files
e2b-dev--e2b/packages/python-sdk/e2b/volume/utils.py
T
2026-07-13 12:47:58 +08:00

53 lines
1.7 KiB
Python

import datetime
from typing import Optional
from e2b.volume.client.models import VolumeEntryStat as VolumeEntryStatApi
from e2b.volume.client.types import UNSET
from e2b.volume.types import VolumeEntryStat
def _ensure_utc(dt: datetime.datetime) -> datetime.datetime:
"""Mark a timezone-naive datetime as UTC (API timestamps are UTC)."""
if dt.tzinfo is None:
return dt.replace(tzinfo=datetime.timezone.utc)
return dt
def convert_volume_entry_stat(api_stat: VolumeEntryStatApi) -> VolumeEntryStat:
"""Convert API VolumeEntryStat to SDK VolumeEntryStat."""
target: Optional[str] = None
if api_stat.target is not UNSET and api_stat.target is not None:
target = str(api_stat.target)
return VolumeEntryStat(
name=api_stat.name,
type=api_stat.type_,
path=api_stat.path,
size=api_stat.size,
mode=api_stat.mode,
uid=api_stat.uid,
gid=api_stat.gid,
atime=_ensure_utc(api_stat.atime),
mtime=_ensure_utc(api_stat.mtime),
ctime=_ensure_utc(api_stat.ctime),
target=target,
)
class DualMethod:
"""Descriptor enabling the same name for a static (class-level) and instance method.
When accessed on the class (e.g. ``Volume.get_info``), the static function
is returned. When accessed on an instance (e.g. ``vol.get_info``), the
instance method is returned as a bound method.
"""
def __init__(self, static_fn, instance_fn):
self._static_fn = static_fn
self._instance_fn = instance_fn
def __get__(self, obj, objtype=None):
if obj is None:
return self._static_fn
return self._instance_fn.__get__(obj, objtype)