Skip to content

Commit

Permalink
👷 Add mypy and fix code for python<3.10
Browse files Browse the repository at this point in the history
  • Loading branch information
Raphael Krupinski committed Feb 2, 2024
1 parent 4ffd24d commit 90a579c
Show file tree
Hide file tree
Showing 11 changed files with 262 additions and 125 deletions.
16 changes: 8 additions & 8 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ repos:
pass_filenames: false
args:
- --check
#- repo: local
# hooks:
# - id: mypy
# name: mypy
# language: system
# types: [ python ]
# entry: poetry run mypy --explicit-package-bases -p lapidary
# pass_filenames: false
- repo: local
hooks:
- id: mypy
name: mypy
language: system
types: [ python ]
entry: poetry run mypy src
pass_filenames: false
286 changes: 194 additions & 92 deletions poetry.lock

Large diffs are not rendered by default.

24 changes: 20 additions & 4 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,20 @@ packages = [{ include = "rybak", from = "src" }]

[tool.poetry.dependencies]
python = ">=3.8,<4.0"
mako = { version = "^1.2.4", optional = true }
tornado = { version = "^6.3.3", optional = true }
jinja2 = { version = "^3.1.2", optional = true }
importlib-resources = { version = "^5.12", python = "<3.12" }
jinja2 = { version = "^3", optional = true }
mako = { version = "^1", optional = true }
tornado = { version = "^6", optional = true }
typing-extensions = {version = "^4.9.0", python = "<3.10"}

[tool.poetry.extras]
mako = ['mako']
jinja = ['jinja2']
tornado = ['tornado']

[tool.poetry.group.dev.dependencies]
pytest = "^7.4.3"
mypy = "^1.8.0"
pytest = "^8.0.0"


[build-system]
Expand Down Expand Up @@ -50,3 +53,16 @@ preview = true

[tool.ruff.format]
quote-style = 'single'


[tool.mypy]
mypy_path = "src"
namespace_packages = true
python_version = "3.8"
[[tool.mypy.overrides]]
module = [
"mako",
"mako.lookup",
"mako.template",
]
ignore_missing_imports = true
9 changes: 4 additions & 5 deletions src/rybak/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,22 @@
'render',
]

from collections.abc import Iterable
from importlib.abc import Traversable
from pathlib import Path
from typing import Any
from typing import Any, Iterable, Mapping, Optional, Type, Union

from ._types import TemplateData
from .adapter import RendererAdapter
from .pycompat import Traversable
from .tree_renderer import RenderContext, TreeRenderer


def render(
template_root: Traversable,
target_root: Path,
adapter: type[RendererAdapter] | RendererAdapter,
adapter: Union[Type[RendererAdapter], RendererAdapter],
data: TemplateData,
*,
renderer_args: dict[str, Any] | None = None,
renderer_args: Optional[Mapping[str, Any]] = None,
excluded: Iterable[Path] = (),
remove_suffixes: Iterable[str] = (),
) -> None:
Expand Down
4 changes: 3 additions & 1 deletion src/rybak/_types.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
from typing import Any, Callable, Iterable, Mapping, TypeAlias, TypeVar
from typing import Any, Callable, Iterable, Mapping, TypeVar

from .pycompat import TypeAlias

TemplateData: TypeAlias = Mapping[str, Any]

Expand Down
2 changes: 1 addition & 1 deletion src/rybak/adapter.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import abc
from importlib.resources.abc import Traversable
from pathlib import Path
from typing import Any

from ._types import LoopOverFn, TemplateData
from .pycompat import Traversable


class RendererAdapter(abc.ABC):
Expand Down
4 changes: 2 additions & 2 deletions src/rybak/jinja.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
from importlib.resources.abc import Traversable
from pathlib import Path
from typing import Any, Optional

import jinja2

from ._types import LoopOverFn, TemplateData
from .adapter import RendererAdapter
from .pycompat import Traversable


class JinjaAdapter(RendererAdapter):
Expand All @@ -19,7 +19,7 @@ def __init__(self, environment: Optional[jinja2.Environment] = None, **env_kwarg
**env_kwargs,
)

