query one datatypes python flask sqlalchemy flask-sqlalchemy nose

python - one - ¿Por qué esta alternativa a la Factory.set_creation_function obsoleta no funciona con nosetest?



pagination in flask sqlalchemy (1)

Factory Boy desaprobó set_creation_function (ver ChangeLog 2.6.1 ) y recomienda que los desarrolladores

Reemplazar factory.set_creation_function (SomeFactory, creation_function) con una anulación del método _create () de SomeFactory

Tengo i) varias clases de fábrica de derivados y ii) mi sesión de db instanciada en otro módulo, así que traté de reemplazar el ejemplo de trabajo de https://github.com/mattupstate/overholt con el segundo bloque de código a continuación. PyCharm me está advirtiendo que la importación "db" no se está utilizando, así que sospecho que no se está desreferenciando correctamente cuando configuro sqlalchemy_session ?

Trabajar con nosetests 1.3.7 (pero la set_creation_function de FactoryBoy ahora está en desuso):

from myapp.core import db def create_sqlalchemy_model_function(class_to_create, *args, **kwargs): entity = class_to_create(**kwargs) db.session.add(entity) db.session.commit() return entity Factory.set_creation_function(create_sqlalchemy_model_function)

No funciona con nosetests 2.x (parece que db no está siendo referenciado correctamente?)

from factory.alchemy import SQLAlchemyModelFactory as Factory from myapp.core import db class Factory(): class Meta: sqlalchemy_session = db.session def _create(cls, model_class, *args, **kwargs): entity = model_class(*args, **kwargs) db.session.add(entity) db.session.commit() return entity


Dos problemas principales con su código no funcional de muestra:

  • la clase debe derivarse de la clase SQLAlchemyModelFactory
  • el método _create() debe definirse como classmethod

Versión arreglada:

from factory.alchemy import SQLAlchemyModelFactory as Factory from myapp.core import db class MyFactory(Factory): class Meta: sqlalchemy_session = db.session @classmethod def _create(cls, model_class, *args, **kwargs): entity = model_class(*args, **kwargs) db.session.add(entity) db.session.commit() return entity

Aquí también hay una muestra de la fábrica de modelos que _create() método _create() .