)]}'
{"contrib/marconi-plugin/README.md":[{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"9467a8d9df8927554e896148111fadf933bdfcb8","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"NOTE: Heat scans several directories to find plugins. The list of directories"},{"line_number":10,"context_line":"is specified in the configuration file \"heat.conf\" with the \"plugin_dirs\""},{"line_number":11,"context_line":"directive. "},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"To install the Marconi plugin, one needs to first make sure the"},{"line_number":14,"context_line":"python-marconiclient package is installed - pip install -r requirements.txt, and"}],"source_content_type":"text/x-gfm","patch_set":6,"id":"AAAAUH%2F%2Bj2M%3D","line":11,"updated":"2014-01-24 11:46:42.000000000","message":"Trailing whitespace","commit_id":"965b485e0f760c940eff5247fba6eda645c7f6cf"},{"author":{"_account_id":7135,"name":"Liang Chen","email":"liangchen.linux@gmail.com","username":"Liang"},"change_message_id":"1acd2432aa1236c0d5420c25f819ef7018ed9d8f","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"NOTE: Heat scans several directories to find plugins. The list of directories"},{"line_number":10,"context_line":"is specified in the configuration file \"heat.conf\" with the \"plugin_dirs\""},{"line_number":11,"context_line":"directive. "},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"To install the Marconi plugin, one needs to first make sure the"},{"line_number":14,"context_line":"python-marconiclient package is installed - pip install -r requirements.txt, and"}],"source_content_type":"text/x-gfm","patch_set":6,"id":"AAAAUH%2F%2BeFI%3D","line":11,"in_reply_to":"AAAAUH%2F%2Bj2M%3D","updated":"2014-01-25 15:53:39.000000000","message":"Thanks for spotting this ;)","commit_id":"965b485e0f760c940eff5247fba6eda645c7f6cf"}],"contrib/marconi-plugin/plugin/queue.py":[{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"5007847393df05d21c7419a857584165dfe3a976","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def marconi(self, service_type\u003d\"queuing\"):"},{"line_number":39,"context_line":"        if marconiclient is None:"},{"line_number":40,"context_line":"            return None"},{"line_number":41,"context_line":"        if self._marconi:"},{"line_number":42,"context_line":"            return self._marconi"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FHew%3D","line":40,"updated":"2014-01-17 09:38:43.000000000","message":"I\u0027d remove that check from here, and put it in resource_mapping instead.","commit_id":"faafd6aec3fd0d2aa28664de25b5b1905a37274a"},{"author":{"_account_id":7135,"name":"Liang Chen","email":"liangchen.linux@gmail.com","username":"Liang"},"change_message_id":"ff99f8041730a8f2339f303e0b9e296867521c7e","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def marconi(self, service_type\u003d\"queuing\"):"},{"line_number":39,"context_line":"        if marconiclient is None:"},{"line_number":40,"context_line":"            return None"},{"line_number":41,"context_line":"        if self._marconi:"},{"line_number":42,"context_line":"            return self._marconi"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2B29w%3D","line":40,"in_reply_to":"AAAAUH%2F%2FHew%3D","updated":"2014-01-21 14:24:59.000000000","message":"Done","commit_id":"faafd6aec3fd0d2aa28664de25b5b1905a37274a"},{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"5007847393df05d21c7419a857584165dfe3a976","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        return self._marconi"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"class OSMarconiQueue(resource.Resource):"},{"line_number":66,"context_line":"    properties_schema \u003d {"},{"line_number":67,"context_line":"        \"name\": properties.Schema("},{"line_number":68,"context_line":"            properties.Schema.STRING,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FHbg%3D","line":65,"updated":"2014-01-17 09:38:43.000000000","message":"What about naming it MarconiQueue?","commit_id":"faafd6aec3fd0d2aa28664de25b5b1905a37274a"},{"author":{"_account_id":7135,"name":"Liang Chen","email":"liangchen.linux@gmail.com","username":"Liang"},"change_message_id":"ff99f8041730a8f2339f303e0b9e296867521c7e","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        return self._marconi"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"class OSMarconiQueue(resource.Resource):"},{"line_number":66,"context_line":"    properties_schema \u003d {"},{"line_number":67,"context_line":"        \"name\": properties.Schema("},{"line_number":68,"context_line":"            properties.Schema.STRING,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2B290%3D","line":65,"in_reply_to":"AAAAUH%2F%2FHbg%3D","updated":"2014-01-21 14:24:59.000000000","message":"sounds better indeed ;)","commit_id":"faafd6aec3fd0d2aa28664de25b5b1905a37274a"},{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"5007847393df05d21c7419a857584165dfe3a976","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            properties.Schema.MAP,"},{"line_number":73,"context_line":"            description\u003d_(\"Arbitrary key/value metadata to store \""},{"line_number":74,"context_line":"                          \"contextual information about this queue.\"),"},{"line_number":75,"context_line":"            update_allowed\u003dTrue)"},{"line_number":76,"context_line":"    }"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    attributes_schema \u003d {"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FHec%3D","line":75,"updated":"2014-01-17 09:38:43.000000000","message":"We have a pattern defining properties as local constants, see other resources (add NAME and METADATA)","commit_id":"faafd6aec3fd0d2aa28664de25b5b1905a37274a"},{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"5007847393df05d21c7419a857584165dfe3a976","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            description\u003d_(\"Arbitrary key/value metadata to store \""},{"line_number":74,"context_line":"                          \"contextual information about this queue.\"),"},{"line_number":75,"context_line":"            update_allowed\u003dTrue)"},{"line_number":76,"context_line":"    }"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    attributes_schema \u003d {"},{"line_number":79,"context_line":"        \"queue_id\": _(\"ID of the queue.\"),"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FHeQ%3D","line":76,"updated":"2014-01-17 09:38:43.000000000","message":"Please also add a subschema for metadata.","commit_id":"faafd6aec3fd0d2aa28664de25b5b1905a37274a"},{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"5007847393df05d21c7419a857584165dfe3a976","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    attributes_schema \u003d {"},{"line_number":79,"context_line":"        \"queue_id\": _(\"ID of the queue.\"),"},{"line_number":80,"context_line":"        \"href\": _(\"The resource href of the queue\")"},{"line_number":81,"context_line":"    }"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    update_allowed_keys \u003d (\u0027Properties\u0027,)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FHdw%3D","line":80,"updated":"2014-01-17 09:38:43.000000000","message":"Missing a full stop.","commit_id":"faafd6aec3fd0d2aa28664de25b5b1905a37274a"},{"author":{"_account_id":7135,"name":"Liang Chen","email":"liangchen.linux@gmail.com","username":"Liang"},"change_message_id":"ff99f8041730a8f2339f303e0b9e296867521c7e","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    attributes_schema \u003d {"},{"line_number":79,"context_line":"        \"queue_id\": _(\"ID of the queue.\"),"},{"line_number":80,"context_line":"        \"href\": _(\"The resource href of the queue\")"},{"line_number":81,"context_line":"    }"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    update_allowed_keys \u003d (\u0027Properties\u0027,)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2B28M%3D","line":80,"in_reply_to":"AAAAUH%2F%2FHdw%3D","updated":"2014-01-21 14:24:59.000000000","message":"Done","commit_id":"faafd6aec3fd0d2aa28664de25b5b1905a37274a"},{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"5007847393df05d21c7419a857584165dfe3a976","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        return self.clients.marconi()"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def physical_resource_name(self):"},{"line_number":93,"context_line":"        name \u003d self.properties.get(\u0027name\u0027)"},{"line_number":94,"context_line":"        if name:"},{"line_number":95,"context_line":"            return name"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FHbQ%3D","line":93,"updated":"2014-01-17 09:38:43.000000000","message":"First you don\u0027t need to use get() (everywhere in this file). Then the name is required, so you can just do \"return self.properties[\u0027name\u0027]\".","commit_id":"faafd6aec3fd0d2aa28664de25b5b1905a37274a"},{"author":{"_account_id":7135,"name":"Liang Chen","email":"liangchen.linux@gmail.com","username":"Liang"},"change_message_id":"ff99f8041730a8f2339f303e0b9e296867521c7e","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        return self.clients.marconi()"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def physical_resource_name(self):"},{"line_number":93,"context_line":"        name \u003d self.properties.get(\u0027name\u0027)"},{"line_number":94,"context_line":"        if name:"},{"line_number":95,"context_line":"            return name"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2B2JA%3D","line":93,"in_reply_to":"AAAAUH%2F%2FHbQ%3D","updated":"2014-01-21 14:24:59.000000000","message":"Done","commit_id":"faafd6aec3fd0d2aa28664de25b5b1905a37274a"},{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"5007847393df05d21c7419a857584165dfe3a976","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        # Marconi client doesn\u0027t report an error if an queue with the same"},{"line_number":106,"context_line":"        # id/name already exists, which can cause issue with stack update."},{"line_number":107,"context_line":"        if queue.exists():"},{"line_number":108,"context_line":"            raise Exception(_(\u0027Message queue %s already exists.\u0027) % queue_name)"},{"line_number":109,"context_line":"        queue.ensure_exists()"},{"line_number":110,"context_line":"        self.resource_id_set(self.properties.get(\u0027name\u0027))"},{"line_number":111,"context_line":"        return queue"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FHdU%3D","line":108,"updated":"2014-01-17 09:38:43.000000000","message":"You should use exception.Error.","commit_id":"faafd6aec3fd0d2aa28664de25b5b1905a37274a"},{"author":{"_account_id":7135,"name":"Liang Chen","email":"liangchen.linux@gmail.com","username":"Liang"},"change_message_id":"ff99f8041730a8f2339f303e0b9e296867521c7e","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        # Marconi client doesn\u0027t report an error if an queue with the same"},{"line_number":106,"context_line":"        # id/name already exists, which can cause issue with stack update."},{"line_number":107,"context_line":"        if queue.exists():"},{"line_number":108,"context_line":"            raise Exception(_(\u0027Message queue %s already exists.\u0027) % queue_name)"},{"line_number":109,"context_line":"        queue.ensure_exists()"},{"line_number":110,"context_line":"        self.resource_id_set(self.properties.get(\u0027name\u0027))"},{"line_number":111,"context_line":"        return queue"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2B21c%3D","line":108,"in_reply_to":"AAAAUH%2F%2FHdU%3D","updated":"2014-01-21 14:24:59.000000000","message":"Done","commit_id":"faafd6aec3fd0d2aa28664de25b5b1905a37274a"},{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"5007847393df05d21c7419a857584165dfe3a976","unresolved":false,"context_lines":[{"line_number":119,"context_line":"            return True"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        queue_name \u003d self.properties.get(\u0027name\u0027)"},{"line_number":122,"context_line":"        raise Exception(_(\u0027Message queue %s creation failed.\u0027) % queue_name)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def handle_update(self, json_snippet, tmpl_diff, prop_diff):"},{"line_number":125,"context_line":"        \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FHb0%3D","line":122,"updated":"2014-01-17 09:38:43.000000000","message":"Same, exception.Error.","commit_id":"faafd6aec3fd0d2aa28664de25b5b1905a37274a"},{"author":{"_account_id":7135,"name":"Liang Chen","email":"liangchen.linux@gmail.com","username":"Liang"},"change_message_id":"ff99f8041730a8f2339f303e0b9e296867521c7e","unresolved":false,"context_lines":[{"line_number":119,"context_line":"            return True"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        queue_name \u003d self.properties.get(\u0027name\u0027)"},{"line_number":122,"context_line":"        raise Exception(_(\u0027Message queue %s creation failed.\u0027) % queue_name)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def handle_update(self, json_snippet, tmpl_diff, prop_diff):"},{"line_number":125,"context_line":"        \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2B21Y%3D","line":122,"in_reply_to":"AAAAUH%2F%2FHb0%3D","updated":"2014-01-21 14:24:59.000000000","message":"Done","commit_id":"faafd6aec3fd0d2aa28664de25b5b1905a37274a"},{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"5007847393df05d21c7419a857584165dfe3a976","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        if api_endpoint.endswith(\u0027/\u0027):"},{"line_number":147,"context_line":"            return api_endpoint + \"queues/\" + queue_name"},{"line_number":148,"context_line":"        else:"},{"line_number":149,"context_line":"            return api_endpoint + \"/queues/\" + queue_name"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def _resolve_attribute(self, name):"},{"line_number":152,"context_line":"        if name \u003d\u003d \u0027queue_id\u0027:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FHcA%3D","line":149,"updated":"2014-01-17 09:38:43.000000000","message":"You should use string formatting.","commit_id":"faafd6aec3fd0d2aa28664de25b5b1905a37274a"},{"author":{"_account_id":7135,"name":"Liang Chen","email":"liangchen.linux@gmail.com","username":"Liang"},"change_message_id":"ff99f8041730a8f2339f303e0b9e296867521c7e","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        if api_endpoint.endswith(\u0027/\u0027):"},{"line_number":147,"context_line":"            return api_endpoint + \"queues/\" + queue_name"},{"line_number":148,"context_line":"        else:"},{"line_number":149,"context_line":"            return api_endpoint + \"/queues/\" + queue_name"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def _resolve_attribute(self, name):"},{"line_number":152,"context_line":"        if name \u003d\u003d \u0027queue_id\u0027:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2B2zA%3D","line":149,"in_reply_to":"AAAAUH%2F%2FHcA%3D","updated":"2014-01-21 14:24:59.000000000","message":"Done","commit_id":"faafd6aec3fd0d2aa28664de25b5b1905a37274a"},{"author":{"_account_id":7256,"name":"Randall Burt","email":"randall.burt@rackspace.com","username":"randall-burt"},"change_message_id":"53bb54a6c96ebd88563ca9211ab9f17f9db6baa5","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def __init__(self, name, json_snippet, stack):"},{"line_number":100,"context_line":"        super(MarconiQueue, self).__init__(name, json_snippet, stack)"},{"line_number":101,"context_line":"        self.clients \u003d Clients(self.context)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def marconi(self):"},{"line_number":104,"context_line":"        return self.clients.marconi()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2BdTU%3D","line":101,"updated":"2014-01-26 00:56:38.000000000","message":"While I think this is fine and certainly wouldn\u0027t hold up this patch, you may also want to consider documenting how a user should use the client implementation above by updating the clients class configuration option. This is generally  more efficient when you have multiple Queues in your stack since you save the authentication and client configuration.","commit_id":"a61d8590391d69427a95589912bf6339f62a7a54"},{"author":{"_account_id":7256,"name":"Randall Burt","email":"randall.burt@rackspace.com","username":"randall-burt"},"change_message_id":"088fca2d652f25d37b04a095d0e29e44e4d744e1","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def __init__(self, name, json_snippet, stack):"},{"line_number":100,"context_line":"        super(MarconiQueue, self).__init__(name, json_snippet, stack)"},{"line_number":101,"context_line":"        self.clients \u003d Clients(self.context)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def marconi(self):"},{"line_number":104,"context_line":"        return self.clients.marconi()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2BYLQ%3D","line":101,"in_reply_to":"AAAAUH%2F%2BcEo%3D","updated":"2014-01-27 15:24:46.000000000","message":"Heat already includes a mechanism for this. The actual client implementation is lazy loaded, so you should just have to have:\n\n  cloud_backend\u003dheat.engine.plugins.queue.Clients\n\nin your config and Heat will use that clients implementation per stack.","commit_id":"a61d8590391d69427a95589912bf6339f62a7a54"},{"author":{"_account_id":7135,"name":"Liang Chen","email":"liangchen.linux@gmail.com","username":"Liang"},"change_message_id":"12d87e666a2c21cf21e208ccdbe77971a312ffa4","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def __init__(self, name, json_snippet, stack):"},{"line_number":100,"context_line":"        super(MarconiQueue, self).__init__(name, json_snippet, stack)"},{"line_number":101,"context_line":"        self.clients \u003d Clients(self.context)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def marconi(self):"},{"line_number":104,"context_line":"        return self.clients.marconi()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2BcEo%3D","line":101,"in_reply_to":"AAAAUH%2F%2BdTU%3D","updated":"2014-01-26 14:29:40.000000000","message":"Agree. The Clients object can be reused on a per stack basis. I will think about how to share the Client object across a whole stack. Thanks!","commit_id":"a61d8590391d69427a95589912bf6339f62a7a54"},{"author":{"_account_id":7256,"name":"Randall Burt","email":"randall.burt@rackspace.com","username":"randall-burt"},"change_message_id":"53bb54a6c96ebd88563ca9211ab9f17f9db6baa5","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        queue \u003d self.marconi().queue(queue_name, auto_create\u003dFalse)"},{"line_number":115,"context_line":"        # Marconi client doesn\u0027t report an error if an queue with the same"},{"line_number":116,"context_line":"        # id/name already exists, which can cause issue with stack update."},{"line_number":117,"context_line":"        if queue.exists():"},{"line_number":118,"context_line":"            raise exception.Error(_(\u0027Message queue %s already exists.\u0027)"},{"line_number":119,"context_line":"                                  % queue_name)"},{"line_number":120,"context_line":"        queue.ensure_exists()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2BdTI%3D","line":117,"updated":"2014-01-26 00:56:38.000000000","message":"Might save some time/heartache to check for an existing Queue in validate() as well as here.","commit_id":"a61d8590391d69427a95589912bf6339f62a7a54"},{"author":{"_account_id":7135,"name":"Liang Chen","email":"liangchen.linux@gmail.com","username":"Liang"},"change_message_id":"12d87e666a2c21cf21e208ccdbe77971a312ffa4","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        queue \u003d self.marconi().queue(queue_name, auto_create\u003dFalse)"},{"line_number":115,"context_line":"        # Marconi client doesn\u0027t report an error if an queue with the same"},{"line_number":116,"context_line":"        # id/name already exists, which can cause issue with stack update."},{"line_number":117,"context_line":"        if queue.exists():"},{"line_number":118,"context_line":"            raise exception.Error(_(\u0027Message queue %s already exists.\u0027)"},{"line_number":119,"context_line":"                                  % queue_name)"},{"line_number":120,"context_line":"        queue.ensure_exists()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2BcFU%3D","line":117,"in_reply_to":"AAAAUH%2F%2BdTI%3D","updated":"2014-01-26 14:29:40.000000000","message":"That makes sense. I think I will send a patch to address this later.","commit_id":"a61d8590391d69427a95589912bf6339f62a7a54"},{"author":{"_account_id":7256,"name":"Randall Burt","email":"randall.burt@rackspace.com","username":"randall-burt"},"change_message_id":"53bb54a6c96ebd88563ca9211ab9f17f9db6baa5","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        if not self.resource_id:"},{"line_number":150,"context_line":"            return"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        queue \u003d self.marconi().queue(self.resource_id, auto_create\u003dFalse)"},{"line_number":153,"context_line":"        queue.delete()"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def href(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2BdTE%3D","line":152,"updated":"2014-01-26 00:56:38.000000000","message":"Does this *always* return a Queue? What happens if the Queue was deleted outside of Heat? Does that raise and error of some sort?","commit_id":"a61d8590391d69427a95589912bf6339f62a7a54"},{"author":{"_account_id":7135,"name":"Liang Chen","email":"liangchen.linux@gmail.com","username":"Liang"},"change_message_id":"12d87e666a2c21cf21e208ccdbe77971a312ffa4","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        if not self.resource_id:"},{"line_number":150,"context_line":"            return"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        queue \u003d self.marconi().queue(self.resource_id, auto_create\u003dFalse)"},{"line_number":153,"context_line":"        queue.delete()"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def href(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2BcFc%3D","line":152,"in_reply_to":"AAAAUH%2F%2BdTE%3D","updated":"2014-01-26 14:29:40.000000000","message":"Yeah, this always returns a Queue object, and the following queue.delete always returns silently even if the queue is deleted outside of Heat. That might be something that can be improved later, and I will update the Heat resource accordingly then.","commit_id":"a61d8590391d69427a95589912bf6339f62a7a54"}],"contrib/marconi-plugin/tests/test_queue.py":[{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"5007847393df05d21c7419a857584165dfe3a976","unresolved":false,"context_lines":[{"line_number":24,"context_line":"  \"AWSTemplateFormatVersion\" : \"2010-09-09\","},{"line_number":25,"context_line":"  \"Description\" : \"openstack Marconi queue service as a resource\","},{"line_number":26,"context_line":"  \"Parameters\" : {"},{"line_number":27,"context_line":"  },"},{"line_number":28,"context_line":"  \"Resources\" : {"},{"line_number":29,"context_line":"    \"MyQueue2\" : {"},{"line_number":30,"context_line":"      \"Type\" : \"OS::Marconi::Queue\","}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FHbA%3D","line":27,"updated":"2014-01-17 09:38:43.000000000","message":"You can remove this.","commit_id":"faafd6aec3fd0d2aa28664de25b5b1905a37274a"},{"author":{"_account_id":7135,"name":"Liang Chen","email":"liangchen.linux@gmail.com","username":"Liang"},"change_message_id":"ff99f8041730a8f2339f303e0b9e296867521c7e","unresolved":false,"context_lines":[{"line_number":24,"context_line":"  \"AWSTemplateFormatVersion\" : \"2010-09-09\","},{"line_number":25,"context_line":"  \"Description\" : \"openstack Marconi queue service as a resource\","},{"line_number":26,"context_line":"  \"Parameters\" : {"},{"line_number":27,"context_line":"  },"},{"line_number":28,"context_line":"  \"Resources\" : {"},{"line_number":29,"context_line":"    \"MyQueue2\" : {"},{"line_number":30,"context_line":"      \"Type\" : \"OS::Marconi::Queue\","}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2B2G0%3D","line":27,"in_reply_to":"AAAAUH%2F%2FHbA%3D","updated":"2014-01-21 14:24:59.000000000","message":"Done","commit_id":"faafd6aec3fd0d2aa28664de25b5b1905a37274a"},{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"5007847393df05d21c7419a857584165dfe3a976","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        tmpl \u003d parser.Template(t)"},{"line_number":80,"context_line":"        stack \u003d parser.Stack(self.ctx, stack_name, tmpl)"},{"line_number":81,"context_line":"        stack.validate()"},{"line_number":82,"context_line":"        stack.store()"},{"line_number":83,"context_line":"        return stack"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def test_create(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FHa0%3D","line":82,"updated":"2014-01-17 09:38:43.000000000","message":"If you store the stack, you should delete it using the delete_stack decorator.","commit_id":"faafd6aec3fd0d2aa28664de25b5b1905a37274a"},{"author":{"_account_id":7135,"name":"Liang Chen","email":"liangchen.linux@gmail.com","username":"Liang"},"change_message_id":"ff99f8041730a8f2339f303e0b9e296867521c7e","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        tmpl \u003d parser.Template(t)"},{"line_number":80,"context_line":"        stack \u003d parser.Stack(self.ctx, stack_name, tmpl)"},{"line_number":81,"context_line":"        stack.validate()"},{"line_number":82,"context_line":"        stack.store()"},{"line_number":83,"context_line":"        return stack"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def test_create(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2B2Gw%3D","line":82,"in_reply_to":"AAAAUH%2F%2FHa0%3D","updated":"2014-01-21 14:24:59.000000000","message":"Done","commit_id":"faafd6aec3fd0d2aa28664de25b5b1905a37274a"}],"heat/engine/resources/queue.py":[{"author":{"_account_id":4715,"name":"Angus Salkeld","email":"asalkeld@redhat.com","username":"asalkeld"},"change_message_id":"07735877fabb3bad72f98e5ae339f682ca0ffbb9","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    }"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    update_allowed_keys \u003d (\u0027Properties\u0027,)"},{"line_number":43,"context_line":"    update_allowed_properties \u003d (\u0027metadata\u0027,)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def __init__(self, name, json_snippet, stack):"},{"line_number":46,"context_line":"        super(OSMarconiQueue, self).__init__(name, json_snippet, stack)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9fig%3D","line":43,"updated":"2013-12-10 23:12:12.000000000","message":"you don\u0027t need update_allowed_properties if you have update_allowed in the property definition.","commit_id":"66b26d85e4a8b849925d85489d12509193d43ed0"},{"author":{"_account_id":7135,"name":"Liang Chen","email":"liangchen.linux@gmail.com","username":"Liang"},"change_message_id":"86707352da02aca685fbe8bfcc35cbdf9d833fb2","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    }"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    update_allowed_keys \u003d (\u0027Properties\u0027,)"},{"line_number":43,"context_line":"    update_allowed_properties \u003d (\u0027metadata\u0027,)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def __init__(self, name, json_snippet, stack):"},{"line_number":46,"context_line":"        super(OSMarconiQueue, self).__init__(name, json_snippet, stack)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9WAo%3D","line":43,"in_reply_to":"AAAATn%2F9fig%3D","updated":"2013-12-12 13:29:25.000000000","message":"yup. Thanks for the reminding!","commit_id":"66b26d85e4a8b849925d85489d12509193d43ed0"}],"heat/tests/test_queue.py":[{"author":{"_account_id":4715,"name":"Angus Salkeld","email":"asalkeld@redhat.com","username":"asalkeld"},"change_message_id":"07735877fabb3bad72f98e5ae339f682ca0ffbb9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9fhs%3D","line":1,"updated":"2013-12-10 23:12:12.000000000","message":"don\u0027t need this ^, or the empty line below.","commit_id":"66b26d85e4a8b849925d85489d12509193d43ed0"},{"author":{"_account_id":7135,"name":"Liang Chen","email":"liangchen.linux@gmail.com","username":"Liang"},"change_message_id":"86707352da02aca685fbe8bfcc35cbdf9d833fb2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9WAc%3D","line":1,"in_reply_to":"AAAATn%2F9fhs%3D","updated":"2013-12-12 13:29:25.000000000","message":"Sure ;) Thanks.","commit_id":"66b26d85e4a8b849925d85489d12509193d43ed0"}]}
