Schematics 101

Validar dados não estruturados

{
   "nome": "Jess",
   "idade": 42,
   "linguagens": [
      "Python",
      "Go",
      "R"
   ]
}
pessoa/
├── __init__.py
└── models.py
from schematics.models import Model 
from schematics.types import StringType, ListType, IntType


class Pessoa(Model):
    nome = StringType(required=True)
    idade = IntType()
    linguagens = ListType(StringType)

obj.validate()

>>> from pessoa.models import Pessoa
>>> jess_data = {
       "nome": "Jess",
       "idade": 42,
       "linguagens": [
          "Python",
          "Go",
          "R"
       ]
    }
>>> jess = Pessoa(jess_data)
>>> jess.validate()

obj.to_native()

>>> from pessoa.models import Pessoa
>>> jess_data = {
       "nome": "Jess",
     }
>>> jess = Pessoa(jess_data)
>>> jess.to_native()
    {
       "nome": "Jess",
       "idade": None,
       "linguagens": None
    }
from schematics.models import Model 
from schematics.types import StringType, ListType, IntType


class Pessoa(Model):
    nome = StringType(required=True)
    idade = IntType(serialize_when_none=False)
    linguagens = ListType(StringType, serialize_when_none=False)
>>> from pessoa.models import Pessoa
>>> jess_data = {
       "nome": "Jess",
     }
>>> jess = Pessoa(jess_data)
>>> jess.to_native()
    {
       "nome": "Jess"
    }
from schematics.models import Model
from schematics.types import StringType, ListType, ModelType, IntType


class Pessoa(Model):
    nome = StringType(required=True, serialize_when_none=False,
                      deserialize_from="name")
    idade = IntType(serialize_when_none=False, deserialize_from="age")
    linguagens = ListType(StringType, serialize_when_none=False,
                          deserialize_from="lang")
>>> from pessoa.models import Pessoa
>>> jess_data = {
       "name": "Jess",
       "age": "42",
       "lang": [
          "Python",
          "Go",
          "R"
       ]
    }
>>> jess = Pessoa(jess_data)
>>> jess.validate()

>>> jess.to_native()
{
  'nome': 'Jess',
  'idade': 42,
  'linguagens': [
    'Python',
    'Go',
    'R'
   ]
}
from schematics.models import Model
from schematics.types import StringType, ListType, ModelType, IntType


class Pessoa(Model):
    nome = StringType(required=True, serialize_when_none=False,
                      deserialize_from="name", serialized_name="name")
    idade = IntType(serialize_when_none=False, deserialize_from="age",
                    serialized_name="age")
    linguagens = ListType(StringType, serialize_when_none=False,
                          deserialize_from="lang", serialized_name="blabla")
>>> from pessoa.models import Pessoa
>>> jess_data = {
       "name": "Jess",
       "age": "42",
       "lang": [
          "Python",
          "Go",
          "R"
       ]
    }
>>> jess = Pessoa(jess_data)
>>> jess.validate()

>>> jess.to_native()
{
  'name': 'Jess',
  'age': 42,
  'blabla': [
    'Python',
    'Go',
    'R'
   ]
}

Fields com classe

{
   "name": "Jess",
   "age": "42",
   "lang": [
      "Python",
      "Go",
      "R"
   ],
   "pets": [{
         "name": "Channel",
         "fur": "branca"
      },
      {
         "name": "Cora",
         "fur": "preta"
      },
      {
         "name": "Catarina",
         "fur": "loira"
      }
   ]
}
from schematics.models import Model
from schematics.types import StringType, ListType, ModelType, IntType


class PetType(Model):
    nome = StringType(required=True, deserialize_from="name",
                      serialized_name="name")
    cor = StringType(required=True, deserialize_from="fur",
                      serialized_name="fur")


class Pessoa(Model):
    nome = StringType(required=True, deserialize_from="name",
                      serialized_name="name")
    idade = IntType(serialize_when_none=False, deserialize_from="age",
                    serialized_name="age")
    linguagens = ListType(StringType, serialize_when_none=False,
                          deserialize_from="lang", serialized_name="blabla")
    pets = ListType(ModelType(PetType))
>>> from pessoa.models import Pessoa
>>> jess_data = {
       "name": "Jess",
       "age": "42",
       "lang": [
          "Python",
          "Go",
          "R"
       ],
       "pets": [
        {"name": "cora", "fur": "preta"},
        {"name": "channel", "fur": "branca"}
       ]
    }
>>> jess = Pessoa(jess_data)
>>> jess.validate()

@jesstemporal

TAD: Schematics 101

By Jessica Temporal

TAD: Schematics 101

Schematics 101: Usando a biblioteca Python Schematics para validar dados.

  • 654