mirror of https://github.com/morpheus65535/bazarr
129 lines
3.9 KiB
Python
129 lines
3.9 KiB
Python
![]() |
import base64
|
||
|
from .fields import BaseField
|
||
|
|
||
|
|
||
|
class BaseTask(object):
|
||
|
def serialize(self, **result):
|
||
|
return result
|
||
|
|
||
|
|
||
|
class ProxyMixin(BaseTask):
|
||
|
def __init__(self, *args, **kwargs):
|
||
|
self.proxy = kwargs.pop('proxy')
|
||
|
self.userAgent = kwargs.pop('user_agent')
|
||
|
self.cookies = kwargs.pop('cookies', '')
|
||
|
super(ProxyMixin, self).__init__(*args, **kwargs)
|
||
|
|
||
|
def serialize(self, **result):
|
||
|
result = super(ProxyMixin, self).serialize(**result)
|
||
|
result.update(self.proxy.serialize())
|
||
|
result['userAgent'] = self.userAgent
|
||
|
if self.cookies:
|
||
|
result['cookies'] = self.cookies
|
||
|
return result
|
||
|
|
||
|
|
||
|
class NoCaptchaTaskProxylessTask(BaseTask):
|
||
|
type = "NoCaptchaTaskProxyless"
|
||
|
websiteURL = None
|
||
|
websiteKey = None
|
||
|
websiteSToken = None
|
||
|
|
||
|
def __init__(self, website_url, website_key, website_s_token=None, is_invisible=None):
|
||
|
self.websiteURL = website_url
|
||
|
self.websiteKey = website_key
|
||
|
self.websiteSToken = website_s_token
|
||
|
self.isInvisible = is_invisible
|
||
|
|
||
|
def serialize(self):
|
||
|
data = {'type': self.type,
|
||
|
'websiteURL': self.websiteURL,
|
||
|
'websiteKey': self.websiteKey}
|
||
|
if self.websiteSToken is not None:
|
||
|
data['websiteSToken'] = self.websiteSToken
|
||
|
if self.isInvisible is not None:
|
||
|
data['isInvisible'] = self.isInvisible
|
||
|
return data
|
||
|
|
||
|
|
||
|
class FunCaptchaTask(ProxyMixin):
|
||
|
type = "FunCaptchaTask"
|
||
|
websiteURL = None
|
||
|
websiteKey = None
|
||
|
|
||
|
def __init__(self, website_url, website_key, *args, **kwargs):
|
||
|
self.websiteURL = website_url
|
||
|
self.websiteKey = website_key
|
||
|
super(FunCaptchaTask, self).__init__(*args, **kwargs)
|
||
|
|
||
|
def serialize(self, **result):
|
||
|
result = super(FunCaptchaTask, self).serialize(**result)
|
||
|
result.update({'type': self.type,
|
||
|
'websiteURL': self.websiteURL,
|
||
|
'websitePublicKey': self.websiteKey})
|
||
|
return result
|
||
|
|
||
|
|
||
|
class NoCaptchaTask(ProxyMixin, NoCaptchaTaskProxylessTask):
|
||
|
type = "NoCaptchaTask"
|
||
|
|
||
|
|
||
|
class ImageToTextTask(object):
|
||
|
type = "ImageToTextTask"
|
||
|
fp = None
|
||
|
phrase = None
|
||
|
case = None
|
||
|
numeric = None
|
||
|
math = None
|
||
|
minLength = None
|
||
|
maxLength = None
|
||
|
|
||
|
def __init__(self, fp, phrase=None, case=None, numeric=None, math=None, min_length=None, max_length=None):
|
||
|
self.fp = fp
|
||
|
self.phrase = phrase
|
||
|
self.case = case
|
||
|
self.numeric = numeric
|
||
|
self.math = math
|
||
|
self.minLength = min_length
|
||
|
self.maxLength = max_length
|
||
|
|
||
|
def serialize(self):
|
||
|
return {'type': self.type,
|
||
|
'body': base64.b64encode(self.fp.read()).decode('utf-8'),
|
||
|
'phrase': self.phrase,
|
||
|
'case': self.case,
|
||
|
'numeric': self.numeric,
|
||
|
'math': self.math,
|
||
|
'minLength': self.minLength,
|
||
|
'maxLength': self.maxLength}
|
||
|
|
||
|
|
||
|
class CustomCaptchaTask(BaseTask):
|
||
|
type = 'CustomCaptchaTask'
|
||
|
imageUrl = None
|
||
|
assignment = None
|
||
|
form = None
|
||
|
|
||
|
def __init__(self, imageUrl, form=None, assignment=None):
|
||
|
self.imageUrl = imageUrl
|
||
|
self.form = form or {}
|
||
|
self.assignment = assignment
|
||
|
|
||
|
def serialize(self):
|
||
|
data = super(CustomCaptchaTask, self).serialize()
|
||
|
data.update({'type': self.type,
|
||
|
'imageUrl': self.imageUrl})
|
||
|
if self.form:
|
||
|
forms = []
|
||
|
for name, field in self.form.items():
|
||
|
if isinstance(field, BaseField):
|
||
|
forms.append(field.serialize(name))
|
||
|
else:
|
||
|
field = field.copy()
|
||
|
field['name'] = name
|
||
|
forms.append(field)
|
||
|
data['forms'] = forms
|
||
|
if self.assignment:
|
||
|
data['assignment'] = self.assignment
|
||
|
return data
|