Использованиеock.patch.object() с моделью sqlalchemy ⇐ Python
-
Anonymous
Использованиеock.patch.object() с моделью sqlalchemy
класс FooModel(Base): __tablename__ = "фу" __table_args__ = { "schema": "some_schema", "postgresql_partition_by": "ДИАПАЗОН (event_ts)", } идентификатор: Mapped[int] =mapped_column( БигИнтегер, автоинкремент = Истина, первичный_ключ = Правда, ) some_column: Mapped[int] = mapped_column(BigInteger, nullable=False) event_ts: Mapped[datetime] = mapped_column(DateTime, nullable=False, index=True) @pytest.fixture(autouse=True,scope="session") defock_foo_model() -> Генератор[Нет, Нет, Нет]: patched_model_class = copy.copy(FooModel) setattr(patched_model_class, "__table_args__", { "schema": "some_schema" # удалено поле postgresql_partition_by }) с помощью макета.patch.object(FooModel,patched_model_class): # требуется атрибут, но я хочу заменить его другим объектом или тем же # один с измененным __table_args__ # Мне нужно использовать patch.object(), потому что этот макет будет распространяться на все приложение урожай Мне как-то нужно поиздеваться над моей FooModel, я просто хочу изменить table_args, а остальное оставить. Мне нужно использовать patch.object(), потому что это приспособление будет распространяться на все приложение. Возможно ли это?
В приведенном выше коде я получаю: TypeError: имя атрибута должно быть строкой, а не «DeclarativeAttributeIntercept»
класс FooModel(Base): __tablename__ = "фу" __table_args__ = { "schema": "some_schema", "postgresql_partition_by": "ДИАПАЗОН (event_ts)", } идентификатор: Mapped[int] =mapped_column( БигИнтегер, автоинкремент = Истина, первичный_ключ = Правда, ) some_column: Mapped[int] = mapped_column(BigInteger, nullable=False) event_ts: Mapped[datetime] = mapped_column(DateTime, nullable=False, index=True) @pytest.fixture(autouse=True,scope="session") defock_foo_model() -> Генератор[Нет, Нет, Нет]: patched_model_class = copy.copy(FooModel) setattr(patched_model_class, "__table_args__", { "schema": "some_schema" # удалено поле postgresql_partition_by }) с помощью макета.patch.object(FooModel,patched_model_class): # требуется атрибут, но я хочу заменить его другим объектом или тем же # один с измененным __table_args__ # Мне нужно использовать patch.object(), потому что этот макет будет распространяться на все приложение урожай Мне как-то нужно поиздеваться над моей FooModel, я просто хочу изменить table_args, а остальное оставить. Мне нужно использовать patch.object(), потому что это приспособление будет распространяться на все приложение. Возможно ли это?
В приведенном выше коде я получаю: TypeError: имя атрибута должно быть строкой, а не «DeclarativeAttributeIntercept»