Skip to content

Commit 1b9dc39

Browse files
committed
feat: Drive周りのモデルと型を最新の物に追従
1 parent 892a164 commit 1b9dc39

File tree

2 files changed

+91
-46
lines changed

2 files changed

+91
-46
lines changed

mipac/models/drive.py

Lines changed: 65 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from typing import TYPE_CHECKING, Any
44

55
from mipac.abstract.model import AbstractModel
6+
from mipac.models.lite.user import PartialUser
67
from mipac.types.drive import IDriveStatus
78

89
if TYPE_CHECKING:
@@ -42,20 +43,24 @@ def usage(self) -> int:
4243

4344

4445
class FileProperties(AbstractModel):
45-
def __init__(self, properties: IFileProperties) -> None:
46-
self.__properties: IFileProperties = properties
46+
def __init__(self, raw_properties: IFileProperties) -> None:
47+
self.__raw_properties: IFileProperties = raw_properties
4748

4849
@property
4950
def width(self) -> int | None:
50-
return self.__properties["width"]
51+
return self.__raw_properties.get("width")
5152

5253
@property
53-
def height(self) -> int:
54-
return self.__properties["height"]
54+
def height(self) -> int | None:
55+
return self.__raw_properties.get("height")
56+
57+
@property
58+
def orientation(self) -> int | None:
59+
return self.__raw_properties.get("orientation")
5560

5661
@property
5762
def avg_color(self) -> str | None:
58-
return self.__properties["avg_color"]
63+
return self.__raw_properties.get("avg_color")
5964

6065

6166
class Folder(AbstractModel):
@@ -65,36 +70,35 @@ def __init__(self, folder: FolderPayload, client: ClientManager):
6570

6671
@property
6772
def id(self) -> str:
68-
"""フォルダのID"""
6973
return self.__folder["id"]
7074

7175
@property
7276
def created_at(self) -> str: # TODO: 型
73-
"""フォルダの作成日時"""
7477
return self.__folder["created_at"]
7578

7679
@property
7780
def name(self) -> str:
78-
"""フォルダ名"""
7981
return self.__folder["name"]
8082

8183
@property
82-
def folders_count(self) -> int:
83-
"""フォルダ内のフォルダ数"""
84-
return self.__folder["folders_count"]
84+
def parent_id(self) -> str | None:
85+
return self.__folder["parent_id"]
8586

8687
@property
87-
def files_count(self) -> int:
88-
"""フォルダ内のファイル数"""
89-
return self.__folder["files_count"]
88+
def folders_count(self) -> int | None:
89+
return self.__folder.get("folders_count")
9090

9191
@property
92-
def parent_id(self) -> str:
93-
return self.__folder["parent_id"]
92+
def files_count(self) -> int | None:
93+
return self.__folder.get("files_count")
9494

9595
@property
96-
def parent(self) -> dict[str, Any]:
97-
return self.__folder["parent"]
96+
def parent(self) -> Folder | None:
97+
return (
98+
Folder(self.__folder["parent"], client=self.__client)
99+
if "parent" in self.__folder and self.__folder["parent"]
100+
else None
101+
)
98102

99103
@property
100104
def api(self) -> ClientFolderManager:
@@ -120,41 +124,69 @@ def id(self) -> str:
120124
def created_at(self):
121125
return self.__file["created_at"]
122126

127+
@property
128+
def name(self) -> str:
129+
return self.__file["name"]
130+
131+
@property
132+
def type(self) -> str:
133+
return self.__file["type"]
134+
135+
@property
136+
def md5(self) -> str:
137+
return self.__file["md5"]
138+
139+
@property
140+
def size(self) -> int:
141+
return self.__file["size"]
142+
123143
@property
124144
def is_sensitive(self) -> bool:
125145
return self.__file["is_sensitive"]
126146

127147
@property
128-
def name(self) -> str:
129-
return self.__file["name"]
148+
def blurhash(self) -> str | None:
149+
return self.__file["blurhash"]
130150

