Skip to content

Instantly share code, notes, and snippets.

@smitthakkar96
Last active July 14, 2018 10:51
Show Gist options
  • Select an option

  • Save smitthakkar96/d389cc2dfecb4515737d4eff7e371618 to your computer and use it in GitHub Desktop.

Select an option

Save smitthakkar96/d389cc2dfecb4515737d4eff7e371618 to your computer and use it in GitHub Desktop.

Models

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)

Presave Hooks

def validate_username_starts_with_smit(doc):
    if not doc.email.startswith('smit'):
        raise Exception("Invalid Username")
@smitthakkar96
Copy link
Author

models/pre_save_hooks.py

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment