Bug fixes:
- Fix passing non-string default values to
Env.timedelta
(#369). Thanks tcleonard for reporting and thanks ddelange for the PR. - Fix
Env.read_env(recurse=True)
so that it returns as soon as a.env
file is found (#370). Thanks senese for the PR.
Features:
Features:
- Add
return_path
argument toEnv.read_env
to return the path of the parsed file (#362). Thanks senese for the suggestion and PR. NOTE: This is added as a backwards-compatible change that is scheduled to be removed in 12.0.0. The path will stored as an attribute ofEnv
.
Fixes:
- Prevent
DeprecationWarning
getting raised by marshmallow 3.21.0 (:issue:333
).
Other changes:
- Remove
subcast_key
argument ofenv.dict
. Usesubcast_keys
instead. - Bump minimum required marshmallow version to 3.13.0.
- Remove
missing
argument fromEnv
methods. Usedefault
instead. - Remove
subcast
argument fromEnv
methods that don't use it. - Backwards-incompatible: Remove
environs.__version__
variable. Useimportlib.metadata.version("environs")
instead.
Features:
Env.__repr__
andEnv.__str__
no longer display environment variables, to prevent accidental exfiltration of sensitive data (#292). Thanks mro-rhansen2 for the suggestion.
Bug fixes:
- Fix passing
None
as default toenv.list
(#298). Thanks lucas-bremond for reporting.
Features:
Features:
Other changes:
- Test against Python 3.12.
Features:
- Add
delimiter
argument toenv.dict
(#277). Thanks gregoiredx for the PR.
Other changes:
- Backwards-incompatible: Drop support for EOL Python 3.6 and 3.7.
- Test against Python 3.11.
- Migrate to setup.cfg. Thanks deronnax for the PR.
Features:
- Allow callables or custom marshmallow fields to be passed to
subcast
,subcast_keys
, andsubcast_values
. (#241). Thanks bvanelli for the PR.
Bug fixes:
- Address warning about passing metadata in newer versions of marshmallow.
Other changes:
- Test against Python 3.10.
Bug fixes:
- Fix
env.url
and other parsers that take field keyword arguments (#227). Thanks KochankovID for the PR.
Bug fixes:
- Allow default for
env.path
to be apathlib.Path
(#228). Thanks KochankovID for the PR.
Bug fixes:
- Fix compatibility with marshmallow>=3.13.0 so that no DeprecationWarnings are raised (#224).
Bug fixes:
Bug fixes:
Deprecations:
- Rename
subcast_key
argument ofenv.dict
tosubcast_keys
for consistency withsubcast_values
.subcast_key
is deprecated.
Features:
- Add time parser (#191).
Features:
Thanks tomgrin10 for the PRs.
Bug fixes:
- Loosen
ParserMethod
typing (#186 (comment)). Thanks hukkinj1 for the PR.
Other changes:
- When using deferred validation (
eager=False
), parser methods returnNone
for missing or invalid values. Note: This may break code that depended on parser methods returningmarshmallow.missing
, but this behavior was not documented nor tested and therefore is not considered public API.
- Backwards-incompatible: Rename
subcast
param ofenv.dict
tosubcast_values
for consistency withsubcast_keys
. - Backwards-incompatible: Remove variable proxying. Use variable expansion instead (see 8.1.0 release notes below) (#175).
- Backwards-incompatible: Drop support for marshmallow 2 and Python 3.5, which are both EOL (#174).
Features:
- Add support for variable expansion, e.g.
MY_VAR=${MY_OTHER_VAR:-mydefault}
(#164). Thanks gnarvaja for the PR.
Deprecations:
- Variable proxying using the
{{VAR}}
syntax is deprecated and will be removed in environs 9.0.0. Use variable expansion using${VAR}
instead.
# Before
export MAILGUN_LOGIN=sloria
export SMTP_LOGIN={{MAILGUN_LOGIN}}
# After
export MAILGUN_LOGIN=sloria
export SMTP_LOGIN=${MAILGUN_LOGIN}
from environs import Env
env = Env(expand_vars=True)
SMTP_LOGIN = env.str("SMTP_LOGIN") # => 'sloria'
Bug fixes:
- Fix deferred validation behavior for
dj_db_url
,dj_email_url
,dj_cache_url
, and custom parsers (#121). Thanks hukkinj1 for reporting.
Other changes:
- Test against Python 3.9.
- Remove usage of implicit
typing.Optional
(171).
Bug fixes:
- Fix behavior of recurse=True when custom filepath is passed to
env.read_env
(#100). Thanks ribeaud and timoklimmer for the help.
Other changes:
- Backwards-incompatible: As a result of the above fix, passing a directory to
env.read_env
is no longer allowed and will raise aValueError
. Only file paths or file names should be passed.
- Fix error when parsing empty list with subcast #137. Thanks [sabdouni] for the catch and patch.
log_level
accepts lower-cased log level names and rejects invalid names (#138). Thanks gnarvaja for the PR.
- Add
dj_cache_url
for caching Django cache URLs (requires installing with[django]
) (#126). Thanks epicserve for the suggestion and PR.
- Improve typings and run mypy with dependencies type annotations (#115).
- Distribute types per PEP 561 (#116).
Thanks hukkinj1 for the PRs.
- Backwards-incompatible: Remove
stream
argument fromread_env
, since it had no effect (#114). - Backwards-incompatible:
Env.read_env
consistently returnsNone
(#111). - Remove unnecessary
__str__
definition (#112).
Thanks hukkinj1 for the PRs.
Features:
- Add deferred validation via the
eager
parameter andenv.seal()
(#56). Thanks robertlagrant for the suggestion.
Other changes:
- Test against Python 3.8 (#108).
Features:
- Default parser methods are now defined as bound methods. This enables static analysis features, e.g. autocomplete (#103). Thanks rugleb for the suggestion. Backwards-incompatible: As a result of this change, adding a parser name that is the same as an existing method will result in an error being raised.
import environs
env = environs.Env()
# Below conflicts with built-in `url` method.
# In <6.0.0, this would override the built-in method.
# In >=6.0.0, this raises an error:
# environs.ParserConflictError: Env already has a method with name 'url'. Use a different name.
@env.parser_for("url")
def https_url(value):
return "https://" + value
Bug fixes:
- Fix error message for prefixed variables (#102). Thanks AGeekInside for reporting.
Other changes:
- Backwards-incompatible: Rename
Env.__parser_map__
toEnv.__custom_parsers__
.
Bug fixes:
- Fix behavior when recursively searching for a specified file (#96). Thanks ribeaud for the catch and patch.
Changes:
- Improve typings.
Features:
- Add
env.log_level
(#7). - Use
raise from
to improve tracebacks.
Other changes:
- Improve typings.
Features:
Other changes:
- Backwards-incompatible: Drop support for Python 2. If you use Python 2, you will need to use version 4.2.0 or older.
- Minor optimization.
Bug fixes:
- Reset prefix when an exception is raised within an
env.prefixed()
context (#78). Thanks rcuza for the catch and patch.
Bug fixes:
Support:
- Document how to read a specific file with
env.read_env
(#66). Thanks nvtkaszpir and c-w.
Bug fixes:
- Fix compatibility with marshmallow 3.0.0>=rc6.
Bug fixes:
- Fix accessing proxied envvars when using
env.prefixed
(#72). Thanks Kamforka for the catch and patch. - Fix behavior when an envvar is explicitly set to an empty string (#71). Thanks twosigmajab for reporting and thanks hvtuananh for the PR.
EnvError
subclassesValueError
(#50). Thanks alexpirine.- Test against Python 3.7.
- Use python-dotenv for parsing .env files.
Env.read_env
behaves mostly the same except that a warning isn't raised by default if a .env file isn't found. Passverbose=True
to raise a warning.
Features:
- Backwards-incompatible:
Env.read_env
raises a warning instead of an error when.env
isn't found (#10). Thanks lachlancooper for the suggestion. - Add optional Django support. Install using
pip install environs[django]
, which enablesenv.dj_db_url
andenv.dj_email_url
.
Features:
- Fix compatibility with marshmallow 3 beta.
Features:
Features:
Other changes:
- Backwards-incompatible: Drop support for Python 3.3 and 3.4.
Features:
- Add
url
parser that returns aurllib.parse.ParseResult
(#6). Thanks IlyaSemenov for the suggestion.
Bug fixes:
- Every instance of
Env
gets its own parser map, so callingenv.parser_for
for one instance doesn't affect other instances.
- Add
Env.read_env
method for reading.env
files.
- Support for proxied variables (#2).
- Backwards-incompatible: Remove
env.get
method. Useenv()
instead. - Document how to read
.env
files (#1).
- First PyPI release.