Skip to content

Commit

Permalink
Start applying ruff (#1371)
Browse files Browse the repository at this point in the history
Start applying ruff, to replace black
  • Loading branch information
cthoyt authored Jan 30, 2025
1 parent fedaae7 commit f0a1f0f
Show file tree
Hide file tree
Showing 124 changed files with 1,003 additions and 1,215 deletions.
9 changes: 5 additions & 4 deletions notebooks/Bioregistry Taxonomy Curation via Wikidata.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,14 @@
"source": [
"# Get wikidata taxonomy properties\n",
"\n",
"import bioregistry\n",
"import bioregistry.version\n",
"import requests\n",
"import pandas as pd\n",
"from bioregistry.utils import norm, query_wikidata\n",
"import requests\n",
"from bs4 import BeautifulSoup\n",
"\n",
"import bioregistry\n",
"import bioregistry.version\n",
"from bioregistry.utils import query_wikidata\n",
"\n",
"pd.set_option(\"display.max_rows\", None)"
]
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,9 +107,10 @@
}
],
"source": [
"import bioregistry.pandas as brpd\n",
"import pandas as pd\n",
"\n",
"import bioregistry.pandas as brpd\n",
"\n",
"# Focus on these columns when displaying the data\n",
"columns = [0, 1, 4, 5, 7, 12]\n",
"\n",
Expand Down
4 changes: 3 additions & 1 deletion setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,9 @@ exclude =
.eggs,
data
per-file-ignores =
src/bioregistry/app/api.py:B008
src/bioregistry/app/api.py:B008,DAR101,DAR201
src/bioregistry/app/ui.py:DAR101,DAR201
src/bioregistry/app/app.py:DAR101,DAR201
max-line-length = 120
max-complexity = 20
import-order-style = pycharm
Expand Down
2 changes: 0 additions & 2 deletions src/bioregistry/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
# -*- coding: utf-8 -*-

"""Extract registry information."""

from .collection_api import get_collection, get_context # noqa:F401
Expand Down
2 changes: 0 additions & 2 deletions src/bioregistry/__main__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
# -*- coding: utf-8 -*-

"""Command line interface for the bioregistry."""

from .cli import main # type:ignore
Expand Down
2 changes: 0 additions & 2 deletions src/bioregistry/analysis/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1 @@
# -*- coding: utf-8 -*-

"""Analyses build on the Bioregistry."""
14 changes: 9 additions & 5 deletions src/bioregistry/analysis/paper_ranking.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
from collections import defaultdict
from collections.abc import Iterable
from pathlib import Path
from typing import Any, NamedTuple, Optional, Union
from typing import Any, NamedTuple, Union

import click
import numpy as np
Expand Down Expand Up @@ -55,7 +55,10 @@
DIRECTORY = ROOT.joinpath("exports", "analyses", "paper_ranking")
DIRECTORY.mkdir(exist_ok=True, parents=True)

URL = "https://docs.google.com/spreadsheets/d/e/2PACX-1vRPtP-tcXSx8zvhCuX6fqz_QvHowyAoDahnkixARk9rFTe0gfBN9GfdG6qTNQHHVL0i33XGSp_nV9XM/pub?output=csv"
URL = (
"https://docs.google.com/spreadsheets/d/e/2PACX-1vRPtP-tcXSx8zvhCuX6fqz_QvHowyAoDahnk"
"ixARk9rFTe0gfBN9GfdG6qTNQHHVL0i33XGSp_nV9XM/pub?output=csv"
)

XTrain: TypeAlias = NDArray[np.float64]
YTrain: TypeAlias = NDArray[np.float64]
Expand All @@ -74,7 +77,7 @@
]


