2323from __future__ import annotations
2424
2525import datetime
26- from typing import Optional
26+ from typing import List , Optional , Sequence , overload
2727
2828import aiohttp
2929
@@ -48,11 +48,52 @@ async def close(self) -> None:
4848 """
4949 await self .http .close ()
5050
51+ @overload
5152 async def create_paste (
5253 self ,
5354 * ,
5455 filename : str ,
5556 content : str ,
57+ file : None = ...,
58+ files : None = ...,
59+ password : Optional [str ] = ...,
60+ expires : Optional [datetime .datetime ] = ...,
61+ ) -> Paste :
62+ ...
63+
64+ @overload
65+ async def create_paste (
66+ self ,
67+ * ,
68+ filename : None = ...,
69+ content : None = ...,
70+ file : File ,
71+ files : None = ...,
72+ password : Optional [str ] = ...,
73+ expires : Optional [datetime .datetime ] = ...,
74+ ) -> Paste :
75+ ...
76+
77+ @overload
78+ async def create_paste (
79+ self ,
80+ * ,
81+ filename : None = ...,
82+ content : None = ...,
83+ file : None = ...,
84+ files : Sequence [File ],
85+ password : Optional [str ] = ...,
86+ expires : Optional [datetime .datetime ] = ...,
87+ ) -> Paste :
88+ ...
89+
90+ async def create_paste (
91+ self ,
92+ * ,
93+ filename : Optional [str ] = None ,
94+ content : Optional [str ] = None ,
95+ file : Optional [File ] = None ,
96+ files : Optional [Sequence [File ]] = None ,
5697 password : Optional [str ] = None ,
5798 expires : Optional [datetime .datetime ] = None ,
5899 ) -> Paste :
@@ -62,46 +103,49 @@ async def create_paste(
62103
63104 Parameters
64105 -----------
65- filename: :class:`str`
106+ filename: Optional[ :class:`str`]
66107 The filename to create.
67- content: :class:`str`
108+ content: Optional[ :class:`str`]
68109 The content of the file you are creating.
110+ file: Optional[:class:`~mystbin.File`]
111+ The pre-created file you wish to upload.
112+ files: Optional[List[:class:`~mystbin.File`]]
113+ The pre-creates list of files you wish to upload.
69114 password: Optional[:class:`str`]
70115 The password of the paste, if any.
71116 expires: Optional[:class:`datetime.datetime`]
72117 When the paste expires, if any.
73118
119+ Raises
120+ -------
121+ :exc:`ValueError`
122+ A bad combinarion of singular and plural pastes were passed.
123+
74124 Returns
75125 --------
76126 :class:`mystbin.Paste`
77127 The paste that was created.
128+
129+
130+ ..note::
131+ Passing combinations of both singular and plural files is not supports and will raise an exception.
132+ Internally the order of precesence is ``files`` > ``file`` > ``filename and content``.
78133 """
79- file = File (filename = filename , content = content )
80- data = await self .http .create_paste (file = file , password = password , expires = expires )
81- return Paste .from_data (data )
134+ if (filename and content ) and file :
135+ raise ValueError ("Cannot provide both `file` and `filename`/`content`" )
82136
83- async def create_multifile_paste (
84- self , * , files : list [File ], password : Optional [str ] = None , expires : Optional [datetime .datetime ] = None
85- ) -> Paste :
86- """|coro|
137+ resolved_files : Sequence [File ] = []
138+ if filename and content :
139+ resolved_files = [File (filename = filename , content = content )]
140+ elif file :
141+ resolved_files = [file ]
87142
88- Create a paste with multiple files on mystb.in.
143+ if resolved_files and files :
144+ raise ValueError ("Cannot provide both singular and plural files." )
89145
90- Parameters
91- ------------
92- files: list[:class:`mystbin.File`]
93- A list of files to create on mystbin.
94- password: Optional[:class:`str`]
95- The password for this paste, if any.
96- expires: Optional[:class:`datetime.datetime`]
97- When this paste expires, if any.
146+ resolved_files = files or resolved_files
98147
99- Returns
100- --------
101- :class:`mystbin.Paste`
102- The paste that was created.
103- """
104- data = await self .http .create_paste (files = files , password = password , expires = expires )
148+ data = await self .http .create_paste (files = resolved_files , password = password , expires = expires )
105149 return Paste .from_data (data )
106150
107151 @require_authentication
@@ -118,14 +162,14 @@ async def delete_paste(self, paste_id: str, /) -> None:
118162 await self .http .delete_pastes (paste_ids = [paste_id ])
119163
120164 @require_authentication
121- async def delete_pastes (self , paste_ids : list [str ], / ) -> None :
165+ async def delete_pastes (self , paste_ids : List [str ], / ) -> None :
122166 """|coro|
123167
124168 Delete multiple pastes.
125169
126170 Parameters
127171 -----------
128- paste_ids: list [:class:`str`]
172+ paste_ids: List [:class:`str`]
129173 The pastes to delete.
130174 """
131175 await self .http .delete_pastes (paste_ids = paste_ids )
@@ -145,55 +189,8 @@ async def get_paste(self, paste_id: str, *, password: Optional[str] = None) -> P
145189 data = await self .http .get_paste (paste_id = paste_id , password = password )
146190 return Paste .from_data (data )
147191
148- # @overload
149- # async def edit_paste(self, paste_id: str, *, new_content: str, new_filename: ..., new_expires: ...) -> None:
150- # ...
151-
152- # @overload
153- # async def edit_paste(self, paste_id: str, *, new_content: ..., new_filename: str, new_expires: ...) -> None:
154- # ...
155-
156- # @overload
157- # async def edit_paste(
158- # self, paste_id: str, *, new_content: ..., new_filename: ..., new_expires: datetime.datetime
159- # ) -> None:
160- # ...
161-
162- # @overload
163- # async def edit_paste(self, paste_id: str, *, new_content: str, new_filename: str, new_expires: ...) -> None:
164- # ...
165-
166- # @overload
167- # async def edit_paste(
168- # self, paste_id: str, *, new_content: str, new_filename: ..., new_expires: datetime.datetime
169- # ) -> None:
170- # ...
171-
172- # @overload
173- # async def edit_paste(
174- # self, paste_id: str, *, new_content: ..., new_filename: str, new_expires: datetime.datetime
175- # ) -> None:
176- # ...
177-
178- # @overload
179- # async def edit_paste(
180- # self, paste_id: str, *, new_content: str, new_filename: str, new_expires: datetime.datetime
181- # ) -> None:
182- # ...
183-
184- # @require_authentication
185- # async def edit_paste(
186- # self,
187- # paste_id: str,
188- # *,
189- # new_content: Optional[str] = MISSING,
190- # new_filename: Optional[str] = MISSING,
191- # new_expires: Optional[datetime.datetime] = MISSING,
192- # ) -> None:
193- # await self.http._edit_paste(paste_id, new_content=new_content, new_filename=new_filename, new_expires=new_expires)
194-
195192 @require_authentication
196- async def get_user_pastes (self , * , limit : int = 100 ) -> list [Paste ]:
193+ async def get_user_pastes (self , * , limit : int = 100 ) -> List [Paste ]:
197194 """|coro|
198195
199196 Get all pastes belonging to the current authenticated user.
@@ -205,7 +202,7 @@ async def get_user_pastes(self, *, limit: int = 100) -> list[Paste]:
205202
206203 Returns
207204 --------
208- list [:class:`Paste`]
205+ List [:class:`Paste`]
209206 The pastes that were fetched.
210207 """
211208 data = await self .http .get_my_pastes (limit = limit )
0 commit comments