~tribaal/txaws/xss-hardening

« back to all changes in this revision

Viewing changes to txaws/ec2/client.py

  • Committer: Jamu Kakar
  • Author(s): Frank Wierzbikci
  • Date: 2011-04-19 17:42:18 UTC
  • mfrom: (79.1.5 break-out-parse-instance)
  • Revision ID: jkakar@kakar.ca-20110419174218-wkudu1rw2k4kf9an
Merged break-out-parse-instance [a=fwierzbicki] [r=jkakar,oubiwann] [f=766216]

The instance parsing logic in EC2Client has been broken into two
methods, one to parse individual instances and another to parse all
instances in a payload.

Show diffs side-by-side

added added

removed removed

Lines of Context:
43
43
        return d.addCallback(self._parse_describe_instances)
44
44
 
45
45
    def _parse_instances_set(self, root, reservation):
 
46
        """Parse instance data out of an XML payload.
 
47
 
 
48
        @param root: The root node of the XML payload.
 
49
        @param reservation: The L{Reservation} associated with the instances
 
50
            from the response.
 
51
        @return: A C{list} of L{Instance}s.
 
52
        """
46
53
        instances = []
47
54
        for instance_data in root.find("instancesSet"):
48
 
            instance_id = instance_data.findtext("instanceId")
49
 
            instance_state = instance_data.find(
50
 
                "instanceState").findtext("name")
51
 
            instance_type = instance_data.findtext("instanceType")
52
 
            image_id = instance_data.findtext("imageId")
53
 
            private_dns_name = instance_data.findtext("privateDnsName")
54
 
            dns_name = instance_data.findtext("dnsName")
55
 
            key_name = instance_data.findtext("keyName")
56
 
            ami_launch_index = instance_data.findtext("amiLaunchIndex")
57
 
            launch_time = instance_data.findtext("launchTime")
58
 
            placement = instance_data.find("placement").findtext(
59
 
                "availabilityZone")
60
 
            products = []
61
 
            product_codes = instance_data.find("productCodes")
62
 
            if product_codes:
63
 
                for product_data in instance_data.find("productCodes"):
64
 
                    products.append(product_data.text)
65
 
            kernel_id = instance_data.findtext("kernelId")
66
 
            ramdisk_id = instance_data.findtext("ramdiskId")
67
 
            instance = model.Instance(
68
 
                instance_id, instance_state, instance_type, image_id,
69
 
                private_dns_name, dns_name, key_name, ami_launch_index,
70
 
                launch_time, placement, products, kernel_id, ramdisk_id,
71
 
                reservation=reservation)
72
 
            instances.append(instance)
 
55
            instances.append(self._parse_instance(instance_data, reservation))
73
56
        return instances
74
57
 
 
58
    def _parse_instance(self, instance_data, reservation):
 
59
        """Parse instance data out of an XML payload.
 
60
 
 
61
        @param instance_data: An XML node containing instance data.
 
62
        @param reservation: The L{Reservation} associated with the instance.
 
63
        @return: An L{Instance}.
 
64
        """
 
65
        instance_id = instance_data.findtext("instanceId")
 
66
        instance_state = instance_data.find(
 
67
            "instanceState").findtext("name")
 
68
        instance_type = instance_data.findtext("instanceType")
 
69
        image_id = instance_data.findtext("imageId")
 
70
        private_dns_name = instance_data.findtext("privateDnsName")
 
71
        dns_name = instance_data.findtext("dnsName")
 
72
        key_name = instance_data.findtext("keyName")
 
73
        ami_launch_index = instance_data.findtext("amiLaunchIndex")
 
74
        launch_time = instance_data.findtext("launchTime")
 
75
        placement = instance_data.find("placement").findtext(
 
76
            "availabilityZone")
 
77
        products = []
 
78
        product_codes = instance_data.find("productCodes")
 
79
        if product_codes:
 
80
            for product_data in instance_data.find("productCodes"):
 
81
                products.append(product_data.text)
 
82
        kernel_id = instance_data.findtext("kernelId")
 
83
        ramdisk_id = instance_data.findtext("ramdiskId")
 
84
        instance = model.Instance(
 
85
            instance_id, instance_state, instance_type, image_id,
 
86
            private_dns_name, dns_name, key_name, ami_launch_index,
 
87
            launch_time, placement, products, kernel_id, ramdisk_id,
 
88
            reservation=reservation)
 
89
        return instance
 
90
 
75
91
    def _parse_describe_instances(self, xml_bytes):
76
92
        """
77
93
        Parse the reservations XML payload that is returned from an AWS