def test_save_not_call(self, save, to_python): """gj.Document.save should be called if autosave is True.""" to_python.return_value = self.ref_doc gj.FollowReferenceField( self.RefDoc, autosave=True ).to_python(self.ref_doc) self.assertEqual(save.call_count, 1) self.assertEqual(to_python.call_count, 1)
class Ref2(Dictable, gj.Document): ref2_refs = db.ListField(gj.FollowReferenceField(Ref1)) @classmethod def generate_test_data(cls, refs): ret = cls(ref2_refs=refs) ret.save() return ret
class Ref3(Dictable, gj.Document): ref3_ref = gj.FollowReferenceField(Ref2) ref3_refs = db.ListField(gj.FollowReferenceField(Ref2)) ref3_emb = db.EmbeddedDocumentField(Ref25) ref3_embs = db.EmbeddedDocumentListField(Ref25) ref3_oids = db.ListField( db.ObjectIdField(), default=[ObjectId() for ignore in range(3)]) @classmethod def generate_test_data(cls, emb, embs, oids, ref, refs): ret = cls(ref3_emb=emb, ref3_embs=embs, ref3_oids=oids, ref3_ref=ref, ref3_refs=refs) ret.save() return ret
class Article(gj.Document): name = db.StringField(required=True, unique=True, min_length=2) description = db.StringField(required=True, min_length=2) link = db.URLField(required=True, unique=True) create_datetime = db.DateTimeField(required=True, default=datetime.utcnow) modify_datetime = db.DateTimeField(required=True, default=datetime.utcnow) categories = db.ListField( gj.FollowReferenceField('Category', reverse_delete_rule=db.DENY)) added_by = db.ReferenceField('User')
class DisabledIDCheckDocument(gj_doc.Helper, db.Document): """Test document disabling id check.""" ref = gj.FollowReferenceField(ReferencedDocument, id_check=False) def __init__(self, enable_gj=False, *args, **kwargs): """Init the class.""" super(DisabledIDCheckDocument, self).__init__(*args, **kwargs) if enable_gj: self.begin_goodjson()
class Question(Document): question_text = db.StringField(max_length=500) word = gj.FollowReferenceField(Dictionary, reverse_delete_rule=CASCADE) def error_checker(id): if not ObjectId.is_valid(id): return Response('Failed: invalid Id', 400) if not Question.objects(id=id): return Response('', 204)
class Quiz(Document): quiz_name = db.StringField(required=True, max_length=100) details = db.StringField(max_length=500, required=True) questions = db.ListField( gj.FollowReferenceField(Question, reverse_delete_rule=PULL)) def error_checker(id): if not ObjectId.is_valid(id): return Response('Failed: invalid Id', 400) if not Quiz.objects(id=id): return Response('', 204)
class IDCheckDocument(gj_doc.Helper, db.Document): """ Test document. By default, the id must be checked. """ ref = gj.FollowReferenceField(ReferencedDocument) def __init__(self, enable_gj=False, *args, **kwargs): """Init the class.""" super(IDCheckDocument, self).__init__(*args, **kwargs) if enable_gj: self.begin_goodjson()
class TestDoc(gj.Document): """Test document.""" name = db.StringField() is_last = db.BooleanField() ref = gj.FollowReferenceField("self", max_depth=self.check_depth) def __str__(self): """Return stringified summary.""" return ("TestDoc<ID: {}, is_last: {}, ref: {}>").format( self.name, self.is_last, getattr(self.ref, "id", None)) def to_dict(self): """Return the dict.""" return str(self.id) if self.is_last else { "id": str(self.id), "name": self.name, "is_last": self.is_last, "ref": self.ref.to_dict() }
class SubDocument(Dictable, gj.EmbeddedDocument): parent = gj.FollowReferenceField("MainDocument") ref_list = db.ListField(gj.FollowReferenceField("MainDocument"))
class Ref2(gj.Document): refs = db.ListField(gj.FollowReferenceField(Ref1))
class Message(gj.Document): text = StringField(required=True, max_length=500) author = gj.FollowReferenceField(User, required=True) chat = ReferenceField(Chat, required=True) date_created = DateTimeField(default=datetime.utcnow)
class MainDocument(Dictable, gj.Document): name = db.StringField() ref_list = db.ListField(gj.FollowReferenceField("self")) subdoc = db.EmbeddedDocumentField(SubDocument)
class Chat(gj.Document): title = StringField(max_length=25) members = ListField(gj.FollowReferenceField(User)) date_created = DateTimeField(default=datetime.utcnow) last_message_date = DateTimeField()
class ModelCls(Dictable, gj.Document): name = db.StringField() ref = gj.FollowReferenceField("self", **kwargs.copy())
def test_super_function_call(self, to_python): """ReferenceField.to_python should be called.""" gj.FollowReferenceField(self.RefDoc).to_python(self.ref_doc) self.assertEqual(to_python.call_count, 1)
class Quiz(Document): quiz_name = db.StringField(required=True, max_length=20) number_of_questions = db.IntField() details = db.StringField(max_length=500, required=True) questions = db.ListField(gj.FollowReferenceField('Question'))
class Ref25(gj.EmbeddedDocument): ref = gj.FollowReferenceField(Ref2) refs = db.ListField(gj.FollowReferenceField(Ref2))
class ModelCls(gj.Document): name = db.StringField() ref = gj.FollowReferenceField("self")
class PasswordReset(gj.Document): user = gj.FollowReferenceField(User, required=True) token = StringField(required=True) time = DateTimeField(default=datetime.utcnow)