Skip to content

Commit cceb745

Browse files
committed
pass pyright --verifytypes
1 parent f1bbce1 commit cceb745

File tree

3 files changed

+24
-13
lines changed

3 files changed

+24
-13
lines changed

CHANGES.rst

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Unreleased
66
- Restore identity handling for ``str`` and ``int`` senders. :pr:`148`
77
- Fix deprecated ``blinker.base.WeakNamespace`` import. :pr:`149`
88
- Use types from ``collections.abc`` instead of ``typing``. :pr:`150`
9+
- Fully specify exported types as reported by pyright. :pr:`152`
910

1011

1112
Version 1.8.0

src/blinker/base.py

+22-13
Original file line numberDiff line numberDiff line change
@@ -529,7 +529,18 @@ def __repr__(self) -> str:
529529
return f"{base[:-1]}; {self.name!r}>" # noqa: E702
530530

531531

532-
class Namespace(dict): # type: ignore[type-arg]
532+
if t.TYPE_CHECKING:
533+
534+
class PNamespaceSignal(t.Protocol):
535+
def __call__(self, name: str, doc: str | None = None) -> NamedSignal: ...
536+
537+
# Python < 3.9
538+
_NamespaceBase = dict[str, NamedSignal] # type: ignore[misc]
539+
else:
540+
_NamespaceBase = dict
541+
542+
543+
class Namespace(_NamespaceBase):
533544
"""A dict mapping names to signals."""
534545

535546
def signal(self, name: str, doc: str | None = None) -> NamedSignal:
@@ -539,11 +550,10 @@ def signal(self, name: str, doc: str | None = None) -> NamedSignal:
539550
:param name: The name of the signal.
540551
:param doc: The docstring of the signal.
541552
"""
542-
try:
543-
return self[name] # type: ignore[no-any-return]
544-
except KeyError:
545-
result = self.setdefault(name, NamedSignal(name, doc))
546-
return result # type: ignore[no-any-return]
553+
if name not in self:
554+
self[name] = NamedSignal(name, doc)
555+
556+
return self[name]
547557

548558

549559
class _WeakNamespace(WeakValueDictionary): # type: ignore[type-arg]
@@ -575,19 +585,18 @@ def signal(self, name: str, doc: str | None = None) -> NamedSignal:
575585
:param name: The name of the signal.
576586
:param doc: The docstring of the signal.
577587
"""
578-
try:
579-
return self[name] # type: ignore[no-any-return]
580-
except KeyError:
581-
result = self.setdefault(name, NamedSignal(name, doc))
582-
return result # type: ignore[no-any-return]
588+
if name not in self:
589+
self[name] = NamedSignal(name, doc)
590+
591+
return self[name] # type: ignore[no-any-return]
583592

584593

585-
default_namespace = Namespace()
594+
default_namespace: Namespace = Namespace()
586595
"""A default :class:`Namespace` for creating named signals. :func:`signal`
587596
creates a :class:`NamedSignal` in this namespace.
588597
"""
589598

590-
signal = default_namespace.signal
599+
signal: PNamespaceSignal = default_namespace.signal
591600
"""Return a :class:`NamedSignal` in :data:`default_namespace` with the given
592601
``name``, creating it if required. Repeated calls with the same name return the
593602
same signal.

tox.ini

+1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ deps = -r requirements/typing.txt
2424
commands =
2525
mypy
2626
pyright
27+
pyright --verifytypes blinker --ignoreexternal
2728

2829
[testenv:docs]
2930
deps = -r requirements/docs.txt

0 commit comments

Comments
 (0)