131151
@property
132-
def thumbnail_url(self) -> str:
133-
return self.__file["thumbnail_url"]
152+
def properties(self) -> FileProperties:
153+
return FileProperties(self.__file["properties"])
134154

135155
@property
136156
def url(self) -> str:
137157
return self.__file["url"]
138158

139159
@property
140-
def type(self) -> str:
141-
return self.__file["type"]
160+
def thumbnail_url(self) -> str | None:
161+
return self.__file["thumbnail_url"]
142162

143163
@property
144-
def size(self) -> int:
145-
return self.__file["size"]
164+
def comment(self) -> str | None:
165+
return self.__file["comment"]
146166

147167
@property
148-
def md5(self) -> str:
149-
return self.__file["md5"]
168+
def folder_id(self) -> str | None:
169+
return self.__file["folder_id"]
150170

151171
@property
152-
def blurhash(self) -> str:
153-
return self.__file["blurhash"]
172+
def folder(self) -> Folder | None:
173+
return (
174+
Folder(self.__file["folder"], client=self.__client)
175+
if "folder" in self.__file and self.__file["folder"]
176+
else None
177+
)
154178

155179
@property
156-
def properties(self) -> FileProperties:
157-
return FileProperties(self.__file["properties"])
180+
def user_id(self) -> str | None:
181+
return self.__file["user_id"]
182+
183+
@property
184+
def user(self) -> PartialUser | None:
185+
return (
186+
PartialUser(self.__file["user"], client=self.__client)
187+
if "user" in self.__file and self.__file["user"]
188+
else None
189+
)
158190

159191
@property
160192
def api(self) -> ClientFileManager:

mipac/types/drive.py

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
11
from __future__ import annotations
22

3-
from typing import Any, TypedDict
3+
from typing import TYPE_CHECKING, Any, Literal, NotRequired, TypedDict
4+
5+
if TYPE_CHECKING:
6+
from mipac.models.lite.user import PartialUser
7+
48

59
__all__ = ("IFileProperties", "FolderPayload", "IDriveFile")
610

11+
IDriveSort = Literal["+createdAt", "-createdAt", "+name", "-name", "+size", "-size"]
12+
13+
714
class IDriveStatus(TypedDict):
815
capacity: int
916
usage: int
@@ -14,9 +21,10 @@ class IFileProperties(TypedDict):
1421
プロパティー情報
1522
"""
1623

17-
width: int
18-
height: int
19-
avg_color: str | None
24+
width: NotRequired[int]
25+
height: NotRequired[int]
26+
orientation: NotRequired[int]
27+
avg_color: NotRequired[str]
2028

2129

2230
class FolderPayload(TypedDict):
@@ -27,10 +35,10 @@ class FolderPayload(TypedDict):
2735
id: str
2836
created_at: str
2937
name: str
30-
folders_count: int
31-
files_count: int
32-
parent_id: str
33-
parent: dict[str, Any]
38+
parent_id: str | None
39+
folders_count: NotRequired[int]
40+
files_count: NotRequired[int]
41+
parent: NotRequired[FolderPayload | None]
3442

3543

3644
class IDriveFile(TypedDict):
@@ -40,12 +48,17 @@ class IDriveFile(TypedDict):
4048

4149
id: str
4250
created_at: str
43-
is_sensitive: bool
4451
name: str
45-
thumbnail_url: str
46-
url: str
4752
type: str
48-
size: int
4953
md5: str
50-
blurhash: str
54+
size: int
55+
is_sensitive: bool
56+
blurhash: str | None
5157
properties: IFileProperties
58+
url: str
59+
thumbnail_url: str | None
60+
comment: str | None
61+
folder_id: str | None
62+
folder: NotRequired[FolderPayload | None]
63+
user_id: str | None
64+
user: NotRequired[PartialUser | None]

0 commit comments

Comments
 (0)