Quellcode durchsuchen

Made json handling more consistent for resources

Nuwan Goonasekera vor 8 Jahren
Ursprung
Commit
44b8a6cba6

+ 12 - 9
cloudbridge/cloud/providers/aws/resources.py

@@ -3,7 +3,6 @@ DataTypes used by this provider
 """
 """
 import hashlib
 import hashlib
 import inspect
 import inspect
-import json
 
 
 from datetime import datetime
 from datetime import datetime
 
 
@@ -95,8 +94,9 @@ class AWSMachineImage(BaseMachineImage):
         :rtype: ``int``
         :rtype: ``int``
         :return: The minimum disk size needed by this image
         :return: The minimum disk size needed by this image
         """
         """
-        bdm = self._ec2_image.block_device_mapping
-        return bdm[self._ec2_image.root_device_name].size
+        bdm = self._ec2_image.block_device_mapping.get(
+            self._ec2_image.root_device_name)
+        return bdm.size if bdm else None
 
 
     def delete(self):
     def delete(self):
         """
         """
@@ -719,10 +719,10 @@ class AWSSecurityGroup(BaseSecurityGroup):
         attr = inspect.getmembers(self, lambda a: not (inspect.isroutine(a)))
         attr = inspect.getmembers(self, lambda a: not (inspect.isroutine(a)))
         js = {k: v for (k, v) in attr if not k.startswith('_')}
         js = {k: v for (k, v) in attr if not k.startswith('_')}
         json_rules = [r.to_json() for r in self.rules]
         json_rules = [r.to_json() for r in self.rules]
-        js['rules'] = [json.loads(r) for r in json_rules]
+        js['rules'] = json_rules
         if js.get('network_id'):
         if js.get('network_id'):
             js.pop('network_id')  # Omit for consistency across cloud providers
             js.pop('network_id')  # Omit for consistency across cloud providers
-        return json.dumps(js, sort_keys=True)
+        return js
 
 
 
 
 class AWSSecurityGroupRule(BaseSecurityGroupRule):
 class AWSSecurityGroupRule(BaseSecurityGroupRule):
@@ -777,7 +777,7 @@ class AWSSecurityGroupRule(BaseSecurityGroupRule):
         js = {k: v for (k, v) in attr if not k.startswith('_')}
         js = {k: v for (k, v) in attr if not k.startswith('_')}
         js['group'] = self.group.id if self.group else ''
         js['group'] = self.group.id if self.group else ''
         js['parent'] = self.parent.id if self.parent else ''
         js['parent'] = self.parent.id if self.parent else ''
-        return json.dumps(js, sort_keys=True)
+        return js
 
 
     def delete(self):
     def delete(self):
         if self.group:
         if self.group:
@@ -824,9 +824,12 @@ class AWSBucketObject(BaseBucketObject):
         """
         """
         Get the date and time this object was last modified.
         Get the date and time this object was last modified.
         """
         """
-        lm = datetime.strptime(self._key.last_modified,
-                               "%Y-%m-%dT%H:%M:%S.%fZ")
-        return lm.strftime("%Y-%m-%dT%H:%M:%S.%f")
+        if self._key.last_modified:
+            lm = datetime.strptime(self._key.last_modified,
+                                   "%Y-%m-%dT%H:%M:%S.%fZ")
+            return lm.strftime("%Y-%m-%dT%H:%M:%S.%f")
+        else:
+            return None
 
 
     def iter_content(self):
     def iter_content(self):
         """
         """

+ 3 - 4
cloudbridge/cloud/providers/openstack/resources.py

@@ -3,7 +3,6 @@ DataTypes used by this provider
 """
 """
 import inspect
 import inspect
 import ipaddress
 import ipaddress
-import json
 
 
 import os
 import os
 
 
@@ -999,8 +998,8 @@ class OpenStackSecurityGroup(BaseSecurityGroup):
         attr = inspect.getmembers(self, lambda a: not(inspect.isroutine(a)))
         attr = inspect.getmembers(self, lambda a: not(inspect.isroutine(a)))
         js = {k: v for(k, v) in attr if not k.startswith('_')}
         js = {k: v for(k, v) in attr if not k.startswith('_')}
         json_rules = [r.to_json() for r in self.rules]
         json_rules = [r.to_json() for r in self.rules]
-        js['rules'] = [json.loads(r) for r in json_rules]
-        return json.dumps(js, sort_keys=True)
+        js['rules'] = json_rules
+        return js
 
 
 
 
 class OpenStackSecurityGroupRule(BaseSecurityGroupRule):
 class OpenStackSecurityGroupRule(BaseSecurityGroupRule):
@@ -1044,7 +1043,7 @@ class OpenStackSecurityGroupRule(BaseSecurityGroupRule):
         js = {k: v for(k, v) in attr if not k.startswith('_')}
         js = {k: v for(k, v) in attr if not k.startswith('_')}
         js['group'] = self.group.id if self.group else ''
         js['group'] = self.group.id if self.group else ''
         js['parent'] = self.parent.id if self.parent else ''
         js['parent'] = self.parent.id if self.parent else ''
-        return json.dumps(js, sort_keys=True)
+        return js
 
 
     def delete(self):
     def delete(self):
         return self._provider.nova.security_group_rules.delete(self.id)
         return self._provider.nova.security_group_rules.delete(self.id)

+ 3 - 1
test/helpers/standard_interface_tests.py

@@ -5,6 +5,8 @@ This includes:
    2. Checking for object equality and repr
    2. Checking for object equality and repr
    3. Checking standard behaviour for list, iter, find, get, delete
    3. Checking standard behaviour for list, iter, find, get, delete
 """
 """
+import uuid
+
 from cloudbridge.cloud.interfaces.resources import ResultList
 from cloudbridge.cloud.interfaces.resources import ResultList
 
 
 
 
@@ -84,7 +86,7 @@ def check_get(test, service, obj):
 
 
 def check_get_non_existent(test, service):
 def check_get_non_existent(test, service):
     # check get
     # check get
-    get_objs = service.get("random_imagined_obj_id")
+    get_objs = service.get(str(uuid.uuid4()))
     test.assertIsNone(
     test.assertIsNone(
         get_objs,
         get_objs,
         "Get non-existent object for %s returned unexpected objects: %s"
         "Get non-existent object for %s returned unexpected objects: %s"