Skip to content

Commit d4617b2

Browse files
authored
Use explicit typing.Optional (#177)
close #171
1 parent b9871ed commit d4617b2

3 files changed

Lines changed: 22 additions & 6 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ Bug fixes:
4040
Other changes:
4141

4242
- Test against Python 3.9.
43+
- Remove usage of implicit `typing.Optional` ([171](https://github.com/sloria/environs/issues/171)).
4344

4445
## 8.0.0 (2020-05-27)
4546

environs/__init__.py

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,14 @@ class ParserConflictError(ValueError):
6161

6262

6363
def _field2method(
64-
field_or_factory: FieldOrFactory, method_name: str, *, preprocess: typing.Callable = None
64+
field_or_factory: FieldOrFactory, method_name: str, *, preprocess: typing.Optional[typing.Callable] = None
6565
) -> ParserMethod:
6666
def method(
67-
self: "Env", name: str, default: typing.Any = ma.missing, subcast: Subcast = None, **kwargs
67+
self: "Env",
68+
name: str,
69+
default: typing.Any = ma.missing,
70+
subcast: typing.Optional[Subcast] = None,
71+
**kwargs
6872
) -> typing.Union[_T, _Missing]:
6973
if self._sealed:
7074
raise EnvSealedError("Env has already been sealed. New values cannot be parsed.")
@@ -106,7 +110,11 @@ def method(
106110

107111
def _func2method(func: typing.Callable, method_name: str) -> ParserMethod:
108112
def method(
109-
self: "Env", name: str, default: typing.Any = ma.missing, subcast: typing.Type = None, **kwargs
113+
self: "Env",
114+
name: str,
115+
default: typing.Any = ma.missing,
116+
subcast: typing.Optional[typing.Type] = None,
117+
**kwargs
110118
):
111119
if self._sealed:
112120
raise EnvSealedError("Env has already been sealed. New values cannot be parsed.")
@@ -171,7 +179,7 @@ def _preprocess_dict(
171179
value: typing.Union[str, typing.Mapping],
172180
# TODO: Rename subcast to subcast_values and re-order arguments for next major release
173181
subcast: Subcast,
174-
subcast_key: Subcast = None,
182+
subcast_key: typing.Optional[Subcast] = None,
175183
**kwargs
176184
) -> typing.Mapping:
177185
if isinstance(value, Mapping):
@@ -239,7 +247,13 @@ def _serialize(self, value: ParseResult, *args, **kwargs) -> str:
239247

240248
# Override deserialize rather than _deserialize because we need
241249
# to call urlparse *after* validation has occurred
242-
def deserialize(self, value: str, attr: str = None, data: typing.Mapping = None, **kwargs) -> ParseResult:
250+
def deserialize(
251+
self,
252+
value: str,
253+
attr: typing.Optional[str] = None,
254+
data: typing.Optional[typing.Mapping] = None,
255+
**kwargs
256+
) -> ParseResult:
243257
ret = super().deserialize(value, attr, data, **kwargs)
244258
return urlparse(ret)
245259

@@ -301,7 +315,7 @@ def __repr__(self) -> _StrType:
301315

302316
@staticmethod
303317
def read_env(
304-
path: _StrType = None,
318+
path: typing.Optional[_StrType] = None,
305319
recurse: _BoolType = True,
306320
verbose: _BoolType = False,
307321
override: _BoolType = False,

setup.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,4 @@ ignore_missing_imports = true
1212
warn_unreachable = true
1313
warn_unused_ignores = true
1414
warn_redundant_casts = true
15+
no_implicit_optional = true

0 commit comments

Comments
 (0)