49 lines
1.5 KiB
Python
49 lines
1.5 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=[
|
|
])
|