Back sessions with It's Dangerous.
[mediagoblin.git] / mediagoblin / tools / common.py
index dccceccb808a5654cbf961d6a848c468dc36e931..34586611cd38a9c8c5172741af76080651022f57 100644 (file)
@@ -1,5 +1,5 @@
 # GNU MediaGoblin -- federated, autonomous media hosting
-# Copyright (C) 2011 Free Software Foundation, Inc
+# Copyright (C) 2011, 2012 MediaGoblin contributors.  See AUTHORS.
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU Affero General Public License as published by
 # You should have received a copy of the GNU Affero General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+import sys
+
+
 global TESTS_ENABLED
 TESTS_ENABLED = False
+
+
+def import_component(import_string):
+    """
+    Import a module component defined by STRING.  Probably a method,
+    class, or global variable.
+
+    Args:
+     - import_string: a string that defines what to import.  Written
+       in the format of "module1.module2:component"
+    """
+    module_name, func_name = import_string.split(':', 1)
+    __import__(module_name)
+    module = sys.modules[module_name]
+    func = getattr(module, func_name)
+    return func
+
+
+def simple_printer(string):
+    """
+    Prints a string, but without an auto \n at the end.
+
+    Useful for places where we want to dependency inject for printing.
+    """
+    sys.stdout.write(string)
+    sys.stdout.flush()
+
+
+class CollectingPrinter(object):
+    """
+    Another printer object, this one useful for capturing output for
+    examination during testing or otherwise.
+
+    Use this like:
+
+      >>> printer = CollectingPrinter()
+      >>> printer("herp derp\n")
+      >>> printer("lollerskates\n")
+      >>> printer.combined_string
+      "herp derp\nlollerskates\n"
+    """
+    def __init__(self):
+        self.collection = []
+    
+    def __call__(self, string):
+        self.collection.append(string)
+
+    @property
+    def combined_string(self):
+        return u''.join(self.collection)
+
+