1- from mpt_api_client .constants import APPLICATION_JSON
21from mpt_api_client .http .mixins import (
32 AsyncDownloadFileMixin ,
43 DownloadFileMixin ,
5- _json_to_file_payload ,
64)
75from mpt_api_client .http .types import FileTypes
86from mpt_api_client .models import ResourceData
@@ -83,14 +81,14 @@ async def unpublish(self, resource_id: str, resource_data: ResourceData | None =
8381 )
8482
8583
86- class AsyncDocumentMixin [Model ](
87- AsyncDownloadFileMixin [ Model ],
88- AsyncPublishableMixin [ Model ],
89- ):
90- """Async document mixin."" "
84+ class AsyncCreateFileMixin [Model ]:
85+ """Create file mixin."""
86+
87+ _upload_file_key = "file"
88+ _upload_data_key = "document "
9189
9290 async def create (self , resource_data : ResourceData , file : FileTypes | None = None ) -> Model :
93- """Creates document resource .
91+ """Create document.
9492
9593 Creates a document resource by specifying a `file` or an `url`.
9694
@@ -100,27 +98,34 @@ async def create(self, resource_data: ResourceData, file: FileTypes | None = Non
10098
10199 Returns:
102100 Created resource.
103-
104101 """
105102 files = {}
106-
107- if resource_data :
108- files ["document" ] = (
109- None ,
110- _json_to_file_payload (resource_data ),
111- APPLICATION_JSON ,
112- )
113103 if file :
114- files ["file" ] = file # type: ignore[assignment]
115- response = await self .http_client .request ("post" , self .path , files = files ) # type: ignore[attr-defined]
104+ files [self ._upload_file_key ] = file
105+ response = await self .http_client .request ( # type: ignore[attr-defined]
106+ "post" ,
107+ self .path , # type: ignore[attr-defined]
108+ json = resource_data ,
109+ files = files ,
110+ json_file_key = self ._upload_data_key ,
111+ force_multipart = True ,
112+ )
116113 return self ._model_class .from_response (response ) # type: ignore[attr-defined, no-any-return]
117114
118115
119- class DocumentMixin [Model ](
120- DownloadFileMixin [Model ],
121- PublishableMixin [Model ],
116+ class AsyncDocumentMixin [Model ](
117+ AsyncCreateFileMixin [Model ],
118+ AsyncDownloadFileMixin [Model ],
119+ AsyncPublishableMixin [Model ],
122120):
123- """Document mixin."""
121+ """Async document mixin."""
122+
123+
124+ class CreateFileMixin [Model ]:
125+ """Create file mixin."""
126+
127+ _upload_file_key = "file"
128+ _upload_data_key = "document"
124129
125130 def create (self , resource_data : ResourceData , file : FileTypes | None = None ) -> Model :
126131 """Create document.
@@ -135,19 +140,41 @@ def create(self, resource_data: ResourceData, file: FileTypes | None = None) ->
135140 Created resource.
136141 """
137142 files = {}
138-
139- if resource_data :
140- files ["document" ] = (
141- None ,
142- _json_to_file_payload (resource_data ),
143- APPLICATION_JSON ,
144- )
145143 if file :
146- files ["file" ] = file # type: ignore[assignment]
147- response = self .http_client .request ("post" , self .path , files = files ) # type: ignore[attr-defined]
144+ files [self ._upload_file_key ] = file
145+ response = self .http_client .request ( # type: ignore[attr-defined]
146+ "post" ,
147+ self .path , # type: ignore[attr-defined]
148+ json = resource_data ,
149+ files = files ,
150+ json_file_key = self ._upload_data_key ,
151+ force_multipart = True ,
152+ )
148153 return self ._model_class .from_response (response ) # type: ignore[attr-defined, no-any-return]
149154
150155
156+ class DocumentMixin [Model ](
157+ CreateFileMixin [Model ],
158+ DownloadFileMixin [Model ],
159+ PublishableMixin [Model ],
160+ ):
161+ """Document mixin."""
162+
163+ _upload_file_key = "file"
164+ _upload_data_key = "document"
165+
166+
167+ class MediaMixin [Model ](
168+ CreateFileMixin [Model ],
169+ DownloadFileMixin [Model ],
170+ PublishableMixin [Model ],
171+ ):
172+ """Document mixin."""
173+
174+ _upload_file_key = "file"
175+ _upload_data_key = "media"
176+
177+
151178class ActivatableMixin [Model ]:
152179 """Activatable mixin adds the ability to activate and deactivate."""
153180
0 commit comments