Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ vk_api – Python модуль для написания скриптов для
requests_pool
tools
upload
keyboard
exceptions
jconfig

Expand Down
17 changes: 17 additions & 0 deletions examples/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
Примеры использования библиотеки vk_api
======
'python@vk.com' замените на ваш логин, а 'mypassword' на пароль

'bot_api_token' нужно заменить на токен группы
* [Отправка запросов к API (VkApi)](./simple_example.py)
* [Загрузка фото (VKUpload)](./upload_photo.py)
* [Обработка двухфакторной аутентификации](./two_factor_auth.py)
* [Обработка капчи](./captcha_handle.py)
* [Работа с пользовательским Long Poll (VkLongpoll)](./longpoll.py)
* [Работа с оберткой над execute (VkFunction)](./execute_functions.py)
* [Получение альбомов музыки (VkAudio)](./get_album_audio.py)
* [Получение аудиозаписей (VkAudio)](./get_all_audio.py)
* [Составление клавиатуры для бота группы (VkKeyboard)](./keyboard.py)
* [Получение большого кол-ва объектов (VkTools)](./get_full_wall.py)
* [Работа с VkRequestsPool](./requests_pool.py)
* [Работа с прокси и использование таймаутов](./proxies_timeout_retries.py)
2 changes: 1 addition & 1 deletion examples/execute_functions.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
""" Пример использования VkFunctions - обертки над методом execute
""" Пример использования VkFunction - обертки над методом execute

Описание VKScript (языка execute): https://vk.com/dev/execute
"""
Expand Down
2 changes: 1 addition & 1 deletion examples/requests_pool.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ def main():
""" Если запрос был завершен с ошибкой, то при обращении к результату
будет выбрасываться исключение
"""
_ = request_with_error.result
request_with_error.result
except vk_api.VkRequestsPoolException as e:
print('Error:', e)

Expand Down
6 changes: 2 additions & 4 deletions jconfig/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,8 @@


class BaseConfig(object):
r"""
Абстрактный базовый класс конфигурации

У наследуемых классов должен быть определен `__slots__`
r"""Абстрактный базовый класс конфигурации.
У наследуемых классов должен быть определен `__slots__`

:param section: имя подкатегории в конфиге
:param \**kwargs: будут переданы в :func:`load`
Expand Down
3 changes: 1 addition & 2 deletions jconfig/jconfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,7 @@


class Config(BaseConfig):
"""
Класс конфигурации в файле
""" Класс конфигурации в файле

:param filename: имя файла
"""
Expand Down
11 changes: 5 additions & 6 deletions jconfig/memory.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
# -*- coding: utf-8 -*-
"""
@author: python273
@contact: https://vk.com/python273
@license Apache License, Version 2.0, see LICENSE file
:authors: python273
:contact: https://vk.com/python273
:license: Apache License, Version 2.0, see LICENSE file

Copyright (C) 2018
:copyright: (c) 2018 python273
"""

from .base import BaseConfig


class MemoryConfig(BaseConfig):
"""
Класс конфигурации в памяти
""" Класс конфигурации в памяти

:param settings: существующий dict с конфигом
"""
Expand Down
8 changes: 4 additions & 4 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
from setuptools import setup

"""
@author: python273
@contact: https://vk.com/python273
@license Apache License, Version 2.0, see LICENSE file
:authors: python273
:contact: https://vk.com/python273
:license: Apache License, Version 2.0, see LICENSE file

