Merge branch 'login-validator-5414'
[mediagoblin.git] / mediagoblin / tools / common.py
1 # GNU MediaGoblin -- federated, autonomous media hosting
2 # Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS.
3 #
4 # This program is free software: you can redistribute it and/or modify
5 # it under the terms of the GNU Affero General Public License as published by
6 # the Free Software Foundation, either version 3 of the License, or
7 # (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU Affero General Public License for more details.
13 #
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
17 import sys
18
19
20 global TESTS_ENABLED
21 TESTS_ENABLED = False
22
23
24 def import_component(import_string):
25 """
26 Import a module component defined by STRING. Probably a method,
27 class, or global variable.
28
29 Args:
30 - import_string: a string that defines what to import. Written
31 in the format of "module1.module2:component"
32 """
33 module_name, func_name = import_string.split(':', 1)
34 __import__(module_name)
35 module = sys.modules[module_name]
36 func = getattr(module, func_name)
37 return func
38
39
40 def simple_printer(string):
41 """
42 Prints a string, but without an auto \n at the end.
43
44 Useful for places where we want to dependency inject for printing.
45 """
46 sys.stdout.write(string)
47 sys.stdout.flush()
48
49
50 class CollectingPrinter(object):
51 """
52 Another printer object, this one useful for capturing output for
53 examination during testing or otherwise.
54
55 Use this like:
56
57 >>> printer = CollectingPrinter()
58 >>> printer("herp derp\n")
59 >>> printer("lollerskates\n")
60 >>> printer.combined_string
61 "herp derp\nlollerskates\n"
62 """
63 def __init__(self):
64 self.collection = []
65
66 def __call__(self, string):
67 self.collection.append(string)
68
69 @property
70 def combined_string(self):
71 return u''.join(self.collection)
72
73