mirror of https://github.com/morpheus65535/bazarr
200 lines
5.4 KiB
Python
200 lines
5.4 KiB
Python
|
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
|