diff roundup/test/mocknull.py @ 6366:f2c31f5ec50b

Move mocknull from test to roundup/test
author Ralf Schlatterbeck <rsc@runtux.com>
date Wed, 31 Mar 2021 15:18:38 +0200
parents test/mocknull.py@b1ab8bd18e79
children 617d85ce4ac3
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/roundup/test/mocknull.py	Wed Mar 31 15:18:38 2021 +0200
@@ -0,0 +1,33 @@
+
+class MockNull:
+    def __init__(self, **kwargs):
+        for key, value in kwargs.items():
+            self.__dict__[key] = value
+
+    def __call__(self, *args, **kwargs): return MockNull()
+    def __getattr__(self, name):
+        # This allows assignments which assume all intermediate steps are Null
+        # objects if they don't exist yet.
+        #
+        # For example (with just 'client' defined):
+        #
+        # client.db.config.TRACKER_WEB = 'BASE/'
+        self.__dict__[name] = MockNull()
+        return getattr(self, name)
+
+    def __getitem__(self, key): return self
+    def __bool__(self): return False
+    # Python 2 compatibility:
+    __nonzero__ = __bool__
+    def __contains__(self, key): return False
+    def __eq__(self, rhs): return False
+    def __ne__(self, rhs): return False
+    def __str__(self): return ''
+    def __repr__(self): return '<MockNull 0x%x>'%id(self)
+    def gettext(self, str): return str
+    _ = gettext
+    def get(self, name, default=None):
+        try:
+            return self.__dict__[name.lower()]
+        except KeyError:
+            return default

Roundup Issue Tracker: http://roundup-tracker.org/