Add contextmanager to all captcha methods

This commit is contained in:
Andrei 2019-02-14 13:51:28 +03:00
parent fb9f0e27aa
commit 2c29a09c6c
9 changed files with 165 additions and 32 deletions

View File

@ -42,7 +42,14 @@ class CustomCaptchaTask:
# пайлоад для получения ответа сервиса
self.result_payload = {"clientKey": anticaptcha_key}
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
if exc_type:
return False
return True
# Работа с капчёй
def captcha_handler(self, imageUrl: str):
@ -109,6 +116,14 @@ class aioCustomCaptchaTask:
# пайлоад для получения ответа сервиса
self.result_payload = {"clientKey": anticaptcha_key}
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
if exc_type:
return False
return True
# Работа с капчёй
async def captcha_handler(self, imageUrl: str):

View File

@ -40,6 +40,14 @@ class FunCaptchaTask:
if kwargs:
for key in kwargs:
self.task_payload['task'].update({key: kwargs[key]})
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
if exc_type:
return False
return True
# Работа с капчёй
def captcha_handler(self, websiteURL: str, websitePublicKey: str, **kwargs):
@ -105,6 +113,14 @@ class aioFunCaptchaTask:
if kwargs:
for key in kwargs:
self.task_payload['task'].update({key: kwargs[key]})
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
if exc_type:
return False
return True
# Работа с капчёй
async def captcha_handler(self, websiteURL: str, websitePublicKey: str):

View File

@ -35,6 +35,14 @@ class FunCaptchaTaskProxyless:
# пайлоад для получения ответа сервиса
self.result_payload = {"clientKey": anticaptcha_key}
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
if exc_type:
return False
return True
# Работа с капчёй
def captcha_handler(self, websiteURL: str, websitePublicKey: str, **kwargs):
"""

View File

@ -45,6 +45,13 @@ class GeeTestTask:
# пайлоад для получения ответа сервиса
self.result_payload = {"clientKey": anticaptcha_key}
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
if exc_type:
return False
return True
# Работа с капчёй
def captcha_handler(self, challenge: str):
@ -113,6 +120,14 @@ class aioGeeTestTask:
# пайлоад для получения ответа сервиса
self.result_payload = {"clientKey": anticaptcha_key}
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
if exc_type:
return False
return True
# Работа с капчёй
async def captcha_handler(self, challenge: str):

View File

@ -38,6 +38,13 @@ class GeeTestTaskProxyless:
# пайлоад для получения ответа сервиса
self.result_payload = {"clientKey": anticaptcha_key}
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
if exc_type:
return False
return True
# Работа с капчёй
def captcha_handler(self, challenge: str):
@ -99,6 +106,14 @@ class aioGeeTestTaskProxyless:
# пайлоад для получения ответа сервиса
self.result_payload = {"clientKey": anticaptcha_key}
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
if exc_type:
return False
return True
# Работа с капчёй
async def captcha_handler(self, challenge: str):

View File

@ -62,8 +62,16 @@ class ImageToTextTask:
if kwargs:
for key in kwargs:
self.task_payload['task'].update({key: kwargs[key]})
def __enter__(self):
return self
def image_temp_saver(self, content: bytes):
def __exit__(self, exc_type, exc_value, traceback):
if exc_type:
return False
return True
def __image_temp_saver(self, content: bytes):
'''
Метод сохраняет файл изображения как временный и отправляет его сразу на сервер для расшифровки.
:return: Возвращает ID капчи
@ -75,7 +83,7 @@ class ImageToTextTask:
captcha_id = requests.post(create_task_url, json = self.task_payload).json()
return captcha_id
def image_const_saver(self, content: bytes):
def __image_const_saver(self, content: bytes):
'''
Метод создаёт папку и сохраняет в неё изображение, затем передаёт его на расшифровку и удалет файл.
:return: Возвращает ID капчи
@ -103,7 +111,7 @@ class ImageToTextTask:
return captcha_id
def read_captcha_image_file(self, content: bytes, content_type: str = "file"):
def __read_captcha_image_file(self, content: bytes, content_type: str = "file"):
"""
Функция отвечает за чтение уже сохранённого файла или файла в уодировке base64
:param content: Параметр строка-путь указывающий на изображение капчи для отправки её на сервер
@ -141,16 +149,16 @@ class ImageToTextTask:
:return: Возвращает весь ответ сервера JSON-строкой.
'''
if captcha_file:
captcha_id = self.read_captcha_image_file(captcha_file, content_type="file")
captcha_id = self.__read_captcha_image_file(captcha_file, content_type="file")
elif captcha_base64:
captcha_id = self.read_captcha_image_file(captcha_base64, content_type="base64")
captcha_id = self.__read_captcha_image_file(captcha_base64, content_type="base64")
elif captcha_link:
content = requests.get(captcha_link, **kwargs).content
# согласно значения переданного параметра выбираем функцию для сохранения изображения
if self.save_format == 'const':
captcha_id = self.image_const_saver(content)
captcha_id = self.__image_const_saver(content)
elif self.save_format == 'temp':
captcha_id = self.image_temp_saver(content)
captcha_id = self.__image_temp_saver(content)
else:
raise ParamError(additional_info="""Wrong 'save_format' parameter. Valid formats: 'const' or 'temp'.\n
Неправильный 'save_format' параметр. Возможные форматы: 'const' или 'temp'.""")
@ -224,8 +232,16 @@ class aioImageToTextTask:
if kwargs:
for key in kwargs:
self.task_payload['task'].update({key: kwargs[key]})
async def image_temp_saver(self, captcha_link: str):
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
if exc_type:
return False
return True
async def __image_temp_saver(self, captcha_link: str):
'''
Метод сохраняет файл изображения как временный и отправляет его сразу на сервер для расшифровки.
:return: Возвращает ID капчи
@ -242,7 +258,7 @@ class aioImageToTextTask:
async with session.post(create_task_url, json=self.task_payload) as resp:
return await resp.json()
async def image_const_saver(self, captcha_link: str):
async def __image_const_saver(self, captcha_link: str):
'''
Метод создаёт папку и сохраняет в неё изображение, затем передаёт его на расшифровку и удалет файл.
:return: Возвращает ID капчи
@ -277,7 +293,7 @@ class aioImageToTextTask:
os.remove(os.path.join(img_path, "im-{0}.png".format(image_hash)))
return captcha_id
async def read_captcha_image_file(self, content: bytes, content_type: str = 'file'):
async def __read_captcha_image_file(self, content: bytes, content_type: str = 'file'):
"""
Функция отвечает за чтение уже сохранённого файла или файла в уодировке base64
:param content: Параметр строка-путь указывающий на изображение капчи для отправки её на сервер
@ -314,15 +330,15 @@ class aioImageToTextTask:
'''
# если был передан линк на локальный скачаный файл
if captcha_file:
captcha_id = await self.read_captcha_image_file(captcha_file, content_type="file")
captcha_id = await self.__read_captcha_image_file(captcha_file, content_type="file")
elif captcha_base64:
captcha_id = await self.read_captcha_image_file(captcha_base64, content_type="base64")
captcha_id = await self.__read_captcha_image_file(captcha_base64, content_type="base64")
elif captcha_link:
# согласно значения переданного параметра выбираем функцию для сохранения изображения
if self.save_format == 'const':
captcha_id = await self.image_const_saver(captcha_link)
captcha_id = await self.__image_const_saver(captcha_link)
elif self.save_format == 'temp':
captcha_id = await self.image_temp_saver(captcha_link)
captcha_id = await self.__image_temp_saver(captcha_link)
else:
raise ParamError(additional_info="""Wrong 'save_format' parameter. Valid formats: 'const' or 'temp'.\n
Неправильный 'save_format' параметр. Возможные форматы: 'const' или 'temp'.""")

