class Store(BaseModel): __schema__ = DictField( dict(name=StringField(required=True), about=StringField(default=''), item_list=ListField(default=[]))) __indexes__ = [IndexModel('name', unique=True)] class InventoryAggregateManipulator(Manipulator): def transform_outgoing(self, doc, model): cur = Store.aggregate([{ "$lookup": { "from": "item", "foreignField": "_id", "localField": "item_list", "as": "inventory" } }, { "$match": { "_id": doc['_id'] } }]) for doc in cur: return doc def transform_incoming(self, doc, model, action): if 'inventory' in doc: del doc['inventory'] return doc
class Guild(BaseModel): __schema__ = DictField(dict( name=StringField(required=True), guild_id=StringField(default=''), )) __indexes__ = [IndexModel('guild_id', unique=True)]
class Item(BaseModel): __schema__ = DictField( dict(name=StringField(required=True), about=StringField(default=''), price=IntField(required=True), rate=IntField(default=60), payout=IntField(required=True))) __indexes__ = [IndexModel('name', unique=True)]
class Theme(Model): @classmethod def db(cls): return MongoClient( 'mongodb+srv://123:[email protected]/deathteacherbot?retryWrites=true&w=majority' )['deathteacherbot'] __schema__ = DictField( dict(url=StringField(required=False), content=StringField(required=False)))
class Professors(Model): @classmethod def db(cls): return MongoClient('mongodb+srv://123:[email protected]/deathMeetup?retryWrites=true&w=majority')['deathMeetup'] __schema__ = DictField(dict( additionalInformation=ListField(required=False), fullName=StringField(required=True), urlImage=StringField(required=False), urlVideo=StringField(required=False), category=ObjectIDField(required=True), createdAt=StringField(required=True), deletedAt=StringField(required=False), ))
class User(Model): @classmethod def db(cls): return MongoClient( 'mongodb+srv://123:[email protected]/deathteacherbot?retryWrites=true&w=majority' )['deathteacherbot'] __schema__ = DictField( dict(email=StringField(required=True), names=StringField(required=True), password=StringField(required=True), firstname=StringField(required=True), secondname=StringField(required=True))) __indexes__ = [IndexModel('email', unique=True)]
class Events(Model): @classmethod def db(cls): return MongoClient( 'mongodb+srv://123:[email protected]/deathMeetup?retryWrites=true&w=majority' )['deathMeetup'] __schema__ = DictField( dict( title=StringField(required=True), description=StringField(required=True), urlImage=StringField(required=False), urlVideo=StringField(required=False), urlEvent=StringField(required=False), category=ObjectIDField(required=True), professor=ObjectIDField(required=True), releaseDate=StringField(required=True), createdAt=StringField(required=True), deletedAt=StringField(required=False), ))
class statements(Model): @classmethod def db(cls): return MongoClient( 'mongodb+srv://123:[email protected]/deathteacherbot?retryWrites=true&w=majority' )['deathteacherbot'] __schema__ = DictField( dict(id=StringField(required=False), text=StringField(required=False), search_text=StringField(required=False), conversation=StringField(required=False), persona=StringField(required=False), in_response_to=StringField(required=False), search_in_response_to=StringField(required=False), created_at=DateTimeField(required=False), tags=ListField(required=False)))
class AB(Model): __collection_name__ = 'ab_test' @classmethod def db(cls): return MongoClient()['the_test_db'] __schema__ = DictField(dict( name=StringField(required=True), createdAt=DateTimeField(default=datetime.datetime.utcnow, required=True) )) __indexes__ = ["name", "-createdAt"] class DummyManipulator(Manipulator): priority = 10 def transform_outgoing(self, doc, model): doc['is_dummy'] = True return doc
class User(BaseModel): __schema__ = DictField( dict(user_id=StringField(required=True), name=StringField(required=True), discriminator=StringField(required=True), quote_to=StringField(default='USD'), price_list=DictField(dict(coins=ListField(default=[]))), item_list=ListField(default=[]), game=DictField( dict(money=NumberField(default=config.economy.start_money), in_pocket=NumberField(default=0), portfolio=DictField( dict(transactions=ListField(default=[]), coins=ListField(default=[]))), wage=NumberField(default=config.economy.start_wage), total_wages=NumberField(default=0), last_wage=DateTimeField(default=None), created_at=DateTimeField(default=datetime.now()))))) __indexes__ = [IndexModel('user_id', unique=True)] class InventoryAggregateManipulator(Manipulator): def transform_outgoing(self, doc, model): cur = User.aggregate([ { "$lookup": { "from": "item", "let": { "items": "$item_list" }, "pipeline": [ { "$match": { "$expr": { "$in": ["$_id", "$$items.id"] } } }, { "$project": { "name": "$name", 'rate': "$rate", "payout": "$payout" } }, # {"$addFields": {"last_run": "$$list_item.created_at"}} ], "as": "inventory" } }, { "$match": { "_id": doc['_id'] } } ]) for doc in cur: return doc def transform_incoming(self, doc, model, action): if 'inventory' in doc: del doc['inventory'] return doc class RoundGameBalanceManipulator(Manipulator): def transform_outgoing(self, doc, model): if 'game' in doc: if 'money' in doc['game']: doc['game']['money'] = float('{0:.6f}'.format( doc['game']['money'])) if 'in_pocket' in doc['game']: doc['game']['in_pocket'] = float('{0:.6f}'.format( doc['game']['in_pocket'])) return doc