23
23
from __future__ import annotations
24
24
25
25
import datetime
26
- from typing import Optional
26
+ from typing import List , Optional , Sequence , overload
27
27
28
28
import aiohttp
29
29
@@ -48,11 +48,52 @@ async def close(self) -> None:
48
48
"""
49
49
await self .http .close ()
50
50
51
+ @overload
51
52
async def create_paste (
52
53
self ,
53
54
* ,
54
55
filename : str ,
55
56
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 ,
56
97
password : Optional [str ] = None ,
57
98
expires : Optional [datetime .datetime ] = None ,
58
99
) -> Paste :
@@ -62,46 +103,49 @@ async def create_paste(
62
103
63
104
Parameters
64
105
-----------
65
- filename: :class:`str`
106
+ filename: Optional[ :class:`str`]
66
107
The filename to create.
67
- content: :class:`str`
108
+ content: Optional[ :class:`str`]
68
109
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.
69
114
password: Optional[:class:`str`]
70
115
The password of the paste, if any.
71
116
expires: Optional[:class:`datetime.datetime`]
72
117
When the paste expires, if any.
73
118
119
+ Raises
120
+ -------
121
+ :exc:`ValueError`
122
+ A bad combinarion of singular and plural pastes were passed.
123
+
74
124
Returns
75
125
--------
76
126
:class:`mystbin.Paste`
77
127
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``.
78
133
"""
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`" )
82
136
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 ]
87
142
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." )
89
145
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
98
147
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 )
105
149
return Paste .from_data (data )
106
150
107
151
@require_authentication
@@ -118,14 +162,14 @@ async def delete_paste(self, paste_id: str, /) -> None:
118
162
await self .http .delete_pastes (paste_ids = [paste_id ])
119
163
120
164
@require_authentication
121
- async def delete_pastes (self , paste_ids : list [str ], / ) -> None :
165
+ async def delete_pastes (self , paste_ids : List [str ], / ) -> None :
122
166
"""|coro|
123
167
124
168
Delete multiple pastes.
125
169
126
170
Parameters
127
171
-----------
128
- paste_ids: list [:class:`str`]
172
+ paste_ids: List [:class:`str`]
129
173
The pastes to delete.
130
174
"""
131
175
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
145
189
data = await self .http .get_paste (paste_id = paste_id , password = password )
146
190
return Paste .from_data (data )
147
191
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
-
195
192
@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 ]:
197
194
"""|coro|
198
195
199
196
Get all pastes belonging to the current authenticated user.
@@ -205,7 +202,7 @@ async def get_user_pastes(self, *, limit: int = 100) -> list[Paste]:
205
202
206
203
Returns
207
204
--------
208
- list [:class:`Paste`]
205
+ List [:class:`Paste`]
209
206
The pastes that were fetched.
210
207
"""
211
208
data = await self .http .get_my_pastes (limit = limit )
0 commit comments