@samanwirst
Вроде бы человек

Почему pydantic не видит .env файл?

Человек отправил код, чтобы я подключил его к .env и работал с ним, но проблема в том что pydantic как я понял не видит файл/данные.
Сам .env нужен для хранения телеграмм токена.

Код:
# telegram.py
from functools import cache
from pydantic import BaseSettings, SecretStr
import os

class TelegramSettings(BaseSettings):
    """Represents Telegram settings."""

    class Config:
        env_prefix = "TELEGRAM_"
        env_file = ".env"

    token: SecretStr
    skip_updates: bool = False

    @property
    def bot_id(self) -> int:
        raw_bot_id, *_ = self.token.get_secret_value().split(":")
        return int(raw_bot_id)

@cache
def get_telegram_settings() -> TelegramSettings:
    return TelegramSettings()
get_telegram_settings()


# .env
TELEGRAM_TOKEN="1234567890:abcdefghijklmnopqrstuvwxyz"


Ошибка:
Traceback (most recent call last):
  File "/home/samanwirst/Рабочий стол/settings-dev/src/app/settings/telegram_take_data.py", line 23, in <module>
    get_telegram_settings()
  File "/home/samanwirst/Рабочий стол/settings-dev/src/app/settings/telegram_take_data.py", line 22, in get_telegram_settings
    return TelegramSettings()
  File "pydantic/env_settings.py", line 39, in pydantic.env_settings.BaseSettings.__init__
  File "pydantic/main.py", line 342, in pydantic.main.BaseModel.__init__
pydantic.error_wrappers.ValidationError: 1 validation error for TelegramSettings
token
  field required (type=value_error.missing)


Папка:
settings {
    telegram.py
    .env
    __init__.py
}
  • Вопрос задан
  • 1297 просмотров
Решения вопроса 1
@samanwirst Автор вопроса
Вроде бы человек
Решил проблему.
Она заключалась в том, что файл не подгружался, в итоге использую env интерфейс от pyCharm. Спасибо тем кто ответил, возможно у кого-то будет проблема именно в этом
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Lord_of_Rings
@Lord_of_Rings
Python developer
Проблема не в том что он его не видит, а в том, что у вас невалидный токен
Ответ написан
Комментировать
@twistfire92
Python backend developer
На первый взгляд варианта 2:
Первый (маловероятный) - регистр настройки в .env файле. Ожидается TOKEN, а там token

Второй (более вероятный) - код запускается из файла, расположенного вне каталога settings. Сами настройки импортируются. Попробуйте вынести .env на уровень выше, туда же, где лежит запускаемый файл.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы