pip install --upgrade git+https://github.com/ablaternae/python-dotenv-typecast
from dotenv_typecast import read_dotenv
env = read_dotenv()
example = env.str("EXAMPLE_STRING")
Скрипт расширяет возможности известной библиотеки dotenv
методами приведения типов.
Получается почти как environs
, но не тащит за собой в зависимостях 350кб marshmallow
.
Инициализация плагина выполняется при импорте
import dotenv_typecast
Все функции можно импортировать как из dotenv
, так и из dotenv_typecast
import dotenv_typecast
from dotenv import dotenv_values, load_dotenv, read_dotenv
или
from dotenv_typecast import dotenv_values, load_dotenv, read_dotenv
После инициализации к модулю dotenv
будет добавлена функция read_dotenv
, которая работает аналогично другим функциям, но возвращает объект DotEnv
def read_dotenv(
dotenv_path: Optional[StrPath] = None,
stream: Optional[IO[str]] = None,
verbose: bool = False,
override: bool = False,
interpolate: bool = True,
encoding: Optional[str] = "utf-8",
) -> DotEnv:
env = read_dotenv(".env", override=True)
data_dir = env.path("DATA_DIR", default="my_data_dir")
- Добавлен метод
DotEvn.env(key, default)
получения данных не из внутреннего массива (который формируется из файла или строки), а из переменных окружения, как это делаетos.getenv(key, default)
- Весь каст теперь идёт через него, а не оригинальный метод
DotEvn.get
- Таким образом, параметр
override
выглядит более логичным - Версия повышена до стабильной
имеют схожую сигнатуру и обрабатываются через DotEnv.__getattr__
def typecast_method(env_name: str, default_value = None, *args, **kwargs) -> Any
список методов, в целом, аналогичен environs
:
env.str
env.bool
env.int
env.float
env.decimal
env.list
(accepts optionalsubcast
anddelimiter
keyword arguments)env.json
(casts to aJSON object
)env.datetime
(uses fromisoformat() method)env.date
(uses fromisoformat() method)env.time
(uses fromisoformat() method)env.timedelta
(assumes value is an int\float in seconds)env.timestamp
(assumes value is an int\float in seconds)env.url
(recommended to specify the scheme)env.uuid
(assumes value is string of 36 char or 32 without dash; casts to aUUID object
)env.path
(casts to apathlib.Path
)