)]}'
{"heat/engine/resources/neutron/floatingip.py":[{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"a8b624d2f4e3d6f60a484ebbb1ea30d9a6e6e948","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    properties_schema \u003d {"},{"line_number":37,"context_line":"        FLOATING_NETWORK_ID: properties.Schema("},{"line_number":38,"context_line":"            properties.Schema.STRING,"},{"line_number":39,"context_line":"            _(\u0027ID of network to allocate floating IP from. deprectated\u0027),"},{"line_number":40,"context_line":"            required\u003dFalse"},{"line_number":41,"context_line":"        ),"},{"line_number":42,"context_line":"        FLOATING_NETWORK: properties.Schema("}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAW3%2F%2F5xM%3D","line":39,"updated":"2014-04-09 15:48:17.000000000","message":"s/deprectated/DEPRECATED/","commit_id":"7654689b2d49a68cbe3483664f9b63f18ff53d07"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"a8b624d2f4e3d6f60a484ebbb1ea30d9a6e6e948","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                                            ) \u003d\u003d self.properties.get("},{"line_number":86,"context_line":"                    self.FLOATING_NETWORK) or resource.properties.get("},{"line_number":87,"context_line":"                        router.RouterGateway.NETWORK_ID) \u003d\u003d"},{"line_number":88,"context_line":"                        self.properties.get(self.FLOATING_NETWORK_ID)):"},{"line_number":89,"context_line":"                    deps +\u003d (self, resource)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def validate(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAW3%2F%2F5wI%3D","line":88,"updated":"2014-04-09 15:48:17.000000000","message":"wow lines 83-88 are not readable. Not all your fault I know but please could some intermediate variables be introduced?","commit_id":"7654689b2d49a68cbe3483664f9b63f18ff53d07"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"9f78ddcef5efff94b4707473a14b6e01bd7d4660","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    properties_schema \u003d {"},{"line_number":36,"context_line":"        FLOATING_NETWORK_ID: properties.Schema("},{"line_number":37,"context_line":"            properties.Schema.STRING,"},{"line_number":38,"context_line":"            _(\u0027DEPRECATED: Please use floating_network instead\u0027),"},{"line_number":39,"context_line":"            required\u003dFalse"},{"line_number":40,"context_line":"        ),"},{"line_number":41,"context_line":"        FLOATING_NETWORK: properties.Schema("}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAW3%2F%2FpoM%3D","line":38,"updated":"2014-04-11 12:33:38.000000000","message":"Much better!","commit_id":"38a99d2598fbd0c5457c44112fb7d7c4bd952be2"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"9f78ddcef5efff94b4707473a14b6e01bd7d4660","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                    self.FLOATING_NETWORK_ID)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"                if (gateway_network \u003d\u003d floating_network or"},{"line_number":93,"context_line":"                        gateway_network_id \u003d\u003d floating_network_id):"},{"line_number":94,"context_line":"                    deps +\u003d (self, resource)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def validate(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAW3%2F%2Fpi8%3D","line":93,"updated":"2014-04-11 12:33:38.000000000","message":"now I can see what this is doing, I wonder if a method like \"def cmp(prop1, prop2)\" on resource.properties would add readability? Or if a shared utility method would eliminate some duplication, this sort of logic crops up 4? times in your patch.\n\nHappy enough to +1 now though","commit_id":"38a99d2598fbd0c5457c44112fb7d7c4bd952be2"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"ec3f55a566cdeedc07fdcfd29c216f256602ba5f","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                    self.FLOATING_NETWORK_ID)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"                if (gateway_network \u003d\u003d floating_network or"},{"line_number":96,"context_line":"                        gateway_network_id \u003d\u003d floating_network_id):"},{"line_number":97,"context_line":"                    deps +\u003d (self, resource)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def validate(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"bad4c104_88ff2201","line":96,"updated":"2014-04-29 20:33:41.000000000","message":"So I am worried that the dependencies will not be established if the author is not consistent about using names or IDs for these resources. On the other hand, doing an API call to convert this to IDs is out of the question for inside add_dependencies.\n\nA possible solution would be to store the ID as resource data for every property which can be referenced by name. The resource data will be set in the handle_create, and from that point on this canonical ID can be fetched from resource data instead of the properties.","commit_id":"f8c5339a85ae205d18a5eafdd747fae80474047f"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"8dce3a3f2435d04ce971ce3e3a1126852b4d09ad","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                    self.FLOATING_NETWORK_ID)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"                if (gateway_network \u003d\u003d floating_network or"},{"line_number":96,"context_line":"                        gateway_network_id \u003d\u003d floating_network_id):"},{"line_number":97,"context_line":"                    deps +\u003d (self, resource)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def validate(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"9ad9bd40_ded8fd55","line":96,"in_reply_to":"9ad9bd40_c50e7c34","updated":"2014-04-30 22:11:50.000000000","message":"OK, it is probably impractical to handle inconsistent use of name/uuid, but it is possible here to handle inconsistent use of deprecated/non-deprecated properties. Something like:\n\ngateway_network \u003d resource.properties.get(router.RouterGateway.NETWORK) or resource.properties.get(router.RouterGateway.NETWORK_ID)","commit_id":"f8c5339a85ae205d18a5eafdd747fae80474047f"},{"author":{"_account_id":8833,"name":"Rabi Mishra","email":"ramishra@redhat.com","username":"rabi"},"change_message_id":"6b4a2e72da6afd2c76c085c7e62d4d2a38a2d9c4","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                    self.FLOATING_NETWORK_ID)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"                if (gateway_network \u003d\u003d floating_network or"},{"line_number":96,"context_line":"                        gateway_network_id \u003d\u003d floating_network_id):"},{"line_number":97,"context_line":"                    deps +\u003d (self, resource)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def validate(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"9ad9bd40_a795e9e5","line":96,"in_reply_to":"9ad9bd40_ded8fd55","updated":"2014-05-01 08:39:55.000000000","message":"On second thought, yes your suggestion would help if the user mixes depr/non-depr properties with \u0027uuid\u0027. Would not work work if he uses \u0027name\u0027. Would make the necessary change.","commit_id":"f8c5339a85ae205d18a5eafdd747fae80474047f"},{"author":{"_account_id":8833,"name":"Rabi Mishra","email":"ramishra@redhat.com","username":"rabi"},"change_message_id":"26baad08c2520aa715a4fba4e970176bbaca4433","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                    self.FLOATING_NETWORK_ID)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"                if (gateway_network \u003d\u003d floating_network or"},{"line_number":96,"context_line":"                        gateway_network_id \u003d\u003d floating_network_id):"},{"line_number":97,"context_line":"                    deps +\u003d (self, resource)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def validate(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"9ad9bd40_c50e7c34","line":96,"in_reply_to":"bad4c104_88ff2201","updated":"2014-04-30 13:47:38.000000000","message":"I did think about the author not being consistent.. However, ignored it with the assumption the deprecated ID properties would possibly be removed in future release.\n\nCorrect me if I am wrong, I could see that dependencies can be set without the resource \u0027handle_create\u0027 being called. Without the handle_create on the dependent resource how can we use the suggested approach?","commit_id":"f8c5339a85ae205d18a5eafdd747fae80474047f"}],"heat/engine/resources/neutron/loadbalancer.py":[{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"a8b624d2f4e3d6f60a484ebbb1ea30d9a6e6e948","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        ),"},{"line_number":184,"context_line":"        SUBNET_ID: properties.Schema("},{"line_number":185,"context_line":"            properties.Schema.STRING,"},{"line_number":186,"context_line":"            _(\u0027DEPRECATED: Use subnet instaed.\u0027),"},{"line_number":187,"context_line":"            required\u003dFalse"},{"line_number":188,"context_line":"        ),"},{"line_number":189,"context_line":"        SUBNET: properties.Schema("}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAW3%2F%2F5u4%3D","line":186,"updated":"2014-04-09 15:48:17.000000000","message":"s/instaed/instead/","commit_id":"7654689b2d49a68cbe3483664f9b63f18ff53d07"}],"heat/engine/resources/neutron/neutron.py":[{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"a8b624d2f4e3d6f60a484ebbb1ea30d9a6e6e948","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                                                         depr_prop_key)"},{"line_number":63,"context_line":"            if not prop_value and not depr_prop_value:"},{"line_number":64,"context_line":"                msg \u003d _(\u0027Either %(prop_key)s or %(depr_prop_key)s\u0027"},{"line_number":65,"context_line":"                        \u0027 property should be specified.\u0027"},{"line_number":66,"context_line":"                        ), {\u0027prop_key\u0027: prop_key,"},{"line_number":67,"context_line":"                            \u0027depr_prop_key\u0027: depr_prop_key}"},{"line_number":68,"context_line":"                raise exception.StackValidationFailed(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAW3%2F%2F5uI%3D","line":65,"updated":"2014-04-09 15:48:17.000000000","message":"Reads better (to me) without the word \"property\".","commit_id":"7654689b2d49a68cbe3483664f9b63f18ff53d07"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"bf187dee1deef200afa8443a38489a2b3bd1d1b6","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                return \u0027%s not allowed in value_specs\u0027 % k"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @staticmethod"},{"line_number":55,"context_line":"    def _validate_depr_property_required(properties, prop_key, depr_prop_key):"},{"line_number":56,"context_line":"            prop_value \u003d properties.get(prop_key)"},{"line_number":57,"context_line":"            depr_prop_value \u003d properties.get(depr_prop_key)"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9ad9bd40_92dfea0c","line":55,"updated":"2014-05-06 09:08:54.000000000","message":"seems this check is pretty generic, and would be better (later?) moved to the parent class so that other resources have easy access to it. It could also be renamed to smth like _validate_mutually_exclusive_props","commit_id":"3b05f304952c54b350621eeb7acb0ae768dbae39"},{"author":{"_account_id":8833,"name":"Rabi Mishra","email":"ramishra@redhat.com","username":"rabi"},"change_message_id":"dc313c38cf271d7436131e373169d5d6c637eec6","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                return \u0027%s not allowed in value_specs\u0027 % k"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @staticmethod"},{"line_number":55,"context_line":"    def _validate_depr_property_required(properties, prop_key, depr_prop_key):"},{"line_number":56,"context_line":"            prop_value \u003d properties.get(prop_key)"},{"line_number":57,"context_line":"            depr_prop_value \u003d properties.get(depr_prop_key)"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9ad9bd40_ca18c420","line":55,"in_reply_to":"9ad9bd40_92dfea0c","updated":"2014-05-06 10:11:33.000000000","message":"As this method would go away when we remove the \u0027Network ID\u0027 (depr property), I didn\u0027t find it useful to move this up the chain. if we think this can be useful for other depr properties (non neutron) in the future, I can add it to resource.py. However, I don\u0027t think it\u0027s a good idea to mix depr property validation with other genuinely mutually exclusive properties.","commit_id":"3b05f304952c54b350621eeb7acb0ae768dbae39"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"9d3e0793ec5236baf6dfbfa8cd296f0e8567ec87","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                return \u0027%s not allowed in value_specs\u0027 % k"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @staticmethod"},{"line_number":55,"context_line":"    def _validate_depr_property_required(properties, prop_key, depr_prop_key):"},{"line_number":56,"context_line":"            prop_value \u003d properties.get(prop_key)"},{"line_number":57,"context_line":"            depr_prop_value \u003d properties.get(depr_prop_key)"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9ad9bd40_ede2022e","line":55,"in_reply_to":"9ad9bd40_ca18c420","updated":"2014-05-06 10:41:45.000000000","message":"I would really like to see it in general resource. This method does not check/rely on actual deprecated status while it is doing its job, and the errors it raises are perfectly valid for any pair of mutually exclusive props. The way I see it non-deprecated and deprecated props are actually mutually exclusive (one must not provide both of them), what makes them special is only the reason why they are such.\n\nBTW, this all would probably by rewritten anyway if/when https://blueprints.launchpad.net/heat/+spec/mutually-exclusive-properties is implemented, but for now having this in general resource would be beneficial.","commit_id":"3b05f304952c54b350621eeb7acb0ae768dbae39"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"bf187dee1deef200afa8443a38489a2b3bd1d1b6","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            neutron_client, key_type, props.get(key))"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @staticmethod"},{"line_number":75,"context_line":"    def _resolve_network(neutron_client, props, net_key, net_id_key):"},{"line_number":76,"context_line":"        if props.get(net_key):"},{"line_number":77,"context_line":"            props[net_id_key] \u003d NeutronResource._find_neutron_resource("},{"line_number":78,"context_line":"                neutron_client, props, net_key, \u0027network\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9ad9bd40_96e5083a","line":75,"updated":"2014-05-06 09:08:54.000000000","message":"I know Python is not a functional language :), but it looks strange to have a function that is designed to operate both on side effect and to return a value. Would it be too much burden to use only return value and not modify the props inside this method and explicitly modify props where needed? Same for _resolve_subnet as well.","commit_id":"3b05f304952c54b350621eeb7acb0ae768dbae39"},{"author":{"_account_id":8833,"name":"Rabi Mishra","email":"ramishra@redhat.com","username":"rabi"},"change_message_id":"dc313c38cf271d7436131e373169d5d6c637eec6","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            neutron_client, key_type, props.get(key))"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @staticmethod"},{"line_number":75,"context_line":"    def _resolve_network(neutron_client, props, net_key, net_id_key):"},{"line_number":76,"context_line":"        if props.get(net_key):"},{"line_number":77,"context_line":"            props[net_id_key] \u003d NeutronResource._find_neutron_resource("},{"line_number":78,"context_line":"                neutron_client, props, net_key, \u0027network\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9ad9bd40_aa2460c5","line":75,"in_reply_to":"9ad9bd40_96e5083a","updated":"2014-05-06 10:11:33.000000000","message":"Is this bad practice? I implemented like this as there are only a few places (router.py), where we need the \u0027id\u0027 explicitly rather than the dictionary for the neutron client. If this has to be changed, I would prefer to  get the \u0027id\u0027 from pops outside the scope of this method.","commit_id":"3b05f304952c54b350621eeb7acb0ae768dbae39"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"9d3e0793ec5236baf6dfbfa8cd296f0e8567ec87","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            neutron_client, key_type, props.get(key))"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @staticmethod"},{"line_number":75,"context_line":"    def _resolve_network(neutron_client, props, net_key, net_id_key):"},{"line_number":76,"context_line":"        if props.get(net_key):"},{"line_number":77,"context_line":"            props[net_id_key] \u003d NeutronResource._find_neutron_resource("},{"line_number":78,"context_line":"                neutron_client, props, net_key, \u0027network\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9ad9bd40_edc3e254","line":75,"in_reply_to":"9ad9bd40_aa2460c5","updated":"2014-05-06 10:41:45.000000000","message":"Can\u0027t say I\u0027m an expert in Python \"best\" practices :), but the current implementation is at least somewhat confusing, as it supports two ways of using it. Would prefer to have only one way, whichever you find more suitable.","commit_id":"3b05f304952c54b350621eeb7acb0ae768dbae39"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"540141d32cf08075789b0ce1cc545e02429b0fd8","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            neutron_client, key_type, props.get(key))"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @staticmethod"},{"line_number":75,"context_line":"    def _resolve_network(neutron_client, props, net_key, net_id_key):"},{"line_number":76,"context_line":"        if props.get(net_key):"},{"line_number":77,"context_line":"            props[net_id_key] \u003d NeutronResource._find_neutron_resource("},{"line_number":78,"context_line":"                neutron_client, props, net_key, \u0027network\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9ad9bd40_e8173eec","line":75,"in_reply_to":"9ad9bd40_edc3e254","updated":"2014-05-06 21:27:24.000000000","message":"I pondered this issue while reviewing. To me, the purpose of this method is to mutate the passed props dict, and returning the UUID is just a convenience. I\u0027m OK with the current implementation.\n\nUsers can call _find_neutron_resource themselves if all they want is the lookup.","commit_id":"3b05f304952c54b350621eeb7acb0ae768dbae39"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"b4949220614d34c1f4f18bcee48232148850aba6","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from heat.openstack.common import uuidutils"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from neutronclient.common.exceptions import NeutronClientException"},{"line_number":23,"context_line":"from neutronclient.neutron import v2_0 as neutronV20"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"logger \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9ad9bd40_e67da51d","line":23,"updated":"2014-05-07 11:50:26.000000000","message":"another question - in router.py this import was conditional. why not here?\n\nalso could you please move these two lines above other imports? there is ongoing effort to enable H306 check (import in alpha order), so third-party packages imports should precede project imports (disclaimer - the effort is mine :) and I\u0027ve fixed this file already)","commit_id":"4c3b27bde935b0bdc4f4ad92f36e3367a63f6892"},{"author":{"_account_id":8833,"name":"Rabi Mishra","email":"ramishra@redhat.com","username":"rabi"},"change_message_id":"264a2c8db4a922f16669d5bb8cceebfe1c2fb2bf","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from heat.openstack.common import uuidutils"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from neutronclient.common.exceptions import NeutronClientException"},{"line_number":23,"context_line":"from neutronclient.neutron import v2_0 as neutronV20"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"logger \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7adec928_c512f0b3","line":23,"in_reply_to":"9ad9bd40_e67da51d","updated":"2014-05-08 13:20:25.000000000","message":"I didn\u0027t change to conditional import as it\u0027s unrelated to this change. Import of \u0027NeutronClientException\u0027 is unconditional earlier. OK, will move neutron imports to the top. If required this can be part of another commit.","commit_id":"4c3b27bde935b0bdc4f4ad92f36e3367a63f6892"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"4aa4064080a22a4c514575b41a772dcb2509f335","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            if not prop_value and not depr_prop_value:"},{"line_number":64,"context_line":"                msg \u003d _(\u0027Either %(prop_key)s or %(depr_prop_key)s\u0027"},{"line_number":65,"context_line":"                        \u0027 should be specified.\u0027"},{"line_number":66,"context_line":"                        ), {\u0027prop_key\u0027: prop_key,"},{"line_number":67,"context_line":"                            \u0027depr_prop_key\u0027: depr_prop_key}"},{"line_number":68,"context_line":"                raise exception.StackValidationFailed(message\u003dmsg)"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9ad9bd40_6684355e","line":66,"updated":"2014-05-07 11:25:03.000000000","message":"this is wrong, as the msg is now tuple. should\u0027ve been % instead of ,\n\nand you actually do not test this execution path, thus it was uncaught","commit_id":"4c3b27bde935b0bdc4f4ad92f36e3367a63f6892"},{"author":{"_account_id":8833,"name":"Rabi Mishra","email":"ramishra@redhat.com","username":"rabi"},"change_message_id":"264a2c8db4a922f16669d5bb8cceebfe1c2fb2bf","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            if not prop_value and not depr_prop_value:"},{"line_number":64,"context_line":"                msg \u003d _(\u0027Either %(prop_key)s or %(depr_prop_key)s\u0027"},{"line_number":65,"context_line":"                        \u0027 should be specified.\u0027"},{"line_number":66,"context_line":"                        ), {\u0027prop_key\u0027: prop_key,"},{"line_number":67,"context_line":"                            \u0027depr_prop_key\u0027: depr_prop_key}"},{"line_number":68,"context_line":"                raise exception.StackValidationFailed(message\u003dmsg)"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7adec928_e517eca1","line":66,"in_reply_to":"9ad9bd40_6684355e","updated":"2014-05-08 13:20:25.000000000","message":"oops.. Thanks.. missed the test somehow..Added a test too.","commit_id":"4c3b27bde935b0bdc4f4ad92f36e3367a63f6892"}],"heat/engine/resources/neutron/port.py":[{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"a8b624d2f4e3d6f60a484ebbb1ea30d9a6e6e948","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        NETWORK: properties.Schema("},{"line_number":60,"context_line":"            properties.Schema.STRING,"},{"line_number":61,"context_line":"            _(\u0027Network  this port belongs to.\u0027)"},{"line_number":62,"context_line":"        ),"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        NAME: properties.Schema("}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAW3%2F%2F5t0%3D","line":61,"updated":"2014-04-09 15:48:17.000000000","message":"double space","commit_id":"7654689b2d49a68cbe3483664f9b63f18ff53d07"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"a8b624d2f4e3d6f60a484ebbb1ea30d9a6e6e948","unresolved":false,"context_lines":[{"line_number":188,"context_line":"                        subnet.Subnet.NETWORK) \u003d\u003d"},{"line_number":189,"context_line":"                    self.properties.get(self.NETWORK) or"},{"line_number":190,"context_line":"                    resource.properties.get(subnet.Subnet.NETWORK_ID) \u003d\u003d"},{"line_number":191,"context_line":"                        self.properties.get(self.NETWORK_ID)):"},{"line_number":192,"context_line":"                    deps +\u003d (self, resource)"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def handle_create(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAW3%2F%2F5to%3D","line":191,"updated":"2014-04-09 15:48:17.000000000","message":"Add intermediate variables please","commit_id":"7654689b2d49a68cbe3483664f9b63f18ff53d07"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"c49f11f1a3bbb820af58ddff79f40a4512301d05","unresolved":false,"context_lines":[{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    update_allowed_keys \u003d (\u0027Properties\u0027,)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    # @staticmethod"},{"line_number":171,"context_line":"    # def _validate_fixed_ip_list(fixed_ip_list, prop_key, depr_prop_key):"},{"line_number":172,"context_line":"    #     for fixed_ip in fixed_ip_list:"},{"line_number":173,"context_line":"    #         for key, value in fixed_ip.items():"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad9bd40_af204ef8","line":170,"updated":"2014-05-01 23:09:20.000000000","message":"this needs to be deleted","commit_id":"4e6a04ca5314e7e4f32c741de9164978ae0eb26c"},{"author":{"_account_id":8833,"name":"Rabi Mishra","email":"ramishra@redhat.com","username":"rabi"},"change_message_id":"954be29a8d034c78737dd142775c8fb64d6f109c","unresolved":false,"context_lines":[{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    update_allowed_keys \u003d (\u0027Properties\u0027,)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    # @staticmethod"},{"line_number":171,"context_line":"    # def _validate_fixed_ip_list(fixed_ip_list, prop_key, depr_prop_key):"},{"line_number":172,"context_line":"    #     for fixed_ip in fixed_ip_list:"},{"line_number":173,"context_line":"    #         for key, value in fixed_ip.items():"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad9bd40_7b3e04ba","line":170,"in_reply_to":"9ad9bd40_af204ef8","updated":"2014-05-02 02:44:12.000000000","message":"Done","commit_id":"4e6a04ca5314e7e4f32c741de9164978ae0eb26c"}],"heat/engine/resources/neutron/router.py":[{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"a8b624d2f4e3d6f60a484ebbb1ea30d9a6e6e948","unresolved":false,"context_lines":[{"line_number":317,"context_line":"                    resource.properties.get("},{"line_number":318,"context_line":"                        subnet.Subnet.NETWORK_ID) \u003d\u003d self.properties.get("},{"line_number":319,"context_line":"                        self.NETWORK_ID)):"},{"line_number":320,"context_line":"                    deps +\u003d (self, resource)"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"    def handle_create(self):"},{"line_number":323,"context_line":"        router_id \u003d self.properties.get(self.ROUTER_ID)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAW3%2F%2F5tA%3D","line":320,"updated":"2014-04-09 15:48:17.000000000","message":"Please cleanup this whole if/elif using some intermediate variables. It should be doable without an elif.","commit_id":"7654689b2d49a68cbe3483664f9b63f18ff53d07"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"c49f11f1a3bbb820af58ddff79f40a4512301d05","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        props \u003d super(Router, self).prepare_properties(properties, name)"},{"line_number":117,"context_line":"        gateway \u003d props.get(self.EXTERNAL_GATEWAY)"},{"line_number":118,"context_line":"        if gateway:"},{"line_number":119,"context_line":"            gateway[\u0027network_id\u0027] \u003d self._resolve_network("},{"line_number":120,"context_line":"                self.neutron(), gateway,"},{"line_number":121,"context_line":"                self.EXTERNAL_GATEWAY_NETWORK, \u0027network_id\u0027)"},{"line_number":122,"context_line":"            if gateway[self.EXTERNAL_GATEWAY_ENABLE_SNAT] is None:"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad9bd40_efc7b610","line":119,"updated":"2014-05-01 23:09:20.000000000","message":"_resolve_network is already doing the assignment to gateway[\u0027network_id\u0027]","commit_id":"4e6a04ca5314e7e4f32c741de9164978ae0eb26c"},{"author":{"_account_id":8833,"name":"Rabi Mishra","email":"ramishra@redhat.com","username":"rabi"},"change_message_id":"954be29a8d034c78737dd142775c8fb64d6f109c","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        props \u003d super(Router, self).prepare_properties(properties, name)"},{"line_number":117,"context_line":"        gateway \u003d props.get(self.EXTERNAL_GATEWAY)"},{"line_number":118,"context_line":"        if gateway:"},{"line_number":119,"context_line":"            gateway[\u0027network_id\u0027] \u003d self._resolve_network("},{"line_number":120,"context_line":"                self.neutron(), gateway,"},{"line_number":121,"context_line":"                self.EXTERNAL_GATEWAY_NETWORK, \u0027network_id\u0027)"},{"line_number":122,"context_line":"            if gateway[self.EXTERNAL_GATEWAY_ENABLE_SNAT] is None:"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad9bd40_9b4bc858","line":119,"in_reply_to":"9ad9bd40_efc7b610","updated":"2014-05-02 02:44:12.000000000","message":"Done","commit_id":"4e6a04ca5314e7e4f32c741de9164978ae0eb26c"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"bf187dee1deef200afa8443a38489a2b3bd1d1b6","unresolved":false,"context_lines":[{"line_number":208,"context_line":"    }"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    @staticmethod"},{"line_number":211,"context_line":"    def _validate_depr_subnet_keys(properties, subnet_key, depr_subnet_key):"},{"line_number":212,"context_line":"        subnet_value \u003d properties.get(subnet_key)"},{"line_number":213,"context_line":"        subnet_id_value \u003d properties.get(depr_subnet_key)"},{"line_number":214,"context_line":"        if subnet_value and subnet_id_value:"}],"source_content_type":"text/x-python","patch_set":13,"id":"9ad9bd40_9b045119","line":211,"updated":"2014-05-06 09:08:54.000000000","message":"I think you can merge this method and _validate_depr_property_required (with added argument like required\u003dFalse), as the only difference in these two is whether to fail on both absent or return False. And again, this combined method could have been moved to general resource.Resource class, as there are other places where we have mutually exclusive properties, which will benefit form having this in general resource (importing neutron would seem weird in non-neutron related stuff).","commit_id":"3b05f304952c54b350621eeb7acb0ae768dbae39"},{"author":{"_account_id":8833,"name":"Rabi Mishra","email":"ramishra@redhat.com","username":"rabi"},"change_message_id":"dc313c38cf271d7436131e373169d5d6c637eec6","unresolved":false,"context_lines":[{"line_number":208,"context_line":"    }"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    @staticmethod"},{"line_number":211,"context_line":"    def _validate_depr_subnet_keys(properties, subnet_key, depr_subnet_key):"},{"line_number":212,"context_line":"        subnet_value \u003d properties.get(subnet_key)"},{"line_number":213,"context_line":"        subnet_id_value \u003d properties.get(depr_subnet_key)"},{"line_number":214,"context_line":"        if subnet_value and subnet_id_value:"}],"source_content_type":"text/x-python","patch_set":13,"id":"9ad9bd40_ea010807","line":211,"in_reply_to":"9ad9bd40_9b045119","updated":"2014-05-06 10:11:33.000000000","message":"Same as network, this would go away after the \u0027subnet_id\u0027 property is removed.","commit_id":"3b05f304952c54b350621eeb7acb0ae768dbae39"}],"heat/tests/test_neutron.py":[{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"b91c74c06fb4df6091beb17fc139b13efb708b06","unresolved":false,"context_lines":[{"line_number":930,"context_line":"        # assert the dependency (implicit or explicit) between the ports"},{"line_number":931,"context_line":"        # and the subnet"},{"line_number":932,"context_line":"        self.assertIn(stack[\u0027port\u0027], stack.dependencies[stack[\u0027subnet\u0027]])"},{"line_number":933,"context_line":"        self.assertIn(stack[\u0027port2\u0027], stack.dependencies[stack[\u0027subnet\u0027]])"},{"line_number":934,"context_line":""},{"line_number":935,"context_line":"    def _test_subnet(self, resolve_neutron\u003dTrue):"},{"line_number":936,"context_line":"        clients.OpenStackClients.keystone().AndReturn("}],"source_content_type":"text/x-python","patch_set":15,"id":"7adec928_0583e256","line":933,"updated":"2014-05-09 07:53:48.000000000","message":"missing a self.m.VerifyAll()","commit_id":"82a6b34786e8d43561b48e18ed8906c1306ce47f"}]}
