init
This commit is contained in:
71
spider/serializers.py
Normal file
71
spider/serializers.py
Normal file
@ -0,0 +1,71 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user