From e1f8f041be68044c3732613891f021077b9e1b8d Mon Sep 17 00:00:00 2001 From: Mincheol Kang Date: Thu, 13 Feb 2025 13:45:36 +0900 Subject: [PATCH] refactor: Change Absolute Imports to Relative Imports in Storage-Proxy --- changes/3685.enhance.md | 1 + src/ai/backend/common/dto/storage/response.py | 4 ++-- src/ai/backend/storage/api/vfolder/handler.py | 11 +++++------ src/ai/backend/storage/services/service.py | 7 +++---- src/ai/backend/storage/volumes/abc.py | 10 +++++----- src/ai/backend/storage/volumes/cephfs/__init__.py | 9 ++++----- src/ai/backend/storage/volumes/ddn/__init__.py | 11 +++++------ .../backend/storage/volumes/dellemc/__init__.py | 11 +++++------ src/ai/backend/storage/volumes/dellemc/config.py | 2 +- src/ai/backend/storage/volumes/gpfs/__init__.py | 11 +++++------ .../backend/storage/volumes/gpfs/gpfs_client.py | 7 +++---- src/ai/backend/storage/volumes/netapp/__init__.py | 13 ++++++------- .../storage/volumes/netapp/netappclient.py | 4 ++-- src/ai/backend/storage/volumes/pool.py | 7 +++---- .../storage/volumes/purestorage/__init__.py | 7 +++---- .../storage/volumes/purestorage/rapidfiles.py | 9 ++++----- .../storage/volumes/purestorage/rapidfiles_v2.py | 7 +++---- src/ai/backend/storage/volumes/types.py | 8 ++++---- src/ai/backend/storage/volumes/vast/__init__.py | 13 ++++++------- src/ai/backend/storage/volumes/vast/config.py | 2 +- .../storage/volumes/vast/vastdata_client.py | 7 +++---- src/ai/backend/storage/volumes/vfs/__init__.py | 13 ++++++------- src/ai/backend/storage/volumes/weka/__init__.py | 11 +++++------ .../backend/storage/volumes/weka/weka_client.py | 5 ++--- src/ai/backend/storage/volumes/xfs/__init__.py | 15 +++++++-------- 25 files changed, 94 insertions(+), 111 deletions(-) create mode 100644 changes/3685.enhance.md diff --git a/changes/3685.enhance.md b/changes/3685.enhance.md new file mode 100644 index 0000000000..98ce4e715a --- /dev/null +++ b/changes/3685.enhance.md @@ -0,0 +1 @@ +Change Absolute Imports to Relative Imports in Storage-Proxy \ No newline at end of file diff --git a/src/ai/backend/common/dto/storage/response.py b/src/ai/backend/common/dto/storage/response.py index fc358a31b4..8e74815330 100644 --- a/src/ai/backend/common/dto/storage/response.py +++ b/src/ai/backend/common/dto/storage/response.py @@ -2,8 +2,8 @@ from pydantic import Field -from ai.backend.common.api_handlers import BaseResponseModel -from ai.backend.common.dto.storage.field import VFolderMetaField, VolumeMetaField +from ...api_handlers import BaseResponseModel +from .field import VFolderMetaField, VolumeMetaField class GetVolumeResponse(BaseResponseModel): diff --git a/src/ai/backend/storage/api/vfolder/handler.py b/src/ai/backend/storage/api/vfolder/handler.py index d8e88e241b..549a67aa49 100644 --- a/src/ai/backend/storage/api/vfolder/handler.py +++ b/src/ai/backend/storage/api/vfolder/handler.py @@ -1,19 +1,18 @@ from typing import Optional, Protocol -from ai.backend.common.api_handlers import APIResponse, BodyParam, PathParam, api_handler -from ai.backend.common.dto.storage.path import QuotaScopeKeyPath, VFolderKeyPath, VolumeIDPath -from ai.backend.common.dto.storage.request import ( +from ....common.api_handlers import APIResponse, BodyParam, PathParam, api_handler +from ....common.dto.storage.path import QuotaScopeKeyPath, VFolderKeyPath, VolumeIDPath +from ....common.dto.storage.request import ( CloneVFolderReq, GetVFolderMetaReq, QuotaScopeReq, ) -from ai.backend.common.dto.storage.response import ( +from ....common.dto.storage.response import ( GetVolumeResponse, GetVolumesResponse, VFolderMetadataResponse, ) -from ai.backend.common.types import QuotaConfig, VFolderID, VolumeID - +from ....common.types import QuotaConfig, VFolderID, VolumeID from ...volumes.types import ( QuotaScopeKey, QuotaScopeMeta, diff --git a/src/ai/backend/storage/services/service.py b/src/ai/backend/storage/services/service.py index 5b3815f320..6eabee9bda 100644 --- a/src/ai/backend/storage/services/service.py +++ b/src/ai/backend/storage/services/service.py @@ -8,10 +8,9 @@ from aiohttp import web -from ai.backend.common.events import VFolderDeletionFailureEvent, VFolderDeletionSuccessEvent -from ai.backend.common.types import QuotaConfig, VFolderID, VolumeID -from ai.backend.logging.utils import BraceStyleAdapter - +from ...common.events import VFolderDeletionFailureEvent, VFolderDeletionSuccessEvent +from ...common.types import QuotaConfig, VFolderID, VolumeID +from ...logging.utils import BraceStyleAdapter from ..exception import ( ExternalError, InvalidQuotaConfig, diff --git a/src/ai/backend/storage/volumes/abc.py b/src/ai/backend/storage/volumes/abc.py index 732d31b403..5e3027246f 100644 --- a/src/ai/backend/storage/volumes/abc.py +++ b/src/ai/backend/storage/volumes/abc.py @@ -16,12 +16,11 @@ ) from ai.backend.common.defs import DEFAULT_VFOLDER_PERMISSION_MODE -from ai.backend.common.etcd import AsyncEtcd -from ai.backend.common.events import EventDispatcher, EventProducer -from ai.backend.common.types import BinarySize, HardwareMetadata, QuotaScopeID -from ai.backend.logging import BraceStyleAdapter -from ai.backend.storage.watcher import WatcherClient +from ...common.etcd import AsyncEtcd +from ...common.events import EventDispatcher, EventProducer +from ...common.types import BinarySize, HardwareMetadata, QuotaScopeID +from ...logging import BraceStyleAdapter from ..exception import InvalidSubpathError, VFolderNotFoundError from ..types import ( CapacityUsage, @@ -32,6 +31,7 @@ TreeUsage, VFolderID, ) +from ..watcher import WatcherClient # Available capabilities of a volume implementation CAP_VFOLDER: Final = "vfolder" # ability to create vfolder diff --git a/src/ai/backend/storage/volumes/cephfs/__init__.py b/src/ai/backend/storage/volumes/cephfs/__init__.py index 978e538b68..90b79c569f 100644 --- a/src/ai/backend/storage/volumes/cephfs/__init__.py +++ b/src/ai/backend/storage/volumes/cephfs/__init__.py @@ -6,11 +6,10 @@ import aiofiles.os -from ai.backend.common.types import BinarySize, QuotaScopeID -from ai.backend.storage.exception import QuotaScopeNotFoundError -from ai.backend.storage.subproc import run -from ai.backend.storage.types import CapacityUsage, Optional, QuotaConfig, QuotaUsage, TreeUsage - +from ....common.types import BinarySize, QuotaScopeID +from ...exception import QuotaScopeNotFoundError +from ...subproc import run +from ...types import CapacityUsage, Optional, QuotaConfig, QuotaUsage, TreeUsage from ..abc import ( CAP_FAST_SIZE, CAP_QUOTA, diff --git a/src/ai/backend/storage/volumes/ddn/__init__.py b/src/ai/backend/storage/volumes/ddn/__init__.py index 7791274f9c..836b84b316 100644 --- a/src/ai/backend/storage/volumes/ddn/__init__.py +++ b/src/ai/backend/storage/volumes/ddn/__init__.py @@ -6,12 +6,11 @@ import aiofiles import aiofiles.os -from ai.backend.common.etcd import AsyncEtcd -from ai.backend.common.types import QuotaScopeID -from ai.backend.storage.exception import QuotaScopeAlreadyExists, QuotaScopeNotFoundError -from ai.backend.storage.subproc import run -from ai.backend.storage.types import Optional, QuotaConfig, QuotaUsage - +from ....common.etcd import AsyncEtcd +from ....common.types import QuotaScopeID +from ...exception import QuotaScopeAlreadyExists, QuotaScopeNotFoundError +from ...subproc import run +from ...types import Optional, QuotaConfig, QuotaUsage from ..abc import CAP_QUOTA, CAP_VFOLDER, AbstractQuotaModel from ..vfs import BaseQuotaModel, BaseVolume diff --git a/src/ai/backend/storage/volumes/dellemc/__init__.py b/src/ai/backend/storage/volumes/dellemc/__init__.py index 049d0d66d6..875d6e1cce 100644 --- a/src/ai/backend/storage/volumes/dellemc/__init__.py +++ b/src/ai/backend/storage/volumes/dellemc/__init__.py @@ -6,12 +6,11 @@ import aiofiles.os -from ai.backend.common.etcd import AsyncEtcd -from ai.backend.common.events import EventDispatcher, EventProducer -from ai.backend.common.types import HardwareMetadata, QuotaScopeID -from ai.backend.storage.exception import NotEmptyError -from ai.backend.storage.types import CapacityUsage, FSPerfMetric, QuotaConfig, QuotaUsage - +from ....common.etcd import AsyncEtcd +from ....common.events import EventDispatcher, EventProducer +from ....common.types import HardwareMetadata, QuotaScopeID +from ...exception import NotEmptyError +from ...types import CapacityUsage, FSPerfMetric, QuotaConfig, QuotaUsage from ..abc import CAP_FAST_FS_SIZE, CAP_METRIC, CAP_QUOTA, CAP_VFOLDER, AbstractQuotaModel from ..vfs import BaseQuotaModel, BaseVolume from .config import config_iv diff --git a/src/ai/backend/storage/volumes/dellemc/config.py b/src/ai/backend/storage/volumes/dellemc/config.py index 40f006a5c0..4ce999fe48 100644 --- a/src/ai/backend/storage/volumes/dellemc/config.py +++ b/src/ai/backend/storage/volumes/dellemc/config.py @@ -1,6 +1,6 @@ import trafaret as t -from ai.backend.common import validators as tx +from ....common import validators as tx config_iv = t.Dict({ t.Key("dell_endpoint"): t.String(), diff --git a/src/ai/backend/storage/volumes/gpfs/__init__.py b/src/ai/backend/storage/volumes/gpfs/__init__.py index 3b0a3558fc..36e4df4e95 100644 --- a/src/ai/backend/storage/volumes/gpfs/__init__.py +++ b/src/ai/backend/storage/volumes/gpfs/__init__.py @@ -3,12 +3,11 @@ from pathlib import Path from typing import Any, FrozenSet, Mapping, Optional -from ai.backend.common.etcd import AsyncEtcd -from ai.backend.common.events import EventDispatcher, EventProducer -from ai.backend.common.types import BinarySize, HardwareMetadata, QuotaScopeID -from ai.backend.logging import BraceStyleAdapter -from ai.backend.storage.types import CapacityUsage, FSPerfMetric - +from ....common.etcd import AsyncEtcd +from ....common.events import EventDispatcher, EventProducer +from ....common.types import BinarySize, HardwareMetadata, QuotaScopeID +from ....logging import BraceStyleAdapter +from ...types import CapacityUsage, FSPerfMetric from ..abc import ( CAP_FAST_FS_SIZE, CAP_METRIC, diff --git a/src/ai/backend/storage/volumes/gpfs/gpfs_client.py b/src/ai/backend/storage/volumes/gpfs/gpfs_client.py index 165d97297a..ee6dcde047 100644 --- a/src/ai/backend/storage/volumes/gpfs/gpfs_client.py +++ b/src/ai/backend/storage/volumes/gpfs/gpfs_client.py @@ -16,10 +16,9 @@ wait_fixed, ) -from ai.backend.common.types import BinarySize -from ai.backend.logging import BraceStyleAdapter -from ai.backend.storage.exception import ExternalError - +from ....common.types import BinarySize +from ....logging import BraceStyleAdapter +from ...exception import ExternalError from .exceptions import ( GPFSAPIError, GPFSInvalidBodyError, diff --git a/src/ai/backend/storage/volumes/netapp/__init__.py b/src/ai/backend/storage/volumes/netapp/__init__.py index 499e6e4510..ca6ca33447 100644 --- a/src/ai/backend/storage/volumes/netapp/__init__.py +++ b/src/ai/backend/storage/volumes/netapp/__init__.py @@ -27,16 +27,16 @@ wait_fixed, ) -from ai.backend.common.types import BinarySize, HardwareMetadata, QuotaScopeID -from ai.backend.logging import BraceStyleAdapter -from ai.backend.storage.exception import ( +from ....common.types import BinarySize, HardwareMetadata, QuotaScopeID +from ....logging import BraceStyleAdapter +from ...exception import ( ExecutionError, InvalidQuotaScopeError, NotEmptyError, QuotaScopeNotFoundError, ) -from ai.backend.storage.subproc import spawn_and_watch -from ai.backend.storage.types import ( +from ...subproc import spawn_and_watch +from ...types import ( SENTINEL, CapacityUsage, DirEntry, @@ -48,8 +48,7 @@ Stat, TreeUsage, ) -from ai.backend.storage.utils import fstime2datetime - +from ...utils import fstime2datetime from ..abc import ( CAP_FAST_FS_SIZE, CAP_FAST_SIZE, diff --git a/src/ai/backend/storage/volumes/netapp/netappclient.py b/src/ai/backend/storage/volumes/netapp/netappclient.py index 93f2d6fbd1..842a66cbd4 100644 --- a/src/ai/backend/storage/volumes/netapp/netappclient.py +++ b/src/ai/backend/storage/volumes/netapp/netappclient.py @@ -75,8 +75,8 @@ import aiohttp -from ai.backend.storage.exception import ExternalError -from ai.backend.storage.types import QuotaConfig, QuotaUsage +from ...exception import ExternalError +from ...types import QuotaConfig, QuotaUsage StorageID: TypeAlias = uuid.UUID VolumeID: TypeAlias = uuid.UUID diff --git a/src/ai/backend/storage/volumes/pool.py b/src/ai/backend/storage/volumes/pool.py index 149234c4cf..98d27a6b1e 100644 --- a/src/ai/backend/storage/volumes/pool.py +++ b/src/ai/backend/storage/volumes/pool.py @@ -4,10 +4,9 @@ from pathlib import Path from typing import Any, AsyncIterator, Mapping, Type -from ai.backend.common.etcd import AsyncEtcd -from ai.backend.common.events import EventDispatcher, EventProducer -from ai.backend.common.types import VolumeID - +from ...common.etcd import AsyncEtcd +from ...common.events import EventDispatcher, EventProducer +from ...common.types import VolumeID from ..exception import InvalidVolumeError from ..types import VolumeInfo from .abc import AbstractVolume diff --git a/src/ai/backend/storage/volumes/purestorage/__init__.py b/src/ai/backend/storage/volumes/purestorage/__init__.py index 4ccad33f88..795fcbbd46 100644 --- a/src/ai/backend/storage/volumes/purestorage/__init__.py +++ b/src/ai/backend/storage/volumes/purestorage/__init__.py @@ -6,10 +6,9 @@ import re from typing import FrozenSet -from ai.backend.common.types import HardwareMetadata -from ai.backend.logging import BraceStyleAdapter -from ai.backend.storage.types import CapacityUsage, FSPerfMetric - +from ....common.types import HardwareMetadata +from ....logging import BraceStyleAdapter +from ...types import CapacityUsage, FSPerfMetric from ..abc import ( CAP_FAST_FS_SIZE, CAP_FAST_SCAN, diff --git a/src/ai/backend/storage/volumes/purestorage/rapidfiles.py b/src/ai/backend/storage/volumes/purestorage/rapidfiles.py index dd88d437d4..89b8050389 100644 --- a/src/ai/backend/storage/volumes/purestorage/rapidfiles.py +++ b/src/ai/backend/storage/volumes/purestorage/rapidfiles.py @@ -5,11 +5,10 @@ from subprocess import CalledProcessError from typing import AsyncIterator -from ai.backend.common.types import BinarySize -from ai.backend.storage.subproc import run -from ai.backend.storage.types import DirEntry, DirEntryType, Stat, TreeUsage -from ai.backend.storage.utils import fstime2datetime - +from ....common.types import BinarySize +from ...subproc import run +from ...types import DirEntry, DirEntryType, Stat, TreeUsage +from ...utils import fstime2datetime from ..vfs import BaseFSOpModel diff --git a/src/ai/backend/storage/volumes/purestorage/rapidfiles_v2.py b/src/ai/backend/storage/volumes/purestorage/rapidfiles_v2.py index ec6f44e09d..65b9978587 100644 --- a/src/ai/backend/storage/volumes/purestorage/rapidfiles_v2.py +++ b/src/ai/backend/storage/volumes/purestorage/rapidfiles_v2.py @@ -5,10 +5,9 @@ from subprocess import CalledProcessError from typing import AsyncIterator -from ai.backend.storage.subproc import run -from ai.backend.storage.types import DirEntry, DirEntryType, Stat, TreeUsage -from ai.backend.storage.utils import fstime2datetime - +from ...subproc import run +from ...types import DirEntry, DirEntryType, Stat, TreeUsage +from ...utils import fstime2datetime from .rapidfiles import RapidFileToolsFSOpModel diff --git a/src/ai/backend/storage/volumes/types.py b/src/ai/backend/storage/volumes/types.py index a93d8fe586..6d71e15e29 100644 --- a/src/ai/backend/storage/volumes/types.py +++ b/src/ai/backend/storage/volumes/types.py @@ -4,10 +4,10 @@ from pydantic import BaseModel, Field -from ai.backend.common.dto.storage.field import VFolderMetaField, VolumeMetaField -from ai.backend.common.dto.storage.path import QuotaScopeKeyPath, VFolderKeyPath -from ai.backend.common.dto.storage.response import QuotaScopeResponse -from ai.backend.common.types import QuotaScopeID, VFolderID, VolumeID +from ...common.dto.storage.field import VFolderMetaField, VolumeMetaField +from ...common.dto.storage.path import QuotaScopeKeyPath, VFolderKeyPath +from ...common.dto.storage.response import QuotaScopeResponse +from ...common.types import QuotaScopeID, VFolderID, VolumeID @dataclass diff --git a/src/ai/backend/storage/volumes/vast/__init__.py b/src/ai/backend/storage/volumes/vast/__init__.py index bd97c7162a..0c2064f8d4 100644 --- a/src/ai/backend/storage/volumes/vast/__init__.py +++ b/src/ai/backend/storage/volumes/vast/__init__.py @@ -9,18 +9,17 @@ import aiofiles import aiofiles.os -from ai.backend.common.etcd import AsyncEtcd -from ai.backend.common.events import EventDispatcher, EventProducer -from ai.backend.common.types import HardwareMetadata, QuotaConfig, QuotaScopeID -from ai.backend.logging import BraceStyleAdapter -from ai.backend.storage.exception import ( +from ....common.etcd import AsyncEtcd +from ....common.events import EventDispatcher, EventProducer +from ....common.types import HardwareMetadata, QuotaConfig, QuotaScopeID +from ....logging import BraceStyleAdapter +from ...exception import ( ExternalError, InvalidQuotaConfig, QuotaScopeNotFoundError, StorageProxyError, ) -from ai.backend.storage.types import CapacityUsage, FSPerfMetric, QuotaUsage - +from ...types import CapacityUsage, FSPerfMetric, QuotaUsage from ..abc import CAP_FAST_FS_SIZE, CAP_FAST_SIZE, CAP_METRIC, CAP_QUOTA, CAP_VFOLDER from ..vfs import BaseQuotaModel, BaseVolume from .config import config_iv diff --git a/src/ai/backend/storage/volumes/vast/config.py b/src/ai/backend/storage/volumes/vast/config.py index a0dc2e989c..285ad9af80 100644 --- a/src/ai/backend/storage/volumes/vast/config.py +++ b/src/ai/backend/storage/volumes/vast/config.py @@ -3,7 +3,7 @@ import trafaret as t -from ai.backend.common import validators as tx +from ....common import validators as tx DEFAULT_CLUSTER_ID: Final = 1 diff --git a/src/ai/backend/storage/volumes/vast/vastdata_client.py b/src/ai/backend/storage/volumes/vast/vastdata_client.py index baed79da96..401c27162c 100644 --- a/src/ai/backend/storage/volumes/vast/vastdata_client.py +++ b/src/ai/backend/storage/volumes/vast/vastdata_client.py @@ -12,10 +12,9 @@ import jwt from yarl import URL -from ai.backend.logging import BraceStyleAdapter -from ai.backend.storage.exception import ExternalError, QuotaScopeAlreadyExists -from ai.backend.storage.types import CapacityUsage - +from ....logging import BraceStyleAdapter +from ...exception import ExternalError, QuotaScopeAlreadyExists +from ...types import CapacityUsage from .config import APIVersion from .exceptions import ( VASTAPIError, diff --git a/src/ai/backend/storage/volumes/vfs/__init__.py b/src/ai/backend/storage/volumes/vfs/__init__.py index f0b4d5ef2d..79ce28633c 100644 --- a/src/ai/backend/storage/volumes/vfs/__init__.py +++ b/src/ai/backend/storage/volumes/vfs/__init__.py @@ -16,18 +16,18 @@ import janus import trafaret as t -from ai.backend.common.defs import DEFAULT_VFOLDER_PERMISSION_MODE -from ai.backend.common.types import BinarySize, HardwareMetadata, QuotaScopeID -from ai.backend.logging import BraceStyleAdapter -from ai.backend.storage.exception import ( +from ....common.defs import DEFAULT_VFOLDER_PERMISSION_MODE +from ....common.types import BinarySize, HardwareMetadata, QuotaScopeID +from ....logging import BraceStyleAdapter +from ...exception import ( ExecutionError, InvalidAPIParameters, InvalidQuotaScopeError, NotEmptyError, QuotaScopeNotFoundError, ) -from ai.backend.storage.subproc import run -from ai.backend.storage.types import ( +from ...subproc import run +from ...types import ( SENTINEL, CapacityUsage, DirEntry, @@ -40,7 +40,6 @@ TreeUsage, VFolderID, ) - from ...utils import fstime2datetime from ...watcher import DeletePathTask, WatcherClient from ..abc import CAP_VFOLDER, AbstractFSOpModel, AbstractQuotaModel, AbstractVolume diff --git a/src/ai/backend/storage/volumes/weka/__init__.py b/src/ai/backend/storage/volumes/weka/__init__.py index c779fd1d48..1cef3009f8 100644 --- a/src/ai/backend/storage/volumes/weka/__init__.py +++ b/src/ai/backend/storage/volumes/weka/__init__.py @@ -8,12 +8,11 @@ import aiofiles.os -from ai.backend.common.etcd import AsyncEtcd -from ai.backend.common.events import EventDispatcher, EventProducer -from ai.backend.common.types import HardwareMetadata, QuotaConfig, QuotaScopeID -from ai.backend.logging import BraceStyleAdapter -from ai.backend.storage.types import CapacityUsage, FSPerfMetric, QuotaUsage - +from ....common.etcd import AsyncEtcd +from ....common.events import EventDispatcher, EventProducer +from ....common.types import HardwareMetadata, QuotaConfig, QuotaScopeID +from ....logging import BraceStyleAdapter +from ...types import CapacityUsage, FSPerfMetric, QuotaUsage from ..abc import CAP_FAST_FS_SIZE, CAP_METRIC, CAP_QUOTA, CAP_VFOLDER, AbstractQuotaModel from ..vfs import BaseQuotaModel, BaseVolume from .exceptions import WekaAPIError, WekaInitError, WekaNoMetricError, WekaNotFoundError diff --git a/src/ai/backend/storage/volumes/weka/weka_client.py b/src/ai/backend/storage/volumes/weka/weka_client.py index dd2ff1288e..f6fccd2607 100644 --- a/src/ai/backend/storage/volumes/weka/weka_client.py +++ b/src/ai/backend/storage/volumes/weka/weka_client.py @@ -10,9 +10,8 @@ import aiohttp from aiohttp import web -from ai.backend.common.types import BinarySize -from ai.backend.logging import BraceStyleAdapter - +from ....common.types import BinarySize +from ....logging import BraceStyleAdapter from .exceptions import WekaAPIError, WekaInvalidBodyError, WekaNotFoundError, WekaUnauthorizedError log = BraceStyleAdapter(logging.getLogger(__spec__.name)) diff --git a/src/ai/backend/storage/volumes/xfs/__init__.py b/src/ai/backend/storage/volumes/xfs/__init__.py index 82a3d33184..0091e3b249 100644 --- a/src/ai/backend/storage/volumes/xfs/__init__.py +++ b/src/ai/backend/storage/volumes/xfs/__init__.py @@ -14,17 +14,16 @@ import aiofiles import aiofiles.os -from ai.backend.common.lock import FileLock -from ai.backend.common.types import QuotaScopeID -from ai.backend.logging import BraceStyleAdapter -from ai.backend.storage.exception import InvalidQuotaScopeError, NotEmptyError -from ai.backend.storage.subproc import run -from ai.backend.storage.types import ( +from ....common.lock import FileLock +from ....common.types import QuotaScopeID +from ....logging import BraceStyleAdapter +from ...exception import InvalidQuotaScopeError, NotEmptyError +from ...subproc import run +from ...types import ( QuotaConfig, QuotaUsage, ) -from ai.backend.storage.volumes.abc import CAP_QUOTA, CAP_VFOLDER - +from ...volumes.abc import CAP_QUOTA, CAP_VFOLDER from ..abc import AbstractQuotaModel from ..vfs import BaseQuotaModel, BaseVolume