@@ -14,30 +14,34 @@ class File:
1414 FAMILY = "v3"
1515 interface = RequestInterface (family = FAMILY )
1616
17- class Item ( APIResponseItem ) :
17+ class Item :
1818 def __init__ (self , response : dict ) -> None :
19- super ().__init__ (response )
20- self .file_id = response ["fileId" ]
21- self .file_name = response ["fileName" ]
22- self .folder_id = response ["folderId" ]
23- self .content_type = response ["mimeType" ]
19+ self .file_id : str = response ["fileId" ]
20+ self .file_name : str = response ["fileName" ]
21+ self .url : str = response .get ("url" , "" )
22+ self .created_by : str = response .get ("createdBy" , "" )
23+ self .last_modified : str = response .get ("lastModified" , "" )
24+ self .file_type : dict = response .get ("fileType" , {})
25+ self .file_category : Optional [str ] = response .get ("fileCategory" , None )
26+ self .size : str = str (response .get ("size" , "" ))
27+ self .created_at : str = response .get ("createdAt" , "" )
28+ self .status : str = response .get ("status" , "" )
29+ self .duration : Optional [str ] = response .get ("duration" , None )
2430
2531 def download (self , fileName : str , path : str = "./" ) -> None :
26- if not fileName :
27- raise Exception ("Please supply a valid file name" )
2832 if not self .url :
29- raise Exception ("No URL found for this file" )
30- RequestInterface .download_url (self .url , destination = path , name = fileName )
33+ raise Exception (
34+ "No URL found for this file. Please check the file has been processed."
35+ )
36+ RequestInterface .download_url (url = self .url , destination = path , name = fileName )
3137
32- class List (APIResponseList ):
33- def __init__ (self , response : dict , list_type : str ) -> None :
34- super ().__init__ (response , list_type )
35-
36- def resolve_item (self , list_type : str , item : Any ) -> "File.Item" :
37- if list_type == "items" or list_type == "files" :
38- return File .Item ({"data" : item })
39- else :
40- raise Exception ()
38+ @staticmethod
39+ def get (file_id : str ) -> Item :
40+ r = File .interface .send_request (
41+ rtype = RequestTypes .GET ,
42+ route = f"file/{ file_id } " ,
43+ )
44+ return File .Item (response = r )
4145
4246 @staticmethod
4347 def create (
@@ -61,140 +65,99 @@ def create(
6165 }
6266
6367 if category :
64- payload ["categoryId" ] = File .get_category_id_by_name (category )
68+ payload ["categoryId" ] = File .get_category_id_by_name (name = category )
6569
6670 r = File .interface .send_request (
6771 rtype = RequestTypes .POST ,
6872 route = "file/create-upload-url" ,
6973 json = payload ,
7074 )
71- File .interface .send_upload_request (local_path = local_path , upload_url = r ["uploadUrl" ], mime_type = r ["mimeType" ])
72- return File .Item (r )
73-
74- @staticmethod
75- def modify (
76- file_id : str ,
77- file_name : str ,
78- category : str = "" ,
79- ) -> Item :
80- category_id = File .get_category_id_by_name (category )
81- payload = {
82- "fileName" : file_name ,
83- "categoryId" : category_id ,
84- }
85- r = File .interface .send_request (
86- rtype = RequestTypes .PATCH ,
87- route = f"file/{ file_id } " ,
88- json = payload ,
75+ File .interface .send_upload_request (
76+ local_path = local_path , upload_url = r ["uploadUrl" ], mime_type = r ["mimeType" ]
8977 )
90- return File .Item (r )
9178
92- @staticmethod
93- def get (file_id : str ) -> Item :
94- r = File .interface .send_request (
95- rtype = RequestTypes .GET ,
96- route = f"file/{ file_id } " ,
97- )
98- return File .Item (r )
79+ start = time .time ()
80+
81+ file = File .get (file_id = r ["fileId" ])
82+
83+ while file .status != "uploaded" or time .time () - start >= TIMEOUT_THRESHOLD_S :
84+ print ("Response in progress please wait..." )
85+ file = File .get (file_id = r ["fileId" ])
86+
87+ if file .status != "uploaded" :
88+ raise Exception ("File upload failed" )
89+
90+ return file
9991
10092 @staticmethod
101- def delete (file_id : str , folder_id : str ) -> APIResponseItem :
102- # Needs more thought
103- r = File .interface .send_request (
93+ def delete (file_id : str , folder_id : str = "" ) -> None :
94+ if not folder_id :
95+ folder_id = Folder .get_root_folder_id ()
96+
97+ File .interface .send_request (
10498 rtype = RequestTypes .DELETE ,
10599 route = f"file/{ file_id } /{ folder_id } " ,
106100 )
107- return APIResponseItem (r )
108-
109- @staticmethod
110- def get_file_categories () -> APIResponseItem :
111- r = File .interface .send_request (
112- rtype = RequestTypes .GET ,
113- route = "file/metadata/file-categories" ,
114- )
115- return APIResponseItem (r )
116-
117- @staticmethod
118- def get_category_id_by_name (name : str ) -> Optional [UUID ]:
119- category_id = None
120- categories = [
121- {"category_id" : y ["categoryId" ], "name" : y ["name" ]}
122- for x in File .get_file_categories ().data ["fileTypes" ]
123- for y in x ["fileCategories" ]
124- ]
125- category_id = next (filter (lambda x : x ["name" ] == name , categories ), None )
126- return category_id
127101
128102
129103class Folder :
130104 FAMILY = "v3"
131105 interface = RequestInterface (family = FAMILY )
132106
133- class Item ( APIResponseItem ) :
107+ class Item :
134108 def __init__ (self , response : dict ) -> None :
135- super ().__init__ (response )
136- self .folders = Folder .List (response ["folders" ], list_type = "folders" )
137- self .files = File .List (response ["files" ], list_type = "files" )
138- self .current_path_chain = response ["currentPathChain" ]
139-
140- class List (APIResponseList ):
141- def __init__ (self , response : dict , list_type : str ) -> None :
142- super ().__init__ (response , list_type )
143-
144- def resolve_item (self , list_type : str , item : Any ) -> dict :
145- if list_type == "folders" :
146- return {"data" : item }
147- else :
148- raise Exception ()
109+ self .folder_id : str = response ["folderId" ]
110+ self .folder_name : str = response ["folderName" ]
111+ self .parent_folder_id : str = response .get ("parentFolderId" , "" )
112+ self .created_by : str = response .get ("createdBy" , "" )
113+ self .last_modified : Optional [str ] = response .get ("lastModified" , None )
114+ self .created_at : str = response .get ("createdAt" , "" )
115+
116+ class ListResponse :
117+ def __init__ (self , response : dict ) -> None :
118+ self .folders : list [Folder .Item ] = [
119+ Folder .Item (response = x ) for x in response ["folders" ]
120+ ]
121+ self .files : list [File .Item ] = [
122+ File .Item (response = x ) for x in response ["files" ]
123+ ]
124+ self .current_path_chain : dict = response ["currentPathChain" ]
149125
150126 @staticmethod
151- def get_root () -> Item :
152- r = Folder .interface .send_request (
127+ def get_root_folder_id () -> str :
128+ root_folder_id = Folder .interface .send_request (
153129 rtype = RequestTypes .GET ,
154130 route = "folder" ,
155- )
156- return Folder . Item ( r )
131+ )[ "currentPathChain" ][ 0 ][ "folderId" ]
132+ return root_folder_id
157133
158134 @staticmethod
159- def create (name : str , parent_folder_id : Optional [UUID ] = None ) -> APIResponseItem :
160- folder = {
135+ def create (name : str , parent_folder_id : Optional [UUID ] = None ) -> "Folder.Item" :
136+ payload = {
161137 "folderName" : name ,
162- "parentFolderId" : parent_folder_id ,
163138 }
139+
140+ if parent_folder_id :
141+ payload ["parentFolderId" ] = str (parent_folder_id )
142+
164143 r = Folder .interface .send_request (
165144 rtype = RequestTypes .POST ,
166145 route = "folder" ,
167- json = folder ,
146+ json = payload ,
168147 )
169- return APIResponseItem ( r )
148+ return Folder . Item ( response = r )
170149
171150 @staticmethod
172- def get (folder_id : UUID ) -> APIResponseItem :
151+ def get (folder_id : UUID ) -> "Folder.Item" :
173152 r = Folder .interface .send_request (
174153 rtype = RequestTypes .GET ,
175154 route = f"folder/{ folder_id } " ,
176155 )
177- return APIResponseItem ( r )
156+ return Folder . Item ( response = r [ "currentPathChain" ][ 0 ] )
178157
179158 @staticmethod
180- def modify (
181- folder_id : UUID ,
182- name : str ,
183- ) -> APIResponseItem :
184- folder = {
185- "folderName" : name ,
186- }
187- r = Folder .interface .send_request (
188- rtype = RequestTypes .PATCH ,
189- route = f"folder/{ folder_id } " ,
190- json = folder ,
191- )
192- return APIResponseItem (r )
193-
194- @staticmethod
195- def delete (folder_id : UUID ) -> APIResponseItem :
196- r = File .interface .send_request (
159+ def delete (folder_id : UUID ) -> None :
160+ File .interface .send_request (
197161 rtype = RequestTypes .DELETE ,
198162 route = f"folder/{ folder_id } " ,
199163 )
200- return APIResponseItem (r )
0 commit comments