57 lines
1.6 KiB
Python
57 lines
1.6 KiB
Python
from flask_wtf import FlaskForm
|
|
from wtforms import StringField
|
|
from flask_login import current_user
|
|
from bitvend.models import User
|
|
from wtforms.fields.core import DecimalField
|
|
from wtforms.validators import DataRequired, NumberRange, ValidationError
|
|
from decimal import Decimal, InvalidOperation
|
|
|
|
|
|
class DecimalUnityField(DecimalField):
|
|
unity = 100
|
|
|
|
def __init__(self, label=None, validators=None, unity=100, **kwargs):
|
|
super(DecimalUnityField, self).__init__(label, validators, **kwargs)
|
|
self.unity = unity
|
|
|
|
def _value(self):
|
|
if self.data is not None:
|
|
format = "%%0.%df" % self.places
|
|
return format % (Decimal(self.data) / self.unity,)
|
|
elif self.raw_data:
|
|
return self.raw_data[0]
|
|
|
|
def process_formdata(self, valuelist):
|
|
if valuelist:
|
|
try:
|
|
self.data = int(Decimal(valuelist[0]) * self.unity)
|
|
except InvalidOperation:
|
|
self.data = None
|
|
|
|
|
|
def UserExists(form, field):
|
|
if not User.query.get(field.data):
|
|
raise ValidationError("User does not exist.")
|
|
|
|
|
|
def NotCurrentUser(form, field):
|
|
if field.data == current_user.uid:
|
|
raise ValidationError("Are you serious?")
|
|
|
|
|
|
class TransferForm(FlaskForm):
|
|
target = StringField(
|
|
"Target user", validators=[DataRequired(), UserExists, NotCurrentUser]
|
|
)
|
|
amount = DecimalUnityField(
|
|
"Amount",
|
|
default=0,
|
|
validators=[
|
|
NumberRange(min=1),
|
|
],
|
|
)
|
|
|
|
|
|
class ManualForm(FlaskForm):
|
|
amount = DecimalUnityField("Amount", default=0, validators=[])
|