More cleanup, yey!
[python_utils.git] / type_utils.py
index ee52444e7828c1d2b7920749a800dbf77e653983..c2f432a2306fee2a828eaf8b9d0de41c224d3380 100644 (file)
@@ -1,5 +1,7 @@
 #!/usr/bin/env python3
 
+"""Utility functions for dealing with typing."""
+
 import logging
 from typing import Any, Optional
 
@@ -10,10 +12,27 @@ 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.
+    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()