class ProfessorMetadata(motorengine.EmbeddedDocument): meta = {"collection": "test_professor_metadata"} id = motorengine.StringField(primary_key=False) first_name = motorengine.StringField() last_name = motorengine.StringField() departments = motorengine.ListField(motorengine.StringField())
class WorkLog(me.Document): origin_id = me.StringField(required=True, unique=True) user_id = me.StringField(required=True) username = me.StringField(required=True) time = me.DateTimeField(required=True) text = me.StringField(required=True) deleted = me.BooleanField(default=False)
class Player(motorengine.Document): meta = {"collection": "test_player"} first_name = motorengine.StringField(required=True) last_name = motorengine.StringField(required=True) opponent = motorengine.ReferenceField("Player") players = motorengine.ListField(motorengine.ReferenceField("Player")) articles = motorengine.ListField(motorengine.ReferenceField("Article")) embedded_list_articles = motorengine.EmbeddedDocumentListField( EmbeddedArticle)
class EmbeddedArticle(motorengine.EmbeddedDocument): meta = {"collection": "test_embedded_article"} headline = motorengine.StringField(required=True) pub_date = motorengine.DateTimeField(default=datetime.now) editor = motorengine.ReferenceField(Editor) reporter = motorengine.ReferenceField("Reporter")
class Position(motorengine.Document): symbol = motorengine.StringField(max_length=6) units = motorengine.IntField(default=0) price = motorengine.DecimalField() def update(self, units, price): if self.units + units < 0: raise Exception('Position limit exceeded!') if units < 0: pnl = units * (price - float(self.price)) self.units += units else: pnl = 0 total_units = self.units + units price = (self.units * float(self.price) + units * price) / total_units self.price = round(price, 2) self.units = total_units return pnl def serialize(self): return { 'symbol': self.symbol, 'units': self.units, 'price': float(self.price), }
class ParentWithRelationship(motorengine.Document): meta = {"collection": "test_parent_reference"} before_child = motorengine.ListField( motorengine.ReferenceField("ChildRegisteredBefore")) after_child = motorengine.ListField( motorengine.ReferenceField("ChildRegisteredAfter")) name = motorengine.StringField()
class User(motorengine.Document): name = motorengine.StringField() email = motorengine.EmailField() @jsonapi.marker.method.attribute() def greetings_earthling(self): return "Greetings, earthling {}!".format(self.name)
class Editor(motorengine.Document): """ An Editor of a publication. """ meta = {"collection": "test_editor"} id = motorengine.StringField(primary_key=True) first_name = motorengine.StringField(required=True, help_text="Editor's first name.", db_field="fname") last_name = motorengine.StringField(required=True, help_text="Editor's last name.") metadata = motorengine.MapField(field=motorengine.StringField(), help_text="Arbitrary metadata.") company = motorengine.LazyReferenceField(Publisher) avatar = motorengine.FileField() seq = motorengine.SequenceField()
class Reporter(motorengine.Document): meta = {"collection": "test_reporter"} id = motorengine.StringField(primary_key=True) first_name = motorengine.StringField(required=True) last_name = motorengine.StringField(required=True) email = motorengine.EmailField() awards = motorengine.ListField(motorengine.StringField()) articles = motorengine.ListField(motorengine.ReferenceField(Article)) embedded_articles = motorengine.ListField( motorengine.EmbeddedDocumentField(EmbeddedArticle)) embedded_list_articles = motorengine.EmbeddedDocumentListField( EmbeddedArticle) generic_reference = motorengine.GenericReferenceField( choices=[Article, Editor]) generic_embedded_document = motorengine.GenericEmbeddedDocumentField( choices=[EmbeddedArticle, EmbeddedFoo]) generic_references = motorengine.ListField( motorengine.GenericReferenceField(choices=[Article, Editor]))
class Publisher(motorengine.Document): meta = {"collection": "test_publisher"} name = motorengine.StringField() @property def legal_name(self): return self.name + " Inc." def bad_field(self): return None
class Article(motorengine.Document): meta = {"collection": "test_article"} headline = motorengine.StringField(required=True, help_text="The article headline.") pub_date = motorengine.DateTimeField( default=datetime.now, verbose_name="publication date", help_text="The date of first press.", ) editor = motorengine.ReferenceField(Editor) reporter = motorengine.ReferenceField("Reporter")
class Portfolio(motorengine.Document): user = motorengine.StringField(max_length=128, required=True) cash = motorengine.IntField(default=1000000) positions = motorengine.ListField( motorengine.EmbeddedDocumentField(Position)) async def make_deal(self, sym, units, price): if units == 0: raise Exception('Amount must be positive!') amount = units * price if amount > self.cash: raise Exception('Cash limit exceeded!') pnl = 0 for position in self.positions: if position.symbol == sym: pnl = position.update(units, price) if position.units == 0: self.positions.remove(position) break else: if units < 0: raise Exception('Position limit exceeded!') else: self.positions.append( Position(symbol=sym, units=units, price=price)) self.cash -= amount # self.cash += pnl await self.save() async def reset(self): self.cash = 1000000 self.positions = [] await self.save() def serialize(self): return { # 'user': self.user, 'cash': self.cash, 'positions': [p.serialize() for p in self.positions], }
class Post(motorengine.Document): text = motorengine.StringField() author = motorengine.ReferenceField(User)
class CellTower(motorengine.Document): meta = {"collection": "test_cell_tower"} code = motorengine.StringField() base = motorengine.PolygonField() coverage_area = motorengine.MultiPolygonField()
class MotorDoc(motorengine.Document): __collection__ = 'IntegrationCanDeleteOneItem' string = motorengine.StringField()
class MotorBase(motorengine.Document): __collection__ = 'IntegrationTestRefBase' string = motorengine.StringField()
class ErroneousModel(motorengine.Document): meta = {"collection": "test_colliding_objects_model"} objects = motorengine.ListField(motorengine.StringField())
def test_should_map_convert_json(): assert_conversion(motorengine.MapField, graphene.JSONString, field=motorengine.StringField())
class Child(Parent): meta = {"collection": "test_child"} baz = motorengine.StringField() loc = motorengine.PointField()
class Parent(motorengine.Document): meta = {"collection": "test_parent", "allow_inheritance": True} bar = motorengine.StringField() loc = motorengine.MultiPolygonField()
class MotorDocument(motorengine.Document): __collection__ = "IntegrationTestStringField" name = motorengine.StringField()
class EmbeddedFoo(motorengine.EmbeddedDocument): meta = {"collection": "test_embedded_foo"} bar = motorengine.StringField()
class ChildRegisteredAfter(motorengine.Document): meta = {"collection": "test_child_after_reference"} parent = motorengine.ReferenceField(ParentWithRelationship) name = motorengine.StringField()
class MotorDocument(motorengine.Document): field1 = motorengine.StringField() field2 = motorengine.IntField() field3 = motorengine.DateTimeField(default=datetime.now)
def test_should_field_convert_list(): assert_conversion(motorengine.ListField, graphene.List, field=motorengine.StringField())
class MotorUser(motorengine.Document): __collection__ = "IntegrationTestUsers" email = motorengine.StringField()
class HackerNewsStory(me.Document): id = me.StringField(unique=True) time = me.DateTimeField()
class Bar(motorengine.EmbeddedDocument): some_list_field = motorengine.ListField(motorengine.StringField(), required=True)
class MotorDocument(motorengine.Document): __collection__ = "MotorBenchmarkQuery" field1 = motorengine.StringField() field2 = motorengine.IntField() field3 = motorengine.DateTimeField(default=datetime.now)
class User(motorengine.Document): name = motorengine.StringField() email = motorengine.EmailField() posts = motorengine.ListField(motorengine.ReferenceField("__main__.Post"))