Skip to content

Commit

Permalink
Merge pull request #94 from csdms/mcflugen/add-annotations
Browse files Browse the repository at this point in the history
Add type annotations
  • Loading branch information
mcflugen authored Mar 20, 2024
2 parents d4800a1 + 732aa55 commit 791e0b2
Show file tree
Hide file tree
Showing 15 changed files with 187 additions and 142 deletions.
1 change: 1 addition & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,5 @@ repos:
hooks:
- id: mypy
additional_dependencies: [types-all]
files: babelizer/.*\.py$
exclude: ^babelizer/data
2 changes: 2 additions & 0 deletions babelizer/_datadir.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

import sys

if sys.version_info >= (3, 12): # pragma: no cover (PY12+)
Expand Down
38 changes: 16 additions & 22 deletions babelizer/_files/bmi_py.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
from __future__ import annotations

import os
from collections.abc import Mapping
from typing import Any


def render(plugin_metadata) -> str:
def render(plugin_metadata: Mapping[str, Any]) -> str:
"""Render _bmi.py."""
languages = {
library["language"] for library in plugin_metadata._meta["library"].values()
}
languages = {library["language"] for library in plugin_metadata["library"].values()}
assert len(languages) == 1
language = languages.pop()

Expand All @@ -15,22 +17,18 @@ def render(plugin_metadata) -> str:
return _render_bmi_c(plugin_metadata)


def _render_bmi_c(plugin_metadata) -> str:
def _render_bmi_c(plugin_metadata: Mapping[str, Any]) -> str:
"""Render _bmi.py for a non-python library."""
languages = [
library["language"] for library in plugin_metadata._meta["library"].values()
]
languages = [library["language"] for library in plugin_metadata["library"].values()]
language = languages[0]
assert language in ("c", "c++", "fortran")

imports = [
f"from {plugin_metadata.get('package', 'name')}.lib import {cls}"
for cls in plugin_metadata._meta["library"]
f"from {plugin_metadata['package']['name']}.lib import {cls}"
for cls in plugin_metadata["library"]
]

names = [
f" {cls!r},".replace("'", '"') for cls in plugin_metadata._meta["library"]
]
names = [f" {cls!r},".replace("'", '"') for cls in plugin_metadata["library"]]

return f"""\
{os.linesep.join(sorted(imports))}
Expand All @@ -41,11 +39,9 @@ def _render_bmi_c(plugin_metadata) -> str:
"""


def _render_bmi_py(plugin_metadata) -> str:
def _render_bmi_py(plugin_metadata: Mapping[str, Any]) -> str:
"""Render _bmi.py for a python library."""
languages = [
library["language"] for library in plugin_metadata._meta["library"].values()
]
languages = [library["language"] for library in plugin_metadata["library"].values()]
language = languages[0]
assert language == "python"

Expand All @@ -60,7 +56,7 @@ def _render_bmi_py(plugin_metadata) -> str:

imports = [
f"from {component['library']} import {component['entry_point']} as {cls}"
for cls, component in plugin_metadata._meta["library"].items()
for cls, component in plugin_metadata["library"].items()
]

rename = [
Expand All @@ -70,12 +66,10 @@ def _render_bmi_py(plugin_metadata) -> str:
""".replace(
"'", '"'
)
for cls in plugin_metadata._meta["library"]
for cls in plugin_metadata["library"]
]

names = [
f" {cls!r},".replace("'", '"') for cls in plugin_metadata._meta["library"]
]
names = [f" {cls!r},".replace("'", '"') for cls in plugin_metadata["library"]]

return f"""\
{header}
Expand Down
6 changes: 5 additions & 1 deletion babelizer/_files/gitignore.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
from __future__ import annotations

import os
from collections.abc import Mapping
from typing import Any


def render(plugin_metadata) -> str:
def render(plugin_metadata: Mapping[str, Any]) -> str:
"""Render a .gitignore file."""
package_name = plugin_metadata["package"]["name"]

Expand Down
15 changes: 8 additions & 7 deletions babelizer/_files/init_py.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
from __future__ import annotations

import os
from collections.abc import Mapping
from typing import Any


def render(plugin_metadata) -> str:
def render(plugin_metadata: Mapping[str, Any]) -> str:
"""Render __init__.py."""
package_name = plugin_metadata.get("package", "name")
package_name = plugin_metadata["package"]["name"]

imports = [f"from {package_name}._version import __version__"]
imports += [
f"from {package_name}._bmi import {cls}"
for cls in plugin_metadata._meta["library"]
f"from {package_name}._bmi import {cls}" for cls in plugin_metadata["library"]
]

names = [
f" {cls!r},".replace("'", '"') for cls in plugin_metadata._meta["library"]
]
names = [f" {cls!r},".replace("'", '"') for cls in plugin_metadata["library"]]

return f"""\
{os.linesep.join(sorted(imports))}
Expand Down
14 changes: 8 additions & 6 deletions babelizer/_files/lib_init_py.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
from __future__ import annotations

import os
from collections.abc import Mapping
from typing import Any


def render(plugin_metadata) -> str:
def render(plugin_metadata: Mapping[str, Any]) -> str:
"""Render lib/__init__.py."""
package_name = plugin_metadata.get("package", "name")
package_name = plugin_metadata["package"]["name"]
imports = [
f"from {package_name}.lib.{cls.lower()} import {cls}"
for cls in plugin_metadata._meta["library"]
for cls in plugin_metadata["library"]
]

names = [
f" {cls!r},".replace("'", '"') for cls in plugin_metadata._meta["library"]
]
names = [f" {cls!r},".replace("'", '"') for cls in plugin_metadata["library"]]

return f"""\
{os.linesep.join(sorted(imports))}
Expand Down
6 changes: 5 additions & 1 deletion babelizer/_files/license_rst.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
from __future__ import annotations

from collections.abc import Mapping
from datetime import datetime
from typing import Any


def render(plugin_metadata) -> str:
def render(plugin_metadata: Mapping[str, Any]) -> str:
"""Render LICENSE.rst."""
license_name = plugin_metadata["info"]["package_license"]
kwds = {
Expand Down
4 changes: 3 additions & 1 deletion babelizer/_files/meson_build.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

import os
from collections import defaultdict
from collections.abc import Iterable
Expand Down Expand Up @@ -60,7 +62,7 @@ def render(paths: Iterable[str], install: Iterable[str] = ()) -> str:
return (2 * os.linesep).join(contents)


def _render_install_block(install: Iterable[str]):
def _render_install_block(install: Iterable[str]) -> str:
install_sources = defaultdict(list)
for root, fname in (os.path.split(src) for src in install):
install_sources[root].append(fname)
Expand Down
6 changes: 5 additions & 1 deletion babelizer/_files/readme.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
from __future__ import annotations

from typing import Any

from jinja2 import Environment
from jinja2 import FileSystemLoader

from babelizer._datadir import get_datadir


def render(context):
def render(context: dict[str, Any]) -> str:
env = Environment(loader=FileSystemLoader(get_datadir()))
template = env.get_template("{{cookiecutter.package_name}}/README.rst")

Expand Down
Loading

0 comments on commit 791e0b2

Please sign in to comment.