"""Folders resource: ``/folders`` endpoints."""
from __future__ import annotations
from typing import Any
from pydantic import BaseModel
from pypresscart.models._common import Paginated
from pypresscart.models.folders import (
DeleteFolderResponse,
Folder,
FolderCreateRequest,
FolderRenameRequest,
)
from pypresscart.resources._base import ResourceBase
[docs]
class FoldersResource(ResourceBase):
"""Folder management."""
[docs]
def list(
self,
*,
q: str | None = None,
as_json: bool | None = None,
) -> Paginated[Folder] | dict[str, Any]:
"""List folders. Required scope: ``folders.lists``."""
payload = self._client._request("GET", "/folders", params={"q": q})
return self._parse_paginated(payload, Folder, as_json)
[docs]
def create(
self,
body: FolderCreateRequest | BaseModel | dict[str, Any],
*,
as_json: bool | None = None,
) -> Folder | dict[str, Any]:
"""Create a folder. Required scope: ``folders.create``."""
payload = self._client._request("POST", "/folders", json=self._serialize(body))
return self._parse(payload, Folder, as_json)
[docs]
def rename(
self,
folder_id: str,
body: FolderRenameRequest | BaseModel | dict[str, Any],
*,
as_json: bool | None = None,
) -> Folder | dict[str, Any]:
"""Rename a folder. Required scope: ``folders.update``."""
payload = self._client._request(
"PATCH", f"/folders/{folder_id}", json=self._serialize(body)
)
return self._parse(payload, Folder, as_json)
[docs]
def delete(
self,
folder_id: str,
*,
as_json: bool | None = None,
) -> DeleteFolderResponse | dict[str, Any]:
"""Delete a folder (files within lose their folder association). Scope: ``folders.delete``."""
payload = self._client._request("DELETE", f"/folders/{folder_id}")
return self._parse(payload, DeleteFolderResponse, as_json)