Skip to content

Commit 24bcca6

Browse files
committed
feat: Don't allow returning Any from result typed function
1 parent a97f5c1 commit 24bcca6

File tree

8 files changed

+55
-45
lines changed

8 files changed

+55
-45
lines changed

mypy.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ ignore_missing_imports = True
55
no_implicit_optional = True
66
show_error_codes = True
77
warn_redundant_casts = True
8+
warn_return_any = True

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/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:

pystac/stac_io.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,12 @@ def write_text(
7474
raise NotImplementedError("write_text not implemented")
7575

7676
def _json_loads(self, txt: str, source: Union[str, "Link_Type"]) -> Dict[str, Any]:
77+
result: Dict[str, Any]
7778
if orjson is not None:
78-
return orjson.loads(txt)
79+
result = orjson.loads(txt)
7980
else:
80-
return json.loads(txt)
81+
result = json.loads(txt)
82+
return result
8183

8284
def _json_dumps(
8385
self, json_dict: Dict[str, Any], source: Union[str, "Link_Type"]
@@ -181,15 +183,18 @@ def read_text(
181183

182184
def read_text_from_href(self, href: str, *args: Any, **kwargs: Any) -> str:
183185
parsed = urlparse(href)
186+
href_contents: str
184187
if parsed.scheme != "":
185188
try:
186189
with urlopen(href) as f:
187-
return f.read().decode("utf-8")
190+
href_contents = f.read().decode("utf-8")
188191
except HTTPError as e:
189192
raise Exception("Could not read uri {}".format(href)) from e
190193
else:
191194
with open(href) as f:
192-
return f.read()
195+
href_contents = f.read()
196+
197+
return href_contents
193198

194199
def write_text(
195200
self, dest: Union[str, "Link_Type"], txt: str, *args: Any, **kwargs: Any
@@ -225,9 +230,10 @@ class DuplicateKeyReportingMixin(StacIO):
225230
"""
226231

227232
def _json_loads(self, txt: str, source: Union[str, "Link_Type"]) -> Dict[str, Any]:
228-
return json.loads(
233+
result: Dict[str, Any] = json.loads(
229234
txt, object_pairs_hook=self.duplicate_object_names_report_builder(source)
230235
)
236+
return result
231237

232238
@staticmethod
233239
def duplicate_object_names_report_builder(
@@ -349,7 +355,8 @@ def read_json(cls, uri: str) -> Dict[str, Any]:
349355
STAC_IO in order to enable additional URI types, replace that member
350356
with your own implementation.
351357
"""
352-
return json.loads(STAC_IO.read_text(uri))
358+
result: Dict[str, Any] = json.loads(STAC_IO.read_text(uri))
359+
return result
353360

354361
@classmethod
355362
def read_stac_object(

tests/test_item.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class ItemTest(unittest.TestCase):
1818
def get_example_item_dict(self) -> Dict[str, Any]:
1919
m = TestCases.get_path("data-files/item/sample-item.json")
2020
with open(m) as f:
21-
item_dict = json.load(f)
21+
item_dict: Dict[str, Any] = json.load(f)
2222
return item_dict
2323

2424
def test_to_from_dict(self) -> None:

0 commit comments

Comments
 (0)