def get_publications_from_bioregistry(path: Optional[Path] = None) -> pd.DataFrame:
def get_publications_from_bioregistry(path: Path | None = None) -> pd.DataFrame:
"""Load bioregistry data from a JSON file, extracting publication details and fetching abstracts if missing.
:param path: Path to the bioregistry JSON file.
Expand Down Expand Up @@ -129,7 +132,7 @@ def load_curated_papers(file_path: Path = CURATED_PAPERS_PATH) -> pd.DataFrame:
return curated_df


def _get_metadata_for_ids(pubmed_ids: Iterable[Union[int, str]]) -> dict[str, dict[str, Any]]:
def _get_metadata_for_ids(pubmed_ids: Iterable[int | str]) -> dict[str, dict[str, Any]]:
"""Get metadata for articles in PubMed, wrapping the INDRA client."""
from indra.literature import pubmed_client

Expand Down Expand Up @@ -225,7 +228,7 @@ def load_google_curation_df() -> pd.DataFrame:
return df


def _map_labels(s: str) -> Optional[int]:
def _map_labels(s: str) -> int | None:
"""Map labels to binary values.
:param s: Label value.
Expand Down Expand Up @@ -267,6 +270,7 @@ def generate_meta_features(
:param classifiers: List of trained classifiers.
:param x_train: Training features.
:param y_train: Training labels.
:param cv: Number of folds for cross-validation
:return: DataFrame containing meta-features.
"""
df = pd.DataFrame()
Expand Down
2 changes: 0 additions & 2 deletions src/bioregistry/app/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1 @@
# -*- coding: utf-8 -*-

"""Web application for the Bioregistry."""
49 changes: 24 additions & 25 deletions src/bioregistry/app/api.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
# -*- coding: utf-8 -*-

"""FastAPI blueprint and routes."""

from __future__ import annotations

from typing import Any, List, Mapping, Optional, Set
from collections.abc import Mapping
from typing import Any

import yaml
from curies import Reference
Expand Down Expand Up @@ -84,7 +83,7 @@ def render(self, content: Any) -> bytes:
}


def _handle_formats(accept: Optional[str], fmt: Optional[str]) -> str:
def _handle_formats(accept: str | None, fmt: str | None) -> str:
if fmt:
if fmt not in FORMAT_MAP:
raise HTTPException(
Expand All @@ -104,8 +103,8 @@ def _handle_formats(accept: Optional[str], fmt: Optional[str]) -> str:
@api_router.get("/registry", response_model=Mapping[str, Resource], tags=["resource"])
def get_resources(
request: Request,
accept: Optional[str] = ACCEPT_HEADER,
format: Optional[str] = FORMAT_QUERY,
accept: str | None = ACCEPT_HEADER,
format: str | None = FORMAT_QUERY,
):
"""Get all resources."""
accept = _handle_formats(accept, format)
Expand Down Expand Up @@ -169,8 +168,8 @@ def get_resource(
)
def get_metaresources(
request: Request,
accept: Optional[str] = ACCEPT_HEADER,
format: Optional[str] = FORMAT_QUERY,
accept: str | None = ACCEPT_HEADER,
format: str | None = FORMAT_QUERY,
):
"""Get all registries."""
accept = _handle_formats(accept, format)
Expand Down Expand Up @@ -262,8 +261,8 @@ class MappingResponseMeta(BaseModel):
target: str
len_source_only: int
len_target_only: int
source_only: List[str]
target_only: List[str]
source_only: list[str]
target_only: list[str]


class MappingResponse(BaseModel):
Expand Down Expand Up @@ -320,8 +319,8 @@ def get_metaresource_mappings(request: Request, metaprefix: str = METAPREFIX_PAT
@api_router.get("/collection", response_model=Mapping[str, Collection], tags=["collection"])
def get_collections(
request: Request,
accept: Optional[str] = ACCEPT_HEADER,
format: Optional[str] = FORMAT_QUERY,
accept: str | None = ACCEPT_HEADER,
format: str | None = FORMAT_QUERY,
):
"""Get all collections."""
accept = _handle_formats(accept, format)
Expand Down Expand Up @@ -357,8 +356,8 @@ def get_collection(
description="The 7-digit collection identifier",
examples=["0000001"],
),
accept: Optional[str] = ACCEPT_HEADER,
format: Optional[str] = FORMAT_QUERY,
accept: str | None = ACCEPT_HEADER,
format: str | None = FORMAT_QUERY,
):
"""Get a collection."""
manager = request.app.manager
Expand Down Expand Up @@ -388,8 +387,8 @@ def get_collection(
@api_router.get("/context", response_model=Mapping[str, Context], tags=["context"])
def get_contexts(
request: Request,
accept: Optional[str] = ACCEPT_HEADER,
format: Optional[str] = FORMAT_QUERY,
accept: str | None = ACCEPT_HEADER,
format: str | None = FORMAT_QUERY,
):
"""Get all context."""
accept = _handle_formats(accept, format)
Expand All @@ -416,8 +415,8 @@ def get_context(
@api_router.get("/contributors", response_model=Mapping[str, Attributable], tags=["contributor"])
def get_contributors(
request: Request,
accept: Optional[str] = ACCEPT_HEADER,
format: Optional[str] = FORMAT_QUERY,
accept: str | None = ACCEPT_HEADER,
format: str | None = FORMAT_QUERY,
):
"""Get all context."""
contributors = request.app.manager.read_contributors()
Expand All @@ -434,11 +433,11 @@ class ContributorResponse(BaseModel):
"""A response with information about a contributor."""

contributor: Attributable
prefix_contributions: Set[str]
prefix_reviews: Set[str]
prefix_contacts: Set[str]
registries: Set[str]
collections: Set[str]
prefix_contributions: set[str]
prefix_reviews: set[str]
prefix_contacts: set[str]
registries: set[str]
collections: set[str]


@api_router.get("/contributor/{orcid}", response_model=ContributorResponse, tags=["contributor"])
Expand Down Expand Up @@ -547,7 +546,7 @@ def post_parse_uri(
@api_router.get("/context.jsonld", tags=["resource"])
def generate_context_json_ld(
request: Request,
prefix: List[str] = Query(description="The prefix for the entry. Can be given multiple."),
prefix: list[str] = Query(description="The prefix for the entry. Can be given multiple."),
):
"""Generate an *ad-hoc* context JSON-LD file from the given parameters.
Expand All @@ -558,7 +557,7 @@ def generate_context_json_ld(
or you can use multiple entries for "prefix" like:
https://bioregistry.io/api/context.jsonld?prefix=go&prefix=doid&prefix=oa
""" # noqa:DAR101,DAR201
"""
manager = request.app.manager
prefix_map = {}
for value in prefix:
Expand Down
2 changes: 0 additions & 2 deletions src/bioregistry/app/cli.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
# -*- coding: utf-8 -*-

"""Web command for running the app."""

from pathlib import Path
Expand Down
2 changes: 0 additions & 2 deletions src/bioregistry/app/constants.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
# -*- coding: utf-8 -*

"""Large data chunks for the web app."""

from bioregistry import version
Expand Down
3 changes: 2 additions & 1 deletion src/bioregistry/app/impl.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
"""App builder interface."""

import json
from collections.abc import Mapping
from pathlib import Path
from textwrap import dedent
from typing import TYPE_CHECKING, Any, Mapping, Optional, Union
from typing import TYPE_CHECKING, Any, Optional, Union

from a2wsgi import WSGIMiddleware
from curies.mapping_service import MappingServiceGraph, MappingServiceSPARQLProcessor
Expand Down
2 changes: 0 additions & 2 deletions src/bioregistry/app/test.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
# -*- coding: utf-8 -*-

"""Test the resolution API."""

import sys
Expand Down
33 changes: 15 additions & 18 deletions src/bioregistry/app/ui.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
# -*- coding: utf-8 -*-

"""User blueprint for the bioregistry web application."""

from __future__ import annotations
Expand All @@ -11,7 +9,6 @@
from collections import defaultdict
from operator import attrgetter
from pathlib import Path
from typing import Optional

import flask
import werkzeug
Expand Down Expand Up @@ -137,15 +134,15 @@ def resource(prefix: str) -> str | flask.Response:
example_curie=example_curie,
example_curie_extras=example_curie_extras,
mappings=[
dict(
metaprefix=metaprefix,
metaresource=manager.get_registry(metaprefix),
xref=xref,
homepage=manager.get_registry_homepage(metaprefix),
name=manager.get_registry_name(metaprefix),
short_name=manager.get_registry_short_name(metaprefix),
uri=manager.get_registry_provider_uri_format(metaprefix, xref),
)
{
"metaprefix": metaprefix,
"metaresource": manager.get_registry(metaprefix),
"xref": xref,
"homepage": manager.get_registry_homepage(metaprefix),
"name": manager.get_registry_name(metaprefix),
"short_name": manager.get_registry_short_name(metaprefix),
"uri": manager.get_registry_provider_uri_format(metaprefix, xref),
}
for metaprefix, xref in _resource.get_mappings().items()
],
synonyms=_resource.get_synonyms(),
Expand Down Expand Up @@ -194,7 +191,7 @@ def metaresource(metaprefix: str) -> str | flask.Response:
return serialize_model(entry, metaresource_to_rdf_str, negotiate=True)

external_prefix = entry.example
bioregistry_prefix: Optional[str]
bioregistry_prefix: str | None
if metaprefix == "bioregistry":
bioregistry_prefix = external_prefix
else:
Expand Down Expand Up @@ -309,7 +306,7 @@ def get_value(self):
return self.response


def _clean_reference(prefix: str, identifier: Optional[str] = None):
def _clean_reference(prefix: str, identifier: str | None = None):
if ":" in prefix:
# A colon might appear in the prefix if there are multiple colons
# in the CURIE, since Flask/Werkzeug parses from right to left.
Expand Down Expand Up @@ -375,7 +372,7 @@ def reference(prefix: str, identifier: str) -> str:
@ui_blueprint.route("/<prefix>:<path:identifier>")
@ark_hacked_route
def resolve(
prefix: str, identifier: Optional[str] = None
prefix: str, identifier: str | None = None
) -> str | werkzeug.Response | tuple[str, int]:
"""Resolve a CURIE.
Expand All @@ -384,7 +381,7 @@ def resolve(
1. The prefix is not registered
2. The prefix has a validation pattern and the identifier does not match it
3. There are no providers available for the URL
""" # noqa:DAR101,DAR201
"""
try:
_resource, identifier = _clean_reference(prefix, identifier)
except ResponseWrapper as rw:
Expand Down Expand Up @@ -420,14 +417,14 @@ def resolve(

@ui_blueprint.route("/metaregistry/<metaprefix>/<metaidentifier>")
@ui_blueprint.route("/metaregistry/<metaprefix>/<metaidentifier>:<path:identifier>")
def metaresolve(metaprefix: str, metaidentifier: str, identifier: Optional[str] = None):
def metaresolve(metaprefix: str, metaidentifier: str, identifier: str | None = None):
"""Redirect to a prefix page or meta-resolve the CURIE.
Test this function locally with:
- http://localhost:5000/metaregistry/obofoundry/GO
- http://localhost:5000/metaregistry/obofoundry/GO:0032571
""" # noqa:DAR101,DAR201
"""
if metaprefix not in manager.metaregistry:
return abort(404, f"invalid metaprefix: {metaprefix}")
prefix = manager.lookup_from(metaprefix, metaidentifier, normalize=True)
Expand Down
Loading

0 comments on commit f0a1f0f

Please sign in to comment.