from models.connection import db
import models.pre_save_hooks as hooks
class DocumentWithPreSaveSupport(db.Document):
_pre_save_hooks = []
meta = {'allow_inheritance': True}
def save(self, *args, **kwargs):
for hook in self._pre_save_hooks:
# the callable can raise an exception if
# it determines that it is inappropriate
# to save this instance; or it can modify
# the instance before it is saved
hook(self)
super().save(*args, **kwargs)
class User(DocumentWithPreSaveSupport):
email = db.StringField(required=True)
first_name = db.StringField(required=True, max_length=50)
last_name = db.StringField(required=True, max_length=50)
password = db.DynamicField(required=True)
admin = db.BooleanField()
_pre_save_hooks = [
hooks.validate_username_starts_with_smit
]
class Keys(db.Document):
user_id = db.DynamicField(required=True)
exchange_name = db.StringField(required=True)
apiKey = db.DynamicField(required=True)
secret = db.DynamicField(required=True)
class Otp(db.Document):
secret = db.StringField(required=True)
otp = db.IntField(required=True)
class Transactions(db.Document):
bot_id = db.DynamicField(required=True)
user_id = db.DynamicField(required=True)
transaction_info = db.DictField()
class test(db.Document):
test = db.DynamicField()
class Bots(db.Document):
user_id = db.DynamicField(required=True)
bot_name = db.StringField(required=True)
exchange_id = db.DynamicField(required=True)
exchange_name = db.StringField(required=True)
symbol = db.StringField(required=True)
type = db.StringField(required=True)
strategy = db.StringField(required=True)
unit = db.StringField(required=True)
budget = db.FloatField(required=True)
stop_loss = db.FloatField(required=True)
active = db.BooleanField(required=True)
profit = db.FloatField(required=True)
frequency = db.StringField(required=True)
def validate_username_starts_with_smit(doc):
if not doc.email.startswith('smit'):
raise Exception("Invalid Username")
models/pre_save_hooks.py