Merge commit '19031b24b523c872c1ac367821dc60c950a09755' as 'modules/libjuju'
[osm/N2VC.git] / modules / libjuju / juju / client / client.py
diff --git a/modules/libjuju/juju/client/client.py b/modules/libjuju/juju/client/client.py
new file mode 100644 (file)
index 0000000..89b5248
--- /dev/null
@@ -0,0 +1,34 @@
+'''Replace auto-generated classes with our own, where necessary.
+'''
+
+from . import _client, _definitions, overrides
+
+
+for o in overrides.__all__:
+    if not "Facade" in o:
+        # Override stuff in _definitions, which is all imported
+        # into _client. We Monkey patch both the original class and
+        # the ref in _client (import shenanigans are fun!)
+        setattr(_definitions, o, getattr(overrides, o))
+        setattr(_client, o, getattr(overrides, o))
+    # We shouldn't be overriding Facades!
+    else:
+        raise ValueError(
+            "Cannot override a versioned Facade class -- you must patch "
+            "it instead.")
+
+for o in overrides.__patches__:
+    # Patch a versioned Facade.
+    for client_version in _client.CLIENTS.values():
+        try:
+            c_type = getattr(client_version, o)
+        except AttributeError:
+            # Not all the _client<version> modules may have the
+            # facade. That's okay -- we just skip over them.
+            continue
+        o_type = getattr(overrides, o)
+        for a in dir(o_type):
+            if not a.startswith('_'):
+                setattr(c_type, a, getattr(o_type, a))
+
+from ._client import *  # noqa