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 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 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 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")
def convert_field_to_union(field, registry=None): _types = [] for choice in field.choices: if isinstance(field, motorengine.GenericReferenceField): _field = motorengine.ReferenceField(get_document(choice)) elif isinstance(field, motorengine.GenericEmbeddedDocumentField): _field = motorengine.EmbeddedDocumentField(choice) _field = convert_motorengine_field(_field, registry) _type = _field.get_type() if _type: _types.append(_type.type) else: # TODO: Register type auto-matically here. pass if len(_types) == 0: return None # XXX: Use uuid to avoid duplicate name name = "{}_{}_union_{}".format( field._owner_document.__name__, field.db_field, str(uuid.uuid1()).replace("-", ""), ) Meta = type("Meta", (object,), {"types": tuple(_types)}) _union = type(name, (graphene.Union,), {"Meta": Meta}) return graphene.Field(_union)
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 Post(motorengine.Document): text = motorengine.StringField() author = motorengine.ReferenceField(User)
class MotorDoc(motorengine.Document): __collection__ = 'IntegrationTestRefDoc' embed = motorengine.ReferenceField(MotorBase)
class ChildRegisteredAfter(motorengine.Document): meta = {"collection": "test_child_after_reference"} parent = motorengine.ReferenceField(ParentWithRelationship) name = motorengine.StringField()
class User(motorengine.Document): name = motorengine.StringField() email = motorengine.EmailField() posts = motorengine.ListField(motorengine.ReferenceField("__main__.Post"))