aboutsummaryrefslogtreecommitdiffstats
path: root/python/fatcat_web
diff options
context:
space:
mode:
authorBryan Newbold <bnewbold@robocracy.org>2021-11-02 19:51:48 -0700
committerBryan Newbold <bnewbold@robocracy.org>2021-11-02 19:51:51 -0700
commit4c77bdb8d92523935454f1c406c954913f923c01 (patch)
tree2b2a1221cc78683afb9f18a87ccfd10ef0afbc64 /python/fatcat_web
parent3da07382d682a0c474ddc79f748a50ad2cc758cd (diff)
downloadfatcat-4c77bdb8d92523935454f1c406c954913f923c01.tar.gz
fatcat-4c77bdb8d92523935454f1c406c954913f923c01.zip
lint: resolve existing mypy type errors
Adds annotations and re-workes dataflow to satisfy existing mypy issues, without adding any additional type annotations to, eg, function signatures. There will probably be many more type errors when annotations are all added.
Diffstat (limited to 'python/fatcat_web')
-rw-r--r--python/fatcat_web/editing_routes.py3
-rw-r--r--python/fatcat_web/graphics.py18
-rw-r--r--python/fatcat_web/ref_routes.py33
-rw-r--r--python/fatcat_web/search.py16
4 files changed, 39 insertions, 31 deletions
diff --git a/python/fatcat_web/editing_routes.py b/python/fatcat_web/editing_routes.py
index 6dafd2f1..03668e1e 100644
--- a/python/fatcat_web/editing_routes.py
+++ b/python/fatcat_web/editing_routes.py
@@ -87,7 +87,7 @@ def generic_entity_delete_edit(
def generic_entity_delete_entity(
user_api, entity_type: str, editgroup_id: str, entity_ident: str
-) -> None:
+) -> EntityEdit:
try:
if entity_type == "container":
edit = user_api.delete_container(editgroup_id, entity_ident)
@@ -491,7 +491,6 @@ def generic_entity_delete(editgroup_id: Optional[str], entity_type: str, existin
abort(400)
# fetch entity (if set) or 404
- existing = None
existing_edit = None
if editgroup and existing_ident:
existing, existing_edit = generic_get_editgroup_entity(
diff --git a/python/fatcat_web/graphics.py b/python/fatcat_web/graphics.py
index c76408cd..82a0a577 100644
--- a/python/fatcat_web/graphics.py
+++ b/python/fatcat_web/graphics.py
@@ -1,4 +1,4 @@
-from typing import Dict, List, Tuple
+from typing import Any, Dict, List, Tuple
import pygal
from pygal.style import CleanStyle
@@ -12,17 +12,17 @@ def ia_coverage_histogram(rows: List[Tuple]) -> pygal.Graph:
"""
raw_years = [int(r[0]) for r in rows]
- years = dict()
+ years_dict = dict()
if raw_years:
for y in range(min(raw_years), max(raw_years) + 1):
- years[int(y)] = dict(year=int(y), available=0, missing=0)
+ years_dict[int(y)] = dict(year=int(y), available=0, missing=0)
for r in rows:
if r[1]:
- years[int(r[0])]["available"] = r[2]
+ years_dict[int(r[0])]["available"] = r[2]
else:
- years[int(r[0])]["missing"] = r[2]
+ years_dict[int(r[0])]["missing"] = r[2]
- years = sorted(years.values(), key=lambda x: x["year"])
+ years: List[Dict[str, Any]] = sorted(years_dict.values(), key=lambda x: x["year"])
CleanStyle.colors = ("green", "purple")
label_count = len(years)
@@ -39,9 +39,9 @@ def ia_coverage_histogram(rows: List[Tuple]) -> pygal.Graph:
# chart.title = "Perpetual Access Coverage"
chart.x_title = "Year"
# chart.y_title = "Releases"
- chart.x_labels = [str(y["year"]) for y in years]
- chart.add("via Fatcat", [y["available"] for y in years])
- chart.add("Missing", [y["missing"] for y in years])
+ chart.x_labels = [str(v["year"]) for v in years]
+ chart.add("via Fatcat", [v["available"] for v in years])
+ chart.add("Missing", [v["missing"] for v in years])
return chart
diff --git a/python/fatcat_web/ref_routes.py b/python/fatcat_web/ref_routes.py
index 6a5eb064..b45edf78 100644
--- a/python/fatcat_web/ref_routes.py
+++ b/python/fatcat_web/ref_routes.py
@@ -15,6 +15,7 @@ from fuzzycat.simple import close_fuzzy_biblio_matches, close_fuzzy_release_matc
from fatcat_tools.references import (
RefHits,
+ RefHitsEnriched,
enrich_inbound_refs,
enrich_outbound_refs,
get_inbound_refs,
@@ -30,11 +31,11 @@ from fatcat_web.forms import ReferenceMatchForm
def _refs_web(
direction, release_ident=None, work_ident=None, openlibrary_id=None, wikipedia_article=None
-) -> RefHits:
- offset = request.args.get("offset", "0")
- offset = max(0, int(offset)) if offset.isnumeric() else 0
- limit = request.args.get("limit", "30")
- limit = min(max(0, int(limit)), 100) if limit.isnumeric() else 30
+) -> RefHitsEnriched:
+ offset_arg = request.args.get("offset", "0")
+ offset: int = max(0, int(offset_arg)) if offset_arg.isnumeric() else 0
+ limit_arg = request.args.get("limit", "30")
+ limit: int = min(max(0, int(limit_arg)), 100) if limit_arg.isnumeric() else 30
if direction == "in":
hits = get_inbound_refs(
release_ident=release_ident,
@@ -44,10 +45,12 @@ def _refs_web(
offset=offset,
limit=limit,
)
- hits.result_refs = enrich_inbound_refs(
- hits.result_refs,
- fatcat_api_client=api,
- expand="container,files,webcaptures",
+ enriched_hits = hits.as_enriched(
+ enrich_inbound_refs(
+ hits.result_refs,
+ fatcat_api_client=api,
+ expand="container,files,webcaptures",
+ )
)
elif direction == "out":
hits = get_outbound_refs(
@@ -58,14 +61,16 @@ def _refs_web(
offset=offset,
limit=limit,
)
- hits.result_refs = enrich_outbound_refs(
- hits.result_refs,
- fatcat_api_client=api,
- expand="container,files,webcaptures",
+ enriched_hits = hits.as_enriched(
+ enrich_outbound_refs(
+ hits.result_refs,
+ fatcat_api_client=api,
+ expand="container,files,webcaptures",
+ )
)
else:
raise ValueError()
- return hits
+ return enriched_hits
@app.route("/release/<string(length=26):ident>/refs-in", methods=["GET"])
diff --git a/python/fatcat_web/search.py b/python/fatcat_web/search.py
index 5fc3f614..5e758fd0 100644
--- a/python/fatcat_web/search.py
+++ b/python/fatcat_web/search.py
@@ -6,7 +6,7 @@ the formal API)
import datetime
import sys
from dataclasses import dataclass
-from typing import Any, List, Optional
+from typing import Any, Dict, List, Optional
import elasticsearch
import elasticsearch_dsl.response
@@ -135,18 +135,22 @@ def wrap_es_execution(search: Search) -> Any:
# this is a "user" error
print("elasticsearch 400: " + str(e.info), file=sys.stderr)
description = None
+ assert isinstance(e.info, dict)
if e.info.get("error", {}).get("root_cause", {}):
description = str(e.info["error"]["root_cause"][0].get("reason"))
- raise FatcatSearchError(e.status_code, str(e.error), description)
+ raise FatcatSearchError(int(e.status_code), str(e.error), description)
except elasticsearch.exceptions.ConnectionError as e:
- raise FatcatSearchError(e.status_code, "ConnectionError: search engine not available")
+ raise FatcatSearchError(
+ int(e.status_code), "ConnectionError: search engine not available"
+ )
except elasticsearch.exceptions.TransportError as e:
# all other errors
print("elasticsearch non-200 status code: {}".format(e.info), file=sys.stderr)
description = None
+ assert isinstance(e.info, dict)
if e.info and e.info.get("error", {}).get("root_cause", {}):
description = str(e.info["error"]["root_cause"][0].get("reason"))
- raise FatcatSearchError(e.status_code, str(e.error), description)
+ raise FatcatSearchError(int(e.status_code), str(e.error), description)
return resp
@@ -285,7 +289,7 @@ def do_release_search(query: ReleaseQuery, deep_page_limit: int = 2000) -> Searc
)
-def get_elastic_container_random_releases(ident: str, limit=5) -> dict:
+def get_elastic_container_random_releases(ident: str, limit=5) -> List[Dict[str, Any]]:
"""
Returns a list of releases from the container.
"""
@@ -750,7 +754,7 @@ def get_elastic_preservation_by_date(query) -> List[dict]:
resp = wrap_es_execution(search)
buckets = resp.aggregations.date_preservation.buckets
- date_dicts = dict()
+ date_dicts: Dict[str, Dict[str, Any]] = dict()
this_date = start_date
while this_date <= end_date:
date_dicts[str(this_date)] = dict(