Copyright (C) 2018
:copyright: (c) 2018 python273
"""


Expand Down
13 changes: 13 additions & 0 deletions tests/test_api.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import os

import vk_api

vk = vk_api.VkApi(login=os.environ['LOGIN'], password=os.environ['PASSWORD'])
vk.auth(token_only=True)
api = vk.get_api()


def test_api():
user_info = api.users.get(user_ids=1)
assert isinstance(user_info, list)
assert user_info[0]['id'] == 1
16 changes: 16 additions & 0 deletions tests/test_execute.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import os

from vk_api import VkApi
from vk_api.execute import VkFunction

vk = VkApi(login=os.environ['LOGIN'], password=os.environ['PASSWORD'])
vk.auth(token_only=True)


def test_execute():
func_add = VkFunction('return %(x)s + %(y)s;', args=('x', 'y'))
func_get = VkFunction('return API.users.get(%(values)s)[0]["id"];',
args=('values',))

assert func_add(vk, 2, 6) == 8
assert func_get(vk, {'user_ids': 'durov'}) == 1
37 changes: 37 additions & 0 deletions tests/test_keyboard.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
from vk_api import VkKeyboard
from vk_api.keyboard import KeyboardColor
from vk_api.utils import sjson_dumps

KEYBOARD_TEST = {
'one_time': False,
'buttons': [
[
{
'color': 'default',
'action': {
'type': 'text',
'payload': sjson_dumps({'test': 'some_payload'}),
'label': 'Test-1'
}
}
],
[]
]
}

EMPTY_KEYBOARD_TEST = {'one_time': False, 'buttons': []}


keyboard = VkKeyboard()


def test_keyboard():
keyboard.add_button('Test-1',
color=KeyboardColor.DEFAULT,
payload={'test': 'some_payload'})
keyboard.add_line()
assert keyboard.get_keyboard() == sjson_dumps(KEYBOARD_TEST)


def test_empty_keyboard():
assert keyboard.get_empty_keyboard() == sjson_dumps(EMPTY_KEYBOARD_TEST)
31 changes: 31 additions & 0 deletions tests/test_requests_pool.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import os

from vk_api import VkApi, VkRequestsPool, vk_request_one_param_pool

vk = VkApi(login=os.environ['LOGIN'], password=os.environ['PASSWORD'])
vk.auth(token_only=True)
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Отдельным PR можно переделать через fixtures: https://docs.pytest.org/en/latest/fixture.html#fixtures



def test_requests_pool():
with VkRequestsPool(vk) as pool:
users = pool.method('users.get', {'user_ids': 'durov'})
error_request = pool.method('invalid.method')

assert users.ok
assert isinstance(users.result, list)
assert users.result[0]['id'] == 1

assert not error_request.ok


def test_requests_pool_one_param():
users, error = vk_request_one_param_pool(vk,
'users.get',
key='user_ids',
values=['durov', 'python273'],
default_values={'fields': 'city'})
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

такое форматирование лучше поменять на

    users, error = vk_request_one_param_pool(
        vk,
        'users.get',
        ...


assert error == {}
assert isinstance(users, dict)
assert users['durov'][0]['city']['id'] == 2
assert users['python273'][0]['id'] == 183433824
8 changes: 4 additions & 4 deletions vk_api/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@
from .vk_api import VkApi

"""
@author: python273
@contact: https://vk.com/python273
@license Apache License, Version 2.0, see LICENSE file
:authors: python273
:contact: https://vk.com/python273
:license: Apache License, Version 2.0, see LICENSE file

Copyright (C) 2018
:copyright: (c) 2018 python273
"""

__author__ = 'python273'
Expand Down
3 changes: 1 addition & 2 deletions vk_api/audio.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,7 @@


class VkAudio(object):
"""
Модуль для получения аудиозаписей без использования официального API.
""" Модуль для получения аудиозаписей без использования официального API.

:param vk: Объект :class:`VkApi`
"""
Expand Down
10 changes: 5 additions & 5 deletions vk_api/enums.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
# -*- coding: utf-8 -*-
"""
@author: python273
@contact: https://vk.com/python273
@license Apache License, Version 2.0, see LICENSE file
:authors: python273
:contact: https://vk.com/python273
:license: Apache License, Version 2.0, see LICENSE file

Copyright (C) 2018
:copyright: (c) 2018 python273
"""

from enum import Enum, IntEnum
from enum import IntEnum


class VkUserPermissions(IntEnum):
Expand Down
4 changes: 4 additions & 0 deletions vk_api/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,11 @@
"""


TWOFACTOR_CODE = -2
HTTP_ERROR_CODE = -1
TOO_MANY_RPS_CODE = 6
CAPTCHA_ERROR_CODE = 14
NEED_VALIDATION_CODE = 17


class VkApiError(Exception):
Expand Down
3 changes: 1 addition & 2 deletions vk_api/execute.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,7 @@


class VkFunction(object):
"""
Обертка над методом execute.
""" Обертка над методом execute.

:param code: код функции (VKScript)
:param args: список аргументов (будут конвертированы в JSON)
Expand Down
16 changes: 13 additions & 3 deletions vk_api/keyboard.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
# -*- coding: utf-8 -*-
"""
:authors: python273, Helow19274
:contact: https://vk.com/python273
:license: Apache License, Version 2.0, see LICENSE file

