¿Cómo mapear un tipo personalizado en Ming ODM?

Estoy en proceso de configurar un mapeo en Ming ODM. Un problema que ha surgido es cómo asignar un tipo personalizado a un campo y cómo pasar ese tipo personalizado a .query

Básicamente, tengo un objeto para representar una ID de cliente. Me gustaría que FieldProperty tome y devuelva un objeto de este tipo, en lugar de uno de los tipos integrados. El tipo es convertible desde y hacia un int, y se almacenará como un int en Mongo, pero en el modelo de datos y otro código de Python quiero pasarlo como este tipo específico de dominio.

Al pasar una instancia del tipo CustomerID directamente como un argumento kwd a .query, PyMongo se queja de que no entiende el tipo.

preguntado el 21 de mayo de 12 a las 18:05

1 Respuestas

Hace poco quise hacer algo similar; almacenar direcciones IP como datos binarios en MongoDB a través de Ming. (La razón de esto fue permitir consultas CIDR eficientes). Estoy proporcionando mi solución para cualquier otra persona que se encuentre con esta pregunta mientras intenta lo mismo, aunque puede ser demasiado tarde para ayudar a @kbluck.

Hice que esto funcionara con el truco de hacer que mi clase de dirección IP sea una subclase de bson.Binary (Estoy usando Python 2; para Python 3, una subclase de la función integrada binary type se usaría en su lugar).

harías tu CustomerID clase una subclase de int. La CustomerID la clase necesita tener un constructor polimórfico que acepte un int (para cuando se carga desde la base de datos), un CustomerID instancia (constructor de copia) y cualquier constructor que la aplicación necesite usar (en mi ejemplo, una cadena de presentación de dirección IP).

Esto no es exactamente lo que pediste; FieldProperty toma ya sea un int o su tipo y devuelve un especial int que sabe convertirse a tu tipo.

He subido un ejemplo completo (de direcciones IP) como esencia: https://gist.github.com/3854792

Respondido 08 Oct 12, 21:10

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.