Skip to content

Commit 4658999

Browse files
author
Jon Duckworth
authored
Merge pull request #394 from l0b0/improve-mypy-strictness
Improve mypy strictness
2 parents ace4ba2 + 9293326 commit 4658999

File tree

19 files changed

+109
-98
lines changed

19 files changed

+109
-98
lines changed

mypy.ini

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
[mypy]
2+
disallow_any_generics = True
23
disallow_untyped_defs = True
34
ignore_missing_imports = True
5+
no_implicit_optional = True
46
show_error_codes = True
7+
warn_redundant_casts = True
8+
warn_return_any = True
9+
warn_unused_ignores = True

pystac/__init__.py

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,36 +4,36 @@
44

55
# flake8: noqa
66
from pystac.errors import (
7-
STACError, # type:ignore
8-
STACTypeError, # type:ignore
9-
ExtensionAlreadyExistsError, # type:ignore
10-
ExtensionTypeError, # type:ignore
11-
RequiredPropertyMissing, # type:ignore
12-
STACValidationError, # type:ignore
7+
STACError,
8+
STACTypeError,
9+
ExtensionAlreadyExistsError,
10+
ExtensionTypeError,
11+
RequiredPropertyMissing,
12+
STACValidationError,
1313
)
1414

1515
from typing import Any, Dict, Optional
1616
from pystac.version import (
1717
__version__,
18-
get_stac_version, # type:ignore
19-
set_stac_version, # type:ignore
18+
get_stac_version,
19+
set_stac_version,
2020
)
21-
from pystac.media_type import MediaType # type:ignore
22-
from pystac.rel_type import RelType # type: ignore
23-
from pystac.stac_io import StacIO # type:ignore
24-
from pystac.stac_object import STACObject, STACObjectType # type:ignore
25-
from pystac.link import Link, HIERARCHICAL_LINKS # type:ignore
26-
from pystac.catalog import Catalog, CatalogType # type:ignore
21+
from pystac.media_type import MediaType
22+
from pystac.rel_type import RelType
23+
from pystac.stac_io import StacIO
24+
from pystac.stac_object import STACObject, STACObjectType
25+
from pystac.link import Link, HIERARCHICAL_LINKS
26+
from pystac.catalog import Catalog, CatalogType
2727
from pystac.collection import (
28-
Collection, # type:ignore
29-
Extent, # type:ignore
30-
SpatialExtent, # type:ignore
31-
TemporalExtent, # type:ignore
32-
Provider, # type:ignore
33-
Summaries, # type:ignore
28+
Collection,
29+
Extent,
30+
SpatialExtent,
31+
TemporalExtent,
32+
Provider,
33+
Summaries,
3434
)
35-
from pystac.summaries import RangeSummary # type:ignore
36-
from pystac.item import Item, Asset, CommonMetadata # type:ignore
35+
from pystac.summaries import RangeSummary
36+
from pystac.item import Item, Asset, CommonMetadata
3737

3838
import pystac.validation
3939