:copyright: (c) 2018 python273
"""

from enum import Enum

import six
Expand Down Expand Up @@ -37,8 +46,9 @@ def get_keyboard(self):

@classmethod
def get_empty_keyboard(cls):
""" Получить json пустой клавиатуры.
Если отправить пустую клавиатуру, текущая у пользователя исчезнет.
"""
Получить json пустой клавиатуры.
Если отправить пустую клавиатуру, текущая у пользователя исчезнет.
"""
keyboard = cls()
keyboard.keyboard['buttons'] = []
Expand All @@ -48,7 +58,7 @@ def add_button(self, label, color=KeyboardColor.DEFAULT, payload=None):
""" Добавить кнопку. Максимальное количество кнопок на строке - 4

:param label: Надпись на кнопке и текст, отправляющийся при её нажатии.
:type: str
:type label: str

:param color: цвет кнопки.
:type color: KeyboardColor or str
Expand Down
10 changes: 5 additions & 5 deletions vk_api/longpoll.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
"""
@author: python273
@contact: https://vk.com/python273
@license Apache License, Version 2.0
:authors: python273
:contact: https://vk.com/python273
:license: Apache License, Version 2.0, see LICENSE file

Copyright (C) 2018
:copyright: (c) 2018 python273
"""

from collections import defaultdict
Expand Down Expand Up @@ -70,7 +70,7 @@ class VkEventType(IntEnum):
USER_OFFLINE = 9
"""
Друг $user_id стал оффлайн ($flags равен 0, если пользователь покинул сайт и 1,
если оффлайн по таймауту) . $timestamp — время последнего действия пользователя
если оффлайн по таймауту). $timestamp — время последнего действия пользователя
$user_id на сайте.
"""

Expand Down
19 changes: 10 additions & 9 deletions vk_api/requests_pool.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@


class RequestResult(object):
""" Результат запроса из пула"""
""" Результат запроса из пула """

__slots__ = ('_result', 'ready', '_error')

Expand Down Expand Up @@ -90,9 +90,8 @@ def __exit__(self, *args, **kwargs):
self.execute()

def method(self, method, values=None):
"""
Добавляет запрос в пул. Невозможно использовать вместе с :func:`method_one_param`.
Возвращаемое значение будет содержать результат после закрытия пула.
""" Добавляет запрос в пул. Невозможно использовать вместе с :func:`method_one_param`.
Возвращаемое значение будет содержать результат после закрытия пула.

:param method: метод
:type method: str
Expand Down Expand Up @@ -185,12 +184,11 @@ def vk_many_methods(vk_session, pool):

def vk_request_one_param_pool(vk_session, method, key, values,
default_values=None):
"""
Использовать, если изменяется значение только одного параметра.
Невозможно использовать вместе с :func:`method`.
Возвращаемое значение будет содержать результат после закрытия пула.
""" Использовать, если изменяется значение только одного параметра.
Невозможно использовать вместе с :func:`method`.
Возвращаемое значение будет содержать результат после закрытия пула.

:param vk_session: метод
:param vk_session: объект VkApi
:type vk_session: vk_api.VkAPi

:param method: метод
Expand All @@ -211,6 +209,9 @@ def vk_request_one_param_pool(vk_session, method, key, values,
result = {}
errors = {}

if default_values is None:
default_values = {}

for i in range(0, len(values), 25):
current_values = values[i:i + 25]

Expand Down
9 changes: 4 additions & 5 deletions vk_api/streaming.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
# -*- coding: utf-8 -*-
"""
@author: python273, hdk5
@contact: https://vk.com/python273
@license Apache License, Version 2.0
:authors: python273, hdk5
:contact: https://vk.com/python273
:license: Apache License, Version 2.0, see LICENSE file

Copyright (C) 2018
:copyright: (c) 2018 python273
"""

from .exceptions import VkApiError
from enum import Enum
import websocket
import json

Expand Down
Loading