Reduce the doctest lease duration...
[python_utils.git] / type_utils.py
index 7b79af08f934f0b93153c5c14065a3a884de9a91..e760dba90412355579ea042bf0fa760960d644c5 100644 (file)
@@ -1,5 +1,9 @@
 #!/usr/bin/env python3
 
+# © Copyright 2021-2022, Scott Gasch
+
+"""Utility functions for dealing with typing."""
+
 import logging
 from typing import Any, Optional
 
@@ -7,8 +11,36 @@ logger = logging.getLogger(__name__)
 
 
 def unwrap_optional(x: Optional[Any]) -> Any:
+    """Unwrap an Optional[Type] argument returning a Type value back.
+    Use this to satisfy most type checkers that a value that could be
+    None isn't so as to drop the Optional typing hint.
+
+    Args:
+        x: an Optional[Type] argument
+
+    Returns:
+        If the Optional[Type] argument is non-None, return it.
+        If the Optional[Type] argument is None, however, raise an
+        exception.
+
+    >>> x: Optional[bool] = True
+    >>> unwrap_optional(x)
+    True
+
+    >>> y: Optional[str] = None
+    >>> unwrap_optional(y)
+    Traceback (most recent call last):
+    ...
+    AssertionError: Argument to unwrap_optional was unexpectedly None
+    """
     if x is None:
         msg = 'Argument to unwrap_optional was unexpectedly None'
         logger.critical(msg)
         raise AssertionError(msg)
     return x
+
+
+if __name__ == '__main__':
+    import doctest
+
+    doctest.testmod()