Features:
Thanks tomgrin10 for the PRs.
Bug fixes:
- Loosen
ParserMethodtyping (#186 (comment)). Thanks hukkinj1 for the PR.
Other changes:
- When using deferred validation (
eager=False), parser methods returnNonefor 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
subcastparam ofenv.dicttosubcast_valuesfor 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_envis 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_levelaccepts lower-cased log level names and rejects invalid names (#138). Thanks gnarvaja for the PR.
- Add
dj_cache_urlfor 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
streamargument fromread_env, since it had no effect (#114). - Backwards-incompatible:
Env.read_envconsistently returnsNone(#111). - Remove unnecessary
__str__definition (#112).
Thanks hukkinj1 for the PRs.
Features:
- Add deferred validation via the
eagerparameter 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://" + valueBug 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 fromto 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.
EnvErrorsubclassesValueError(#50). Thanks alexpirine.- Test against Python 3.7.
- Use python-dotenv for parsing .env files.
Env.read_envbehaves mostly the same except that a warning isn't raised by default if a .env file isn't found. Passverbose=Trueto raise a warning.
Features:
- Backwards-incompatible:
Env.read_envraises a warning instead of an error when.envisn't found (#10). Thanks lachlancooper for the suggestion. - Add optional Django support. Install using
pip install environs[django], which enablesenv.dj_db_urlandenv.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
urlparser that returns aurllib.parse.ParseResult(#6). Thanks IlyaSemenov for the suggestion.
Bug fixes:
- Every instance of
Envgets its own parser map, so callingenv.parser_forfor one instance doesn't affect other instances.
- Add
Env.read_envmethod for reading.envfiles.
- Support for proxied variables (#2).
- Backwards-incompatible: Remove
env.getmethod. Useenv()instead. - Document how to read
.envfiles (#1).
- First PyPI release.