@@ -23,7 +23,9 @@ def photo(self, photos, album_id,
2323 group_id = None ):
2424 """ Загрузка изображений в альбом пользователя
2525
26- :param photos: список путей к изображениям, либо путь к изображению
26+ :param photos: путь к изображению(ям) или file-like объект(ы)
27+ :type photos: str, list
28+
2729 :param album_id: идентификатор альбома
2830 :param latitude: географическая широта, заданная в градусах
2931 (от -90 до 90)
@@ -69,7 +71,8 @@ def photo(self, photos, album_id,
6971 def photo_messages (self , photos ):
7072 """ Загрузка изображений в сообщения
7173
72- :param photos: список путей к изображениям, либо путь к изображению
74+ :param photos: путь к изображению(ям) или file-like объект(ы)
75+ :type photos: str, list
7376 """
7477
7578 url = self .vk .method ('photos.getMessagesUploadServer' )['upload_url' ]
@@ -86,7 +89,7 @@ def photo_profile(self, photo, owner_id=None, crop_x=None, crop_y=None,
8689 crop_width = None ):
8790 """ Загрузка изображения профиля
8891
89- :param photo: путь к изображению
92+ :param photo: путь к изображению или file-like объект
9093 :param owner_id: идентификатор сообщества или текущего пользователя.
9194 По умолчанию загрузка идет в профиль текущего пользователя.
9295 При отрицательном значении загрузка идет в группу.
@@ -122,7 +125,8 @@ def photo_profile(self, photo, owner_id=None, crop_x=None, crop_y=None,
122125
123126 def photo_chat (self , photo , chat_id ):
124127 """ Загрузка и смена обложки в беседе
125- :param photo: путь к изображению
128+
129+ :param photo: путь к изображению или file-like объект
126130 :param chat_id: ID беседы
127131 """
128132
@@ -140,7 +144,9 @@ def photo_chat(self, photo, chat_id):
140144 def photo_wall (self , photos , user_id = None , group_id = None ):
141145 """ Загрузка изображений на стену пользователя или в группу
142146
143- :param photos: список путей к изображениям, либо путь к изображению
147+ :param photos: путь к изображению(ям) или file-like объект(ы)
148+ :type photos: str, list
149+
144150 :param user_id: идентификатор пользователя
145151 :param group_id: идентификатор сообщества (если загрузка идет в группу)
146152 """
@@ -165,17 +171,17 @@ def photo_wall(self, photos, user_id=None, group_id=None):
165171
166172 return response
167173
168- def audio (self , file_path , artist , title ):
174+ def audio (self , audio , artist , title ):
169175 """ Загрузка аудио
170176
171- :param file_path : путь к аудиофайлу
177+ :param audio : путь к аудиофайлу или file-like объект
172178 :param artist: исполнитель
173179 :param title: название
174180 """
175181
176182 url = self .vk .method ('audio.getUploadServer' )['upload_url' ]
177183
178- f = open_files (file_path , key_format = 'file' )
184+ f = open_files (audio , key_format = 'file' )
179185 response = self .vk .http .post (url , files = f ).json ()
180186 close_files (f )
181187
@@ -188,22 +194,28 @@ def audio(self, file_path, artist, title):
188194
189195 return response
190196
191- def document (self , file_path , title = None , tags = None , group_id = None , to_wall = False ):
197+ def document (self , doc , title = None , tags = None , group_id = None ,
198+ to_wall = False ):
192199 """ Загрузка документа
193200
194- :param file_path : путь к документу
201+ :param doc : путь к документу или file-like объект
195202 :param title: название документа
196203 :param tags: метки для поиска
197204 :param group_id: идентификатор сообщества (если загрузка идет в группу)
198- :param to_wall: Определяет метод получения адреса загрузки (если True, загрузка будет на стену)
205+ :param to_wall: загрузить на стену
199206 """
200207
201208 values = {'group_id' : group_id }
202- method = 'docs.getUploadServer' if not to_wall else 'docs.getWallUploadServer'
209+
210+ if to_wall :
211+ method = 'docs.getWallUploadServer'
212+ else :
213+ method = 'docs.getUploadServer'
214+
203215 url = self .vk .method (method , values )['upload_url' ]
204216
205- with open ( file_path , 'rb' ) as f :
206- response = self .vk .http .post (url , files = { 'file' : f } ).json ()
217+ files = open_files ( doc , 'file' )
218+ response = self .vk .http .post (url , files = files ).json ()
207219
208220 response .update ({
209221 'title' : title ,
@@ -214,24 +226,37 @@ def document(self, file_path, title=None, tags=None, group_id=None, to_wall=Fals
214226
215227 return response
216228
217- def document_wall (self , file_path , title = None , tags = None , group_id = None ):
229+ def document_wall (self , doc , title = None , tags = None , group_id = None ):
218230 """ Загрузка документа в папку Отправленные,
219231 для последующей отправки документа на стену
220232 или личным сообщением.
221233
222- Описание параметров :func:`document`
234+ :param doc: путь к документу или file-like объект
235+ :param title: название документа
236+ :param tags: метки для поиска
237+ :param group_id: идентификатор сообщества (если загрузка идет в группу)
223238 """
224239
225- return self .document (file_path , title , tags , group_id , True )
240+ return self .document (doc , title , tags , group_id , True )
241+
226242
227243def open_files (paths , key_format = 'file{}' ):
228244 if not isinstance (paths , list ):
229245 paths = [paths ]
230246
231247 files = []
232248
233- for x , filename in enumerate (paths ):
234- f = open (filename , 'rb' )
249+ for x , file in enumerate (paths ):
250+ if hasattr (file , 'read' ):
251+ f = file
252+
253+ if hasattr (file , 'name' ):
254+ filename = file .name
255+ else :
256+ filename = '.jpg'
257+ else :
258+ filename = file
259+ f = open (filename , 'rb' )
235260
236261 ext = filename .split ('.' )[- 1 ]
237262 files .append (
0 commit comments