You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
bazarr/libs/python_anticaptcha/fields.py

200 lines
5.3 KiB

import six
from python_anticaptcha.exceptions import InvalidWidthException, MissingNameException
class BaseField(object):
label = None
labelHint = None
def serialize(self, name=None):
data = {}
if self.label:
data["label"] = self.label or False
if self.labelHint:
data["labelHint"] = self.labelHint or False
return data
class NameBaseField(BaseField):
name = None
def serialize(self, name=None):
data = super(NameBaseField, self).serialize(name)
if name:
data["name"] = name
elif self.name:
data["name"] = self.name
else:
raise MissingNameException(cls=self.__class__)
return data
class SimpleText(BaseField):
contentType = "text"
def __init__(self, content, label=None, labelHint=None, width=None):
self.label = label
self.labelHint = labelHint
self.content = content
self.width = width
def serialize(self, name=None):
data = super(SimpleText, self).serialize(name)
data["contentType"] = self.contentType
data["content"] = self.content
if self.width:
if self.width not in [100, 50, 33, 25]:
raise InvalidWidthException(self.width)
data["inputOptions"] = {}
data["width"] = self.width
return data
class Image(BaseField):
contentType = "image"
def __init__(self, imageUrl, label=None, labelHint=None):
self.label = label
self.labelHint = labelHint
self.imageUrl = imageUrl
def serialize(self, name=None):
data = super(Image, self).serialize(name)
data["contentType"] = self.contentType
data["content"] = self.imageUrl
return data
class WebLink(BaseField):
contentType = "link"
def __init__(self, linkText, linkUrl, label=None, labelHint=None, width=None):
self.label = label
self.labelHint = labelHint
self.linkText = linkText
self.linkUrl = linkUrl
self.width = width
def serialize(self, name=None):
data = super(WebLink, self).serialize(name)
data["contentType"] = self.contentType
if self.width:
if self.width not in [100, 50, 33, 25]:
raise InvalidWidthException(self.width)
data["inputOptions"] = {}
data["width"] = self.width
data.update({"content": {"url": self.linkUrl, "text": self.linkText}})
return data
class TextInput(NameBaseField):
def __init__(self, placeHolder=None, label=None, labelHint=None, width=None):
self.label = label
self.labelHint = labelHint
self.placeHolder = placeHolder
self.width = width
def serialize(self, name=None):
data = super(TextInput, self).serialize(name)
data["inputType"] = "text"
data["inputOptions"] = {}
if self.width:
if self.width not in [100, 50, 33, 25]:
raise InvalidWidthException(self.width)
data["inputOptions"]["width"] = str(self.width)
if self.placeHolder:
data["inputOptions"]["placeHolder"] = self.placeHolder
return data
class Textarea(NameBaseField):
def __init__(
self, placeHolder=None, rows=None, label=None, width=None, labelHint=None
):
self.label = label
self.labelHint = labelHint
self.placeHolder = placeHolder
self.rows = rows
self.width = width
def serialize(self, name=None):
data = super(Textarea, self).serialize(name)
data["inputType"] = "textarea"
data["inputOptions"] = {}
if self.rows:
data["inputOptions"]["rows"] = str(self.rows)
if self.placeHolder:
data["inputOptions"]["placeHolder"] = self.placeHolder
if self.width:
data["inputOptions"]["width"] = str(self.width)
return data
class Checkbox(NameBaseField):
def __init__(self, text, label=None, labelHint=None):
self.label = label
self.labelHint = labelHint
self.text = text
def serialize(self, name=None):
data = super(Checkbox, self).serialize(name)
data["inputType"] = "checkbox"
data["inputOptions"] = {"label": self.text}
return data
class Select(NameBaseField):
type = "select"
def __init__(self, label=None, choices=None, labelHint=None):
self.label = label
self.labelHint = labelHint
self.choices = choices or ()
def get_choices(self):
for choice in self.choices:
if isinstance(choice, six.text_type):
yield choice, choice
else:
yield choice
def serialize(self, name=None):
data = super(Select, self).serialize(name)
data["inputType"] = self.type
data["inputOptions"] = []
for value, caption in self.get_choices():
data["inputOptions"].append({"value": value, "caption": caption})
return data
class Radio(Select):
type = "radio"
class ImageUpload(NameBaseField):
def __init__(self, label=None, labelHint=None):
self.label = label
self.labelHint = labelHint
def serialize(self, name=None):
data = super(ImageUpload, self).serialize(name)
data["inputType"] = "imageUpload"
return data