66:copyright: (c) 2018 python273
77"""
88
9+ from .vk_api import VkApi , VkApiMethod
10+
11+
912STORY_ALLOWED_LINK_TEXTS = {
1013 'to_store' , 'vote' , 'more' , 'book' , 'order' ,
1114 'enroll' , 'fill' , 'signup' , 'buy' , 'ticket' ,
1720class VkUpload (object ):
1821 """ Загрузка файлов через API (https://vk.com/dev/upload_files)
1922
20- :param vk: объект :class:`VkApi`
23+ :param vk: объект :class:`VkApi` или :class:`VkApiMethod`
2124 """
2225
2326 __slots__ = ('vk' ,)
2427
2528 def __init__ (self , vk ):
26- self .vk = vk
29+
30+ if not isinstance (vk , (VkApi , VkApiMethod )):
31+ raise TypeError (
32+ 'The arg should be VkApi or VkApiMethod instance'
33+ )
34+
35+ if isinstance (vk , VkApiMethod ):
36+ self .vk = vk
37+ else :
38+ self .vk = vk .get_api ()
39+
40+ @property
41+ def http (self ):
42+ return self .vk ._vk .http
2743
2844 def photo (self , photos , album_id ,
2945 latitude = None , longitude = None , caption = None , description = None ,
@@ -48,10 +64,10 @@ def photo(self, photos, album_id,
4864 if group_id :
4965 values ['group_id' ] = group_id
5066
51- url = self .vk .method ( ' photos.getUploadServer' , values )['upload_url' ]
67+ url = self .vk .photos .getUploadServer ( ** values )['upload_url' ]
5268
5369 with FilesOpener (photos ) as photo_files :
54- response = self .vk . http .post (url , files = photo_files ).json ()
70+ response = self .http .post (url , files = photo_files ).json ()
5571
5672 if 'album_id' not in response :
5773 response ['album_id' ] = response ['aid' ]
@@ -65,7 +81,7 @@ def photo(self, photos, album_id,
6581
6682 values .update (response )
6783
68- return self .vk .method ( ' photos.save' , values )
84+ return self .vk .photos .save ( ** values )
6985
7086 def photo_messages (self , photos ):
7187 """ Загрузка изображений в сообщения
@@ -74,12 +90,12 @@ def photo_messages(self, photos):
7490 :type photos: str or list
7591 """
7692
77- url = self .vk .method ( ' photos.getMessagesUploadServer' )['upload_url' ]
93+ url = self .vk .photos .getMessagesUploadServer ( )['upload_url' ]
7894
7995 with FilesOpener (photos ) as photo_files :
80- response = self .vk . http .post (url , files = photo_files )
96+ response = self .http .post (url , files = photo_files )
8197
82- return self .vk .method ( ' photos.saveMessagesPhoto' , response .json ())
98+ return self .vk .photos .saveMessagesPhoto ( ** response .json ())
8399
84100 def photo_profile (self , photo , owner_id = None , crop_x = None , crop_y = None ,
85101 crop_width = None ):
@@ -108,17 +124,17 @@ def photo_profile(self, photo, owner_id=None, crop_x=None, crop_y=None,
108124 crop_x , crop_y , crop_width
109125 )
110126
111- response = self .vk .method ( ' photos.getOwnerPhotoUploadServer' , values )
127+ response = self .vk .photos .getOwnerPhotoUploadServer ( ** values )
112128 url = response ['upload_url' ]
113129
114130 with FilesOpener (photo , key_format = 'file' ) as photo_files :
115- response = self .vk . http .post (
131+ response = self .http .post (
116132 url ,
117133 data = crop_params ,
118134 files = photo_files
119135 )
120136
121- return self .vk .method ( ' photos.saveOwnerPhoto' , response .json ())
137+ return self .vk .photos .saveOwnerPhoto ( ** response .json ())
122138
123139 def photo_chat (self , photo , chat_id ):
124140 """ Загрузка и смена обложки в беседе
@@ -128,14 +144,14 @@ def photo_chat(self, photo, chat_id):
128144 """
129145
130146 values = {'chat_id' : chat_id }
131- url = self .vk .method ( ' photos.getChatUploadServer' , values )['upload_url' ]
147+ url = self .vk .photos .getChatUploadServer ( ** values )['upload_url' ]
132148
133149 with FilesOpener (photo , key_format = 'file' ) as photo_file :
134- response = self .vk . http .post (url , files = photo_file )
150+ response = self .http .post (url , files = photo_file )
135151
136- return self .vk .method ( ' messages.setChatPhoto' , {
137- ' file' : response .json ()['response' ]
138- } )
152+ return self .vk .messages .setChatPhoto (
153+ file = response .json ()['response' ]
154+ )
139155
140156 def photo_wall (self , photos , user_id = None , group_id = None ):
141157 """ Загрузка изображений на стену пользователя или в группу
@@ -154,15 +170,15 @@ def photo_wall(self, photos, user_id=None, group_id=None):
154170 elif group_id :
155171 values ['group_id' ] = group_id
156172
157- response = self .vk .method ( ' photos.getWallUploadServer' , values )
173+ response = self .vk .photos .getWallUploadServer ( ** values )
158174 url = response ['upload_url' ]
159175
160176 with FilesOpener (photos ) as photos_files :
161- response = self .vk . http .post (url , files = photos_files )
177+ response = self .http .post (url , files = photos_files )
162178
163179 values .update (response .json ())
164180
165- return self .vk .method ( ' photos.saveWallPhoto' , values )
181+ return self .vk .photos .saveWallPhoto ( ** values )
166182
167183 def audio (self , audio , artist , title ):
168184 """ Загрузка аудио
@@ -172,17 +188,17 @@ def audio(self, audio, artist, title):
172188 :param title: название
173189 """
174190
175- url = self .vk .method ( ' audio.getUploadServer' )['upload_url' ]
191+ url = self .vk .audio .getUploadServer ( )['upload_url' ]
176192
177193 with FilesOpener (audio , key_format = 'file' ) as f :
178- response = self .vk . http .post (url , files = f ).json ()
194+ response = self .http .post (url , files = f ).json ()
179195
180196 response .update ({
181197 'artist' : artist ,
182198 'title' : title
183199 })
184200
185- return self .vk .method ( ' audio.save' , response )
201+ return self .vk .audio .save ( ** response )
186202
187203 def video (self , video_file = None , link = None , name = None , description = None ,
188204 is_private = None , wallpost = None , group_id = None ,
@@ -257,11 +273,11 @@ def video(self, video_file=None, link=None, name=None, description=None,
257273 'repeat' : repeat
258274 }
259275
260- response = self .vk .method ( ' video.save' , values )
276+ response = self .vk .video .save ( ** values )
261277 url = response ['upload_url' ]
262278
263279 with FilesOpener (video_file or [], 'video_file' ) as f :
264- return self .vk . http .post (
280+ return self .http .post (
265281 url ,
266282 files = f or None
267283 ).json ()
@@ -283,23 +299,23 @@ def document(self, doc, title=None, tags=None, group_id=None,
283299 }
284300
285301 if to_wall :
286- method = ' docs.getWallUploadServer'
302+ method = self . vk . docs .getWallUploadServer
287303 elif message_peer_id :
288- method = ' docs.getMessagesUploadServer'
304+ method = self . vk . docs .getMessagesUploadServer
289305 else :
290- method = ' docs.getUploadServer'
306+ method = self . vk . docs .getUploadServer
291307
292- url = self . vk . method (method , values )['upload_url' ]
308+ url = method (** values )['upload_url' ]
293309
294310 with FilesOpener (doc , 'file' ) as files :
295- response = self .vk . http .post (url , files = files ).json ()
311+ response = self .http .post (url , files = files ).json ()
296312
297313 response .update ({
298314 'title' : title ,
299315 'tags' : tags
300316 })
301317
302- return self .vk .method ( ' docs.save' , response )
318+ return self .vk .docs .save ( ** response )
303319
304320 def document_wall (self , doc , title = None , tags = None , group_id = None ):
305321 """ Загрузка документа в папку Отправленные,
@@ -380,16 +396,13 @@ def photo_cover(self, photo, group_id,
380396 'crop_y2' : crop_y2
381397 }
382398
383- url = self .vk .method (
384- 'photos.getOwnerCoverPhotoUploadServer' , values
385- )['upload_url' ]
399+ url = self .vk .photos .getOwnerCoverPhotoUploadServer (** values )['upload_url' ]
386400
387401 with FilesOpener (photo , key_format = 'file' ) as photo_files :
388- response = self .vk . http .post (url , files = photo_files )
402+ response = self .http .post (url , files = photo_files )
389403
390- return self .vk .method (
391- 'photos.saveOwnerCoverPhoto' ,
392- response .json ()
404+ return self .vk .photos .saveOwnerCoverPhoto (
405+ ** response .json ()
393406 )
394407
395408 def story (self , file , file_type , add_to_news = True , user_ids = None ,
@@ -414,9 +427,9 @@ def story(self, file, file_type, add_to_news=True, user_ids=None,
414427 user_ids = []
415428
416429 if file_type == 'photo' :
417- method = ' stories.getPhotoUploadServer'
430+ method = self . vk . stories .getPhotoUploadServer
418431 elif file_type == 'video' :
419- method = ' stories.getVideoUploadServer'
432+ method = self . vk . stories .getVideoUploadServer
420433 else :
421434 raise ValueError ('type should be either photo or video' )
422435
@@ -453,10 +466,10 @@ def story(self, file, file_type, add_to_news=True, user_ids=None,
453466 'group_id' : group_id
454467 }
455468
456- url = self . vk . method (method , values )['upload_url' ]
469+ url = method (** values )['upload_url' ]
457470
458471 with FilesOpener (file , key_format = 'file' ) as files :
459- return self .vk . http .post (url , files = files )
472+ return self .http .post (url , files = files )
460473
461474
462475class FilesOpener (object ):
0 commit comments