Feature/api version support (#109)
[osm/N2VC.git] / juju / client / client.py
index 5ea4c0e..89b5248 100644 (file)
@@ -1,18 +1,34 @@
 '''Replace auto-generated classes with our own, where necessary.
 '''
 
-from . import _client
-from . import overrides
+from . import _client, _definitions, overrides
 
 
 for o in overrides.__all__:
-    setattr(_client, o, getattr(overrides, o))
+    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__:
-    c_type = getattr(_client, o)
-    o_type = getattr(overrides, o)
-    for a in dir(o_type):
-        if not a.startswith('_'):
-            setattr(c_type, a, getattr(o_type, a))
+    # 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