pystac/catalog.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -798,7 +798,7 @@ def map_items(
798798
to the item_mapper function.
799799
"""
800800

801-
new_cat = cast(Catalog, self.full_copy())
801+
new_cat = self.full_copy()
802802

803803
def process_catalog(catalog: Catalog) -> None:
804804
for child in catalog.get_children():

pystac/extensions/base.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,14 @@ class PropertiesExtension(ABC):
5858
"""
5959

6060
def _get_property(self, prop_name: str, typ: Type[P]) -> Optional[P]:
61-
result = self.properties.get(prop_name)
62-
if result is not None:
63-
return result
61+
maybe_property: Optional[P] = self.properties.get(prop_name)
62+
if maybe_property is not None:
63+
return maybe_property
6464
if self.additional_read_properties is not None:
6565
for props in self.additional_read_properties:
66-
result = props.get(prop_name)
67-
if result is not None:
68-
return result
66+
maybe_additional_property: Optional[P] = props.get(prop_name)
67+
if maybe_additional_property is not None:
68+
return maybe_additional_property
6969
return None
7070

7171
def _set_property(

pystac/extensions/label.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,9 @@ def classes(self) -> Union[List[str], List[int], List[float]]:
9797
Returns:
9898
List[str] or List[int] or List[float]
9999
"""
100-
result = self.properties.get("classes")
100+
result: Optional[
101+
Union[List[str], List[int], List[float]]
102+
] = self.properties.get("classes")
101103
if result is None:
102104
raise pystac.STACError(
103105
f"LabelClasses does not contain classes property: {self.properties}"
@@ -179,7 +181,7 @@ def name(self) -> str:
179181
Returns:
180182
str
181183
"""
182-
result = self.properties.get("name")
184+
result: Optional[str] = self.properties.get("name")
183185
if result is None:
184186
raise pystac.STACError(
185187
f"Label count has no name property: {self.properties}"
@@ -197,7 +199,7 @@ def count(self) -> int:
197199
Returns:
198200
int
199201
"""
200-
result = self.properties.get("count")
202+
result: Optional[int] = self.properties.get("count")
201203
if result is None:
202204
raise pystac.STACError(
203205
f"Label count has no count property: {self.properties}"
@@ -255,7 +257,7 @@ def name(self) -> str:
255257
Returns:
256258
str
257259
"""
258-
result = self.properties.get("name")
260+
result: Optional[str] = self.properties.get("name")
259261
if result is None:
260262
raise pystac.STACError(
261263
f"Label statistics has no name property: {self.properties}"
@@ -273,7 +275,7 @@ def value(self) -> float:
273275
Returns:
274276
float
275277
"""
276-
result = self.properties.get("value")
278+
result: Optional[float] = self.properties.get("value")
277279
if result is None:
278280
raise pystac.STACError(
279281
f"Label statistics has no value property: {self.properties}"
@@ -529,7 +531,7 @@ def label_description(self) -> str:
529531
Returns:
530532
str
531533
"""
532-
result = self.obj.properties.get("label:description")
534+
result: Optional[str] = self.obj.properties.get("label:description")
533535
if result is None:
534536
raise pystac.STACError(f"label:description not set for item {self.obj.id}")
535537
return result

pystac/extensions/pointcloud.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ def size(self) -> int:
7272
Returns:
7373
int
7474
"""
75-
result = self.properties.get("size")
75+
result: Optional[int] = self.properties.get("size")
7676
if result is None:
7777
raise pystac.STACError(
7878
f"Pointcloud schema does not have size property: {self.properties}"
@@ -93,7 +93,7 @@ def name(self) -> str:
9393
Returns:
9494
str
9595
"""
96-
result = self.properties.get("name")
96+
result: Optional[str] = self.properties.get("name")
9797
if result is None:
9898
raise pystac.STACError(
9999
f"Pointcloud schema does not have name property: {self.properties}"
@@ -111,7 +111,7 @@ def type(self) -> str:
111111
Returns:
112112
str
113113
"""
114-
result = self.properties.get("type")
114+
result: Optional[str] = self.properties.get("type")
115115
if result is None:
116116
raise pystac.STACError(
117117
f"Pointcloud schema has no type property: {self.properties}"
@@ -226,7 +226,7 @@ def name(self) -> str:
226226
Returns:
227227
str
228228
"""
229-
result = self.properties.get("name")
229+
result: Optional[str] = self.properties.get("name")
230230
if result is None:
231231
raise pystac.STACError(
232232
f"Pointcloud statistics does not have name property: {self.properties}"

pystac/item.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,10 @@ def get_start_datetime(self, asset: Optional[Asset] = None) -> Optional[Datetime
8787
else:
8888
start_datetime = asset.properties.get("start_datetime")
8989

90-
if start_datetime:
91-
start_datetime = str_to_datetime(start_datetime)
90+
if start_datetime is None:
91+
return None
9292

93-
return start_datetime
93+
return str_to_datetime(start_datetime)
9494

9595
def set_start_datetime(
9696
self, start_datetime: Optional[Datetime], asset: Optional[Asset] = None
@@ -138,10 +138,10 @@ def get_end_datetime(self, asset: Optional[Asset] = None) -> Optional[Datetime]:
138138
else:
139139
end_datetime = asset.properties.get("end_datetime")
140140

141-
if end_datetime:
142-
end_datetime = str_to_datetime(end_datetime)
141+
if end_datetime is None:
142+
return None
143143

144-
return end_datetime
144+
return str_to_datetime(end_datetime)
145145

146146
def set_end_datetime(
147147
self, end_datetime: Optional[Datetime], asset: Optional[Asset] = None
@@ -231,10 +231,10 @@ def get_providers(self, asset: Optional[Asset] = None) -> Optional[List[Provider
231231
else:
232232
providers = asset.properties.get("providers")
233233

234-
if providers is not None:
235-
providers = [Provider.from_dict(d) for d in providers]
234+
if providers is None:
235+
return None
236236

237-
return providers
237+
return [Provider.from_dict(d) for d in providers]
238238

239239
def set_providers(
240240
self, providers: Optional[List[Provider]], asset: Optional[Asset] = None
@@ -494,10 +494,10 @@ def get_created(self, asset: Optional[Asset] = None) -> Optional[Datetime]:
494494
else:
495495
created = asset.properties.get("created")
496496

497-
if created:
498-
created = str_to_datetime(created)
497+
if created is None:
498+
return None
499499

500-
return created
500+
return str_to_datetime(created)
501501

502502
def set_created(
503503
self, created: Optional[Datetime], asset: Optional[Asset] = None
@@ -560,10 +560,10 @@ def get_updated(self, asset: Optional[Asset] = None) -> Optional[Datetime]:
560560
else:
561561
updated = asset.properties.get("updated")
562562

563-
if updated:
564-
updated = str_to_datetime(updated)
563+
if updated is None:
564+
return None
565565

566-
return updated
566+
return str_to_datetime(updated)
567567

568568
def set_updated(
569569
self, updated: Optional[Datetime], asset: Optional[Asset] = None

pystac/serialization/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
import pystac
55
from pystac.serialization.identify import (
6-
STACVersionRange, # type:ignore
6+
STACVersionRange,
77
identify_stac_object,
88
identify_stac_object_type,
99
)

pystac/serialization/common_properties.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ def merge_common_properties(
7171
(link for link in links if link["rel"] == pystac.RelType.COLLECTION), None
7272
)
7373
if collection_link is not None:
74-
collection_href = cast(Dict[str, Any], collection_link).get("href")
74+
collection_href = collection_link.get("href")
7575
if collection_href is not None:
7676
if json_href is not None:
7777
collection_href = make_absolute_href(collection_href, json_href)

pystac/serialization/identify.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,16 +52,16 @@ def __str__(self) -> str:
5252
return self.version_string
5353

5454
def __eq__(self, other: Any) -> bool:
55-
if type(other) is str:
56-
other = STACVersionID(other)
57-
return self.version_string == other.version_string
55+
if not isinstance(other, STACVersionID):
56+
other = STACVersionID(str(other))
57+
return str(self) == str(other)
5858

59-
def __ne__(self, other: Any) -> bool:
59+
def __ne__(self, other: object) -> bool:
6060
return not self.__eq__(other)
6161

62-
def __lt__(self, other: Any) -> bool:
63-
if type(other) is str:
64-
other = STACVersionID(other)
62+
def __lt__(self, other: object) -> bool:
63+
if not isinstance(other, STACVersionID):
64+
other = STACVersionID(str(other))
6565
if self.version_core < other.version_core:
6666
return True
6767
elif self.version_core > other.version_core:

0 commit comments

Comments
 (0)