Skip to content

Commit 442281c

Browse files
ALEXREDXpython273
authored andcommitted
add. pass VkApi/VkApiMethod (VkUpload) (#215)
1 parent 2990bb7 commit 442281c

File tree

1 file changed

+54
-41
lines changed

1 file changed

+54
-41
lines changed

vk_api/upload.py

Lines changed: 54 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
:copyright: (c) 2018 python273
77
"""
88

9+
from .vk_api import VkApi, VkApiMethod
10+
11+
912
STORY_ALLOWED_LINK_TEXTS = {
1013
'to_store', 'vote', 'more', 'book', 'order',
1114
'enroll', 'fill', 'signup', 'buy', 'ticket',
@@ -17,13 +20,26 @@
1720
class 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

462475
class FilesOpener(object):

0 commit comments

Comments
 (0)