View File

@ -43,6 +43,14 @@ class NoCaptchaTask:
for key in kwargs:
self.task_payload['task'].update({key: kwargs[key]})
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
if exc_type:
return False
return True
# Работа с капчей
def captcha_handler(self, websiteURL: str, websiteKey: str):
"""
@ -106,6 +114,14 @@ class aioNoCaptchaTask:
if kwargs:
for key in kwargs:
self.task_payload['task'].update({key: kwargs[key]})
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
if exc_type:
return False
return True
# Работа с капчей
async def captcha_handler(self, websiteURL: str, websiteKey: str):

View File

@ -41,6 +41,14 @@ class NoCaptchaTaskProxyless:
for key in kwargs:
self.task_payload['task'].update({key: kwargs[key]})
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
if exc_type:
return False
return True
# Работа с капчёй
def captcha_handler(self, websiteURL, websiteKey, **kwargs):
"""
@ -108,6 +116,14 @@ class aioNoCaptchaTaskProxyless:
for key in kwargs:
self.task_payload['task'].update({key: kwargs[key]})
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
if exc_type:
return False
return True
# Работа с капчёй
async def captcha_handler(self, websiteURL, websiteKey):
"""

View File

@ -54,9 +54,16 @@ class SquareNetTextTask:
# отправляем запрос на результат решения капчи, если ещё капча не решена - ожидаем 5 сек
# если всё ок - идём дальше
self.result_payload = {"clientKey": anticaptcha_key}
def image_temp_saver(self, content: bytes):
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
if exc_type:
return False
return True
def __image_temp_saver(self, content: bytes):
'''
Метод сохраняет файл изображения как временный и отправляет его сразу на сервер для расшифровки.
:return: Возвращает ID капчи
@ -68,7 +75,7 @@ class SquareNetTextTask:
captcha_id = requests.post(create_task_url, json = self.task_payload).json()
return captcha_id
def image_const_saver(self, content: bytes):
def __image_const_saver(self, content: bytes):
'''
Метод создаёт папку и сохраняет в неё изображение, затем передаёт его на расшифровку и удалет файл.
:return: Возвращает ID капчи
@ -96,7 +103,7 @@ class SquareNetTextTask:
return captcha_id
def read_captcha_image_file(self, content: bytes, content_type: str = "file"):
def __read_captcha_image_file(self, content: bytes, content_type: str = "file"):
"""
Функция отвечает за чтение уже сохранённого файла или файла в уодировке base64
:param content: Параметр строка-путь указывающий на изображение капчи для отправки её на сервер
@ -134,6 +141,7 @@ class SquareNetTextTask:
:param image_link: Ссылка на изображение
:param image_file: Необязательный параметр, служит для открытия уже скачанных файлов изображений.
:param image_base64: Загрузка изображения в кодировке base64
:return: Возвращает весь ответ сервера JSON-строкой.
'''
# проверка параметров сетки
@ -148,20 +156,20 @@ class SquareNetTextTask:
# проводим действия над файлом(декодируем и передаём на сервер)
if image_file:
captcha_id = self.read_captcha_image_file(image_file, content_type="file")
captcha_id = self.__read_captcha_image_file(image_file, content_type="file")
# проводим действия над файлом уже закодированном в base64(передаём на сервер)
elif image_base64:
captcha_id = self.read_captcha_image_file(image_base64, content_type="base64")
captcha_id = self.__read_captcha_image_file(image_base64, content_type="base64")
# проводим действия над ссылкой на файл(скачиваем, сохраняем и передаём на сервер)
elif image_link:
content = requests.get(image_link).content
# согласно значения переданного параметра выбираем функцию для сохранения изображения
if self.save_format == 'const':
captcha_id = self.image_const_saver(content)
captcha_id = self.__image_const_saver(content)
elif self.save_format == 'temp':
captcha_id = self.image_temp_saver(content)
captcha_id = self.__image_temp_saver(content)
else:
raise ParamError(additional_info="""Wrong 'save_format' parameter. Valid formats: 'const' or 'temp'.\n
Неправильный 'save_format' параметр. Возможные форматы: 'const' или 'temp'.""")
@ -226,8 +234,16 @@ class aioSquareNetTextTask:
# отправляем запрос на результат решения капчи, если ещё капча не решена - ожидаем 5 сек
# если всё ок - идём дальше
self.result_payload = {"clientKey": anticaptcha_key}
async def image_temp_saver(self, captcha_link: str):
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
if exc_type:
return False
return True
async def __image_temp_saver(self, captcha_link: str):
'''
Метод сохраняет файл изображения как временный и отправляет его сразу на сервер для расшифровки.
:return: Возвращает ID капчи
@ -244,7 +260,7 @@ class aioSquareNetTextTask:
async with session.post(create_task_url, json=self.task_payload) as resp:
return await resp.json()
async def image_const_saver(self, captcha_link: str):
async def __image_const_saver(self, captcha_link: str):
'''
Метод создаёт папку и сохраняет в неё изображение, затем передаёт его на расшифровку и удалет файл.
:return: Возвращает ID капчи
@ -279,7 +295,7 @@ class aioSquareNetTextTask:
os.remove(os.path.join(img_path, "im-{0}.png".format(image_hash)))
return captcha_id
async def read_captcha_image_file(self, content: bytes, content_type: str = 'file'):
async def __read_captcha_image_file(self, content: bytes, content_type: str = 'file'):
"""
Функция отвечает за чтение уже сохранённого файла или файла в уодировке base64
:param content: Параметр строка-путь указывающий на изображение капчи для отправки её на сервер
@ -330,15 +346,15 @@ class aioSquareNetTextTask:
self.task_payload['task'].update({"columnsCount": columnsCount})
# если был передан линк на локальный скачаный файл
if image_file:
captcha_id = await self.read_captcha_image_file(image_file, content_type="file")
captcha_id = await self.__read_captcha_image_file(image_file, content_type="file")
elif image_base64:
captcha_id = await self.read_captcha_image_file(image_base64, content_type="base64")
captcha_id = await self.__read_captcha_image_file(image_base64, content_type="base64")
elif image_link:
# согласно значения переданного параметра выбираем функцию для сохранения изображения
if self.save_format == 'const':
captcha_id = await self.image_const_saver(image_link)
captcha_id = await self.__image_const_saver(image_link)
elif self.save_format == 'temp':
captcha_id = await self.image_temp_saver(image_link)
captcha_id = await self.__image_temp_saver(image_link)
else:
raise ParamError(additional_info="""Wrong 'save_format' parameter. Valid formats: 'const' or 'temp'.\n
Неправильный 'save_format' параметр. Возможные форматы: 'const' или 'temp'.""")