Переглянути джерело

Network_id arg deprecation

almahmoud 7 роки тому
батько
коміт
2c7c7d7944

+ 26 - 0
cloudbridge/cloud/base/helpers.py

@@ -1,8 +1,10 @@
 import fnmatch
+import functools
 import os
 import re
 import sys
 import traceback
+import warnings
 from contextlib import contextmanager
 
 from cryptography.hazmat.backends import default_backend
@@ -129,3 +131,27 @@ def get_env(varname, default_value=None):
             value, six.text_type):
         return six.u(value)
     return value
+
+
+# Alias deprication decorator, following:
+# https://stackoverflow.com/questions/49802412/
+# how-to-implement-deprecation-in-python-with-argument-alias
+def deprecated_alias(**aliases):
+    def deco(f):
+        @functools.wraps(f)
+        def wrapper(*args, **kwargs):
+            rename_kwargs(f.__name__, kwargs, aliases)
+            return f(*args, **kwargs)
+        return wrapper
+    return deco
+
+
+def rename_kwargs(func_name, kwargs, aliases):
+    for alias, new in aliases.items():
+        if alias in kwargs:
+            if new in kwargs:
+                raise TypeError('{} received both {} and {}'.format(
+                    func_name, alias, new))
+            warnings.warn('{} is deprecated; use {}'.format(alias, new),
+                          DeprecationWarning)
+            kwargs[new] = kwargs.pop(alias)

+ 5 - 2
cloudbridge/cloud/providers/aws/services.py

@@ -30,6 +30,7 @@ from cloudbridge.cloud.interfaces.exceptions \
     import DuplicateResourceException, InvalidConfigurationException
 from cloudbridge.cloud.interfaces.resources import KeyPair
 from cloudbridge.cloud.interfaces.resources import MachineImage
+from cloudbridge.cloud.interfaces.resources import Network
 from cloudbridge.cloud.interfaces.resources import PlacementZone
 from cloudbridge.cloud.interfaces.resources import Snapshot
 from cloudbridge.cloud.interfaces.resources import VMFirewall
@@ -134,12 +135,14 @@ class AWSVMFirewallService(BaseVMFirewallService):
     def list(self, limit=None, marker=None):
         return self.svc.list(limit=limit, marker=marker)
 
-    def create(self, label, network_id, description=None):
+    @cb_helpers.deprecated_alias(network='network_id')
+    def create(self, label, network=None, description=None):
         log.debug("Creating Firewall Service with the parameters "
-                  "[label: %s id: %s description: %s]", label, network_id,
+                  "[label: %s id: %s description: %s]", label, network,
                   description)
         AWSVMFirewall.assert_valid_resource_label(label)
         name = AWSVMFirewall._generate_name_from_label(label, 'cb-fw')
+        network_id = network.id if isinstance(network, Network) else network
         obj = self.svc.create('create_security_group', GroupName=name,
                               Description=description or name,
                               VpcId=network_id)

+ 2 - 1
cloudbridge/cloud/providers/azure/services.py

@@ -66,7 +66,8 @@ class AzureVMFirewallService(BaseVMFirewallService):
                for fw in self.provider.azure_client.list_vm_firewall()]
         return ClientPagedResultList(self.provider, fws, limit, marker)
 
-    def create(self, label, description=None, network_id=None):
+    @cb_helpers.deprecated_alias(network='network_id')
+    def create(self, label, network=None, description=None):
         AzureVMFirewall.assert_valid_resource_label(label)
         name = AzureVMFirewall._generate_name_from_label(label, "cb-fw")
         parameters = {"location": self.provider.region_name,

+ 4 - 4
cloudbridge/cloud/providers/openstack/services.py

@@ -210,14 +210,14 @@ class OpenStackVMFirewallService(BaseVMFirewallService):
         return ClientPagedResultList(self.provider, firewalls,
                                      limit=limit, marker=marker)
 
-    def create(self, label, description, network_id):
+    @cb_helpers.deprecated_alias(network='network_id')
+    def create(self, label, network, description=None):
         OpenStackVMFirewall.assert_valid_resource_label(label)
-        name = OpenStackVMFirewall._generate_name_from_label(label, 'cb-fw')
         log.debug("Creating OpenStack VM Firewall with the params: "
                   "[label: %s network id: %s description: %s]", label,
-                  network_id, description)
+                  network, description)
         sg = self.provider.os_conn.network.create_security_group(
-            name=name, description=description or name)
+            name=label, description=description or label)
         if sg:
             return OpenStackVMFirewall(self.provider, sg)
         return None