Validación de objetos del modelo Python

Estoy escribiendo una interfaz para ser utilizada por dos aplicaciones. Esta interfaz debe utilizar algunas clases DoSomethingRequest y DoSomethingResponse para realizar la comunicación.

¿Hay alguna biblioteca que haga alguna validación de modelo, por ejemplo como el Model de Django?

Básicamente quiero poder decir algo como:
El objeto A debe tener una propiedad de “texto” de tipo str (), una propiedad de “número” de tipo int (), y una propiedad de “elementos” de tipo list (). De forma seca.

Estoy buscando algo como lo siguiente, o mejor:

 class MyEmbeddedModelClass(EmbeddedModel): text = TextField(required = True) class MyModel(Model): text = TextField(required = True) number = IntField(default = 0) items = ListField(EmbeddedModel) a = MyModel() a.text = "aaaa" a.number = 1 a.items = [ MyEmbeddedModelClass("bbbb"), MyEmbeddedModelClass("cccc"), MyEmbeddedModelClass("dddd") ] a.validate() 

Sé que puedo escribir la mía, pero prefiero usar una biblioteca si está disponible, soy un poco nuevo en esto.

Si desea imponer interfaces, o usar diseño por contrato, entonces probablemente desee la biblioteca zope.interface . A pesar del nombre, que refleja sus orígenes en Zope, en realidad no está ligado a ese marco y es bastante utilizable en el exterior.

Creo que los decoradores podrían ser utilizados para esto. revisa este enlace

Combinación de descriptores con los decoradores de clase para la validación

Para un enfoque diferente, compruebe Duck escribiendo

Debido a que Python es dynamic, la convención es exigir que un objeto se comporte como una instancia de una clase particular en lugar de imponer un tipo específico.

En algún lugar de su código, preferiblemente en el punto donde necesita acceder a esas propiedades, pero tan pronto como sea posible, afirme que el objeto tiene esas propiedades y luego afirme que esas propiedades son lo que usted espera que sean.

Esto genera una excepción AssertionError si el objeto o , independientemente del tipo, si le falta el atributo ‘someattribute’:

 assert(hasattr(o, 'someattribute')) 

Además, si o.someattribute no es una cadena:

 assert(isinstance(o.someattribute, basestring))