Since this thing is on the innerwebs I suppose it should have a
[python_utils.git] / site_config.py
index d98c6bc36b8e5671ea581f14dd21f31356debc99..5604de676c0ded41ce5edcc051809ac7968c6286 100644 (file)
@@ -1,5 +1,9 @@
 #!/usr/bin/env python3
 
+# © Copyright 2021-2022, Scott Gasch
+
+"""Location/site dependent data."""
+
 import logging
 import platform
 from dataclasses import dataclass
@@ -27,6 +31,8 @@ args.add_argument(
 
 @dataclass
 class SiteConfig(object):
+    """The set of information specific to where the program is running."""
+
     location_name: str
     location: Location
     network: str
@@ -71,28 +77,60 @@ def is_anyone_present_wrapper(location: Location):
 
 
 def other_location() -> str:
-    hostname = platform.node()
-    if '.house' in hostname:
-        location = 'CABIN'
-    elif '.cabin' in hostname:
-        location = 'HOUSE'
+    """
+    Returns the location where this program is _NOT_ running.
+
+    >>> x = other_location()
+    >>> x in set(['HOUSE', 'CABIN'])
+    True
+
+    >>> y = this_location()
+    >>> x == y
+    False
+
+    """
+    this = this_location()
+    if this == 'HOUSE':
+        return 'CABIN'
+    elif this == 'CABIN':
+        return 'HOUSE'
     else:
-        raise Exception(f"{hostname} doesn't help me know where I'm running?!")
-    return location
+        raise Exception(f"{this} doesn't tell me where I'm running?!")
 
 
 def this_location() -> str:
+    """
+    Returns the location where this program _IS_ running.
+
+    >>> x = this_location()
+    >>> x in set(['HOUSE', 'CABIN'])
+    True
+
+    """
     hostname = platform.node()
     if '.house' in hostname:
         location = 'HOUSE'
     elif '.cabin' in hostname:
         location = 'CABIN'
+    elif '.local' in hostname:
+        location = 'HOUSE'
     else:
         raise Exception(f"{hostname} doesn't help me know where I'm running?!")
     return location
 
 
 def effective_location(location_override: Optional[str] = None) -> str:
+    """Detects and returns a location taking into account two override
+    mechanisms.
+
+    >>> x = effective_location()
+    >>> x in set(['HOUSE', 'CABIN'])
+    True
+
+    >>> effective_location('HOUSE')
+    'HOUSE'
+
+    """
     if location_override is None:
         try:
             location_override = config.config['site_config_override_location']
@@ -102,7 +140,7 @@ def effective_location(location_override: Optional[str] = None) -> str:
     if location_override is None or location_override == 'NONE':
         location = this_location()
     else:
-        logger.debug(f'site_config\'s location_override was set to: {location_override}')
+        logger.debug('site_config\'s location_override was set to: %s', location_override)
         location = location_override
     return location