@@ -529,7 +529,18 @@ def __repr__(self) -> str:
529
529
return f"{ base [:- 1 ]} ; { self .name !r} >" # noqa: E702
530
530
531
531
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 ):
533
544
"""A dict mapping names to signals."""
534
545
535
546
def signal (self , name : str , doc : str | None = None ) -> NamedSignal :
@@ -539,11 +550,10 @@ def signal(self, name: str, doc: str | None = None) -> NamedSignal:
539
550
:param name: The name of the signal.
540
551
:param doc: The docstring of the signal.
541
552
"""
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 ]
547
557
548
558
549
559
class _WeakNamespace (WeakValueDictionary ): # type: ignore[type-arg]
@@ -575,19 +585,18 @@ def signal(self, name: str, doc: str | None = None) -> NamedSignal:
575
585
:param name: The name of the signal.
576
586
:param doc: The docstring of the signal.
577
587
"""
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]
583
592
584
593
585
- default_namespace = Namespace ()
594
+ default_namespace : Namespace = Namespace ()
586
595
"""A default :class:`Namespace` for creating named signals. :func:`signal`
587
596
creates a :class:`NamedSignal` in this namespace.
588
597
"""
589
598
590
- signal = default_namespace .signal
599
+ signal : PNamespaceSignal = default_namespace .signal
591
600
"""Return a :class:`NamedSignal` in :data:`default_namespace` with the given
592
601
``name``, creating it if required. Repeated calls with the same name return the
593
602
same signal.
0 commit comments