def render_str(self, template: str, data: TemplateData, loop_over: LoopOverFn | None = None) -> str:
def render_str(self, template: str, data: TemplateData, loop_over: Optional[LoopOverFn] = None) -> str:
env = self._env.overlay()
env.globals['loop_over'] = loop_over

Expand Down
9 changes: 5 additions & 4 deletions src/rybak/mako.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,24 @@
]

import functools
from importlib.resources.abc import Traversable
from pathlib import Path
from typing import Optional

import mako.lookup
import mako.template

from ._types import LoopOverFn, TemplateData
from .adapter import RendererAdapter
from .pycompat import Traversable


class MakoAdapter(RendererAdapter):
def __init__(self, template_root: Path) -> None:
self._loader = mako.lookup.TemplateLookup((template_root,))

def render_str(self, template: str, data: TemplateData, loop_over: LoopOverFn | None = None) -> str:
template = str_template(template)
return template.render(**data, loop_over=loop_over)
def render_str(self, template: str, data: TemplateData, loop_over: Optional[LoopOverFn] = None) -> str:
template_obj = str_template(template)
return template_obj.render(**data, loop_over=loop_over)

def render_file(self, template_path: Traversable, target_file: Path, data: TemplateData) -> None:
template = self._loader.get_template(str(template_path))
Expand Down
16 changes: 16 additions & 0 deletions src/rybak/pycompat.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
__all__ = [
'Traversable',
'TypeAlias',
]

import sys

if sys.version_info >= (3, 12):
from importlib.resources.abc import Traversable
else:
from importlib_resources.abc import Traversable

if sys.version_info >= (3, 10):
from typing import TypeAlias
else:
from typing_extensions import TypeAlias
9 changes: 5 additions & 4 deletions src/rybak/tornado.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,23 @@
'TornadoAdapter',
]

from importlib.resources.abc import Traversable
from pathlib import Path
from typing import Optional

import tornado.template

from ._types import LoopOverFn, TemplateData
from .adapter import RendererAdapter
from .pycompat import Traversable


class TornadoAdapter(RendererAdapter):
def __init__(self, template_root: Path) -> None:
self._loader = tornado.template.Loader(str(template_root))

def render_str(self, template: str, data: TemplateData, loop_over: LoopOverFn | None = None) -> str:
template = self.str_template(template)
return template.generate(**data, loop_over=loop_over).decode('UTF-8')
def render_str(self, template: str, data: TemplateData, loop_over: Optional[LoopOverFn] = None) -> str:
template_obj = self.str_template(template)
return template_obj.generate(**data, loop_over=loop_over).decode('UTF-8')

def render_file(self, template_path: Traversable, target_file: Path, data: TemplateData) -> None:
template = self._loader.load(str(template_path))
Expand Down
8 changes: 4 additions & 4 deletions src/rybak/tree_renderer.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
import logging
import os.path
from functools import cached_property
from importlib.abc import Traversable
from pathlib import Path
from typing import Iterable, Never
from typing import Iterable, NoReturn

from ._types import LoopOverFn, RenderFn, TemplateData
from .adapter import RendererAdapter
from .pycompat import Traversable

logger = logging.getLogger(__name__)

Expand All @@ -22,7 +22,7 @@ def __init__(self, items: Iterable) -> None:
self.items = items


def loop_over(items: Iterable) -> Never:
def loop_over(items: Iterable) -> NoReturn:
if isinstance(items, str):
raise TypeError('Expected an Iterable other than str')
if not isinstance(items, Iterable):
Expand All @@ -44,7 +44,7 @@ def __post_init__(self):


class TreeRenderer:
def __init__(self, context: RenderContext, template_path: Traversable, target_path: Path) -> None:
def __init__(self, context: RenderContext, template_path: Path, target_path: Path) -> None:
self._context = context
self._template_path = template_path
self._target_path = target_path
Expand Down

0 comments on commit 90a579c

Please sign in to comment.