Skip to content

Commit

Permalink
Run mypy in strict mode
Browse files Browse the repository at this point in the history
  • Loading branch information
rec committed Feb 14, 2024
1 parent 41228f5 commit a49d047
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 15 deletions.
3 changes: 3 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@ line-length = 88

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

[tool.mypy]
strict = true
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
12 changes: 9 additions & 3 deletions typings/xmod/__init__.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,18 @@ only a class could do - handy for modules that "just do one thing".
>>> print(your_module)
[0, 1, 2]
"""
__all__ = ('xmod', )
__all__ = ('xmod',)
_OMIT = ...
_EXTENSION_ATTRIBUTE = ...
_WRAPPED_ATTRIBUTE = ...
def xmod(extension: t.Any = ..., name: t.Optional[str] = ..., full: t.Optional[bool] = ..., omit: t.Optional[t.Sequence[str]] = ..., mutable: bool = ...) -> t.Any:

def xmod(
extension: t.Any = ...,
name: t.Optional[str] = ...,
full: t.Optional[bool] = ...,
omit: t.Optional[t.Sequence[str]] = ...,
mutable: bool = ...,
) -> t.Any:
"""
Extend the system module at `name` with any Python object.
Expand Down Expand Up @@ -98,4 +105,3 @@ def xmod(extension: t.Any = ..., name: t.Optional[str] = ..., full: t.Optional[b
`extension`, the original item that got decorated
"""
...

25 changes: 13 additions & 12 deletions xmod/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@ def a_function():
_EXTENSION_ATTRIBUTE = '_xmod_extension'
_WRAPPED_ATTRIBUTE = '_xmod_wrapped'

Callable = t.Callable[..., t.Any]


def xmod(
extension: t.Any = None,
Expand Down Expand Up @@ -113,24 +115,23 @@ class defined in the module that's being extended.
"""
if extension is None:
# It's a decorator with properties
return functools.partial(
xmod, name=name, full=full, omit=omit, mutable=mutable
)
return functools.partial(xmod, name=name, full=full, omit=omit, mutable=mutable)

def method(f) -> t.Callable:
def method(f: Callable) -> Callable:
@functools.wraps(f)
def wrapped(self, *args, **kwargs):
def wrapped(self: t.Any, *args: t.Any, **kwargs: t.Any) -> t.Any:
return f(*args, **kwargs)

return wrapped

def mutator(f) -> t.Callable:
def fail(*args, **kwargs):
def mutator(f: Callable) -> Callable:
@functools.wraps(f)
def fail(*args: t.Any, **kwargs: t.Any) -> t.Any:
raise TypeError(f'Class is immutable {args} {kwargs}')

return method(f) if mutable else fail

def prop(k) -> property:
def prop(k: str) -> property:
return property(
method(lambda: getattr(extension, k)),
mutator(lambda v: setattr(extension, k, v)),
Expand All @@ -143,19 +144,19 @@ def prop(k) -> property:

module = sys.modules[name]

def _getattr(k) -> t.Any:
def _getattr(k: str) -> t.Any:
try:
return getattr(extension, k)
except AttributeError:
return getattr(module, k)

def _setattr(k, v) -> None:
def _setattr(k: str, v: t.Any) -> None:
if hasattr(extension, k):
setattr(extension, k, v)
else:
setattr(module, k, v)

def _delattr(k) -> None:
def _delattr(k: str) -> None:
success = True
try:
delattr(extension, k)
Expand Down Expand Up @@ -196,7 +197,7 @@ def _delattr(k) -> None:
elif False: # TODO: enable or delete this
members[a] = prop(a)

def directory(self) -> t.List:
def directory(self: t.Any) -> t.List[str]:
return sorted(set(members).union(dir(module)))

members['__dir__'] = directory
Expand Down

0 comments on commit a49d047

Please sign in to comment.