osdict_project/spider/serializers.py

71 lines
2.0 KiB
Python

from validator import Validator, fields, FieldValidationError
from normalutils.choices import WordPropertyType
from models import Word, Meaning, Session
class WordAddSerializer(Validator):
spelling = fields.StringField(1, 64, allow_null=False)
importance = fields.StringField(required=False)
def __init__(self, raw_data, session: Session, *args, **kwargs):
super().__init__(raw_data)
self.__session = session
def save(self):
assert self.errors == {}
return self.create(self.validated_data)
def create(self, data):
session = self.__session
word = Word(**data)
session.add(word)
return word
class MeaningAddSerializer(Validator):
meaning = fields.StringField()
word_property = fields.StringField()
sentence = fields.StringField(required=False)
def __init__(self, raw_data, session: Session, word, *args, **kwargs):
super().__init__(raw_data)
self.__session = session
self.__word = word
def validate_word_property(self, data):
try:
WordPropertyType.is_valid(data, True)
except Exception as e:
raise FieldValidationError(e)
def save(self):
assert self.errors == {}
return self.create(self.validated_data)
def create(self, data):
session = self.__session
meaning = Meaning(word=self.__word, **data)
session.add(meaning)
return meaning
def testcase1():
data = {
"spelling": "a",
"meaning": "haha",
"word_property": "n."
}
with Session() as session:
serializer = WordAddSerializer(data, session)
serializer.is_valid()
serializer.save()
session.commit()
if __name__ == "__main__":
data = {'spelling': "None", 'importance': None}
with Session() as session:
serializer = WordAddSerializer(data, session)
flag = serializer.is_valid()
print(serializer.validated_data)