More cleanup, yey!
[python_utils.git] / type_utils.py
index 7b79af08f934f0b93153c5c14065a3a884de9a91..c2f432a2306fee2a828eaf8b9d0de41c224d3380 100644 (file)
@@ -1,5 +1,7 @@
 #!/usr/bin/env python3
 
+"""Utility functions for dealing with typing."""
+
 import logging
 from typing import Any, Optional
 
@@ -7,8 +9,30 @@ logger = logging.getLogger(__name__)
 
 
 def unwrap_optional(x: Optional[Any]) -> Any:
+    """Unwrap an Optional[Type] argument returning a Type value back.
+    If the Optional[Type] argument is None, however, raise an exception.
+    Use this to satisfy most type checkers that a value that could
+    be None isn't so as to drop the Optional typing hint.
+
+    >>> 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()