Издевательство над классом в Python работает в пакете пространства имен, но не в обычном пакете.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Издевательство над классом в Python работает в пакете пространства имен, но не в обычном пакете.

Сообщение Anonymous »

Контекст
Я пишу модульные тесты для своего приложения.
У меня есть модуль в файле Configuration/connections.py с конфигурацией (обычно определяемой переменными среды):

Код: Выделить всё

from typing import Literal

from pydantic_settings import BaseSettings

class StorageConfig(BaseSettings):
storage_name: Literal["file", "s3"]
эта конфигурация вызывается в модуле Connections/storage/main.py:

Код: Выделить всё

import fsspec

from configuration.connections import StorageConfig

storage_config = StorageConfig()

fs: fsspec.AbstractFileSystem = fsspec.filesystem(storage_config.storage_name)
и поскольку конфигурация среды не существует, когда я запускаю модульные тесты, я пытаюсь имитировать объект StorageConfig:

Код: Выделить всё

import pytest
from pydantic import BaseModel

@pytest.fixture(autouse=True)
def local_config(mocker):
class LocalStorageConfig(BaseModel):
storage_name: str = "file"

mocker.patch("configuration.connections.StorageConfig", new=LocalStorageConfig)
Проблема
В зависимости от архитектуры моей папки макет работает, а иногда и нет.
  • Если у меня есть Connections.storage как пакет пространства имен, и мой тест находится в Connections/storage/tests/test_storage.py, и я исправляю непосредственно Configuration.connections. StorageConfig (в отличие от того, что мне хотелось бы сделать в документации), он работает нормально.
  • Если Connections.storage< /code> — обычный пакет, а все остальное как в 1., он больше не работает
  • Если я перенесу свой тест в test/integration/test_storage.py и оставьте все остальное, как в 2., это работает.
Вопрос
  • Почему обычный пакет и пакет пространства имен влияют на макет?
  • Почему положение моего тестового файла влияет на макет?
    Почему это не работает, когда я исправляю Connections.storage.main.StorageConfig, как предполагает документация?
Спасибо, что уделили время и помогли мне разобраться в этой проблеме :)

Подробнее здесь: https://stackoverflow.com/questions/790 ... -regular-p
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»