53 lines
1.7 KiB
Python
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)
|