)]}'
{"doc/source/template_guide/hot_spec.rst":[{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"fede622200e1f5cc15b7af5c7385b65f1ad457ce","unresolved":false,"context_lines":[{"line_number":623,"context_line":"      properties:"},{"line_number":624,"context_line":"        # general properties ..."},{"line_number":625,"context_line":"        user_data:"},{"line_number":626,"context_line":"          get_file: my_instance_user_data.sh"},{"line_number":627,"context_line":"    my_other_instance:"},{"line_number":628,"context_line":"      type: OS::Nova::Server"},{"line_number":629,"context_line":"      properties:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAUH%2F%2FeCg%3D","line":626,"updated":"2014-01-13 15:27:39.000000000","message":"As well as resolving to a local path, do we want to extend the files section expansion in heatclient, so you can map a filename in the template to a full path or URL in the files section of the environment?\n\nI\u0027m thinking users may want to toggle between different versions of included files, without changing the template, like they can already for provider resources?","commit_id":"c7415e0695574fc1570916a6d89cf022fd294d48"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"d3242651aeee190344abecbfee1ff48eac4e9baa","unresolved":false,"context_lines":[{"line_number":623,"context_line":"      properties:"},{"line_number":624,"context_line":"        # general properties ..."},{"line_number":625,"context_line":"        user_data:"},{"line_number":626,"context_line":"          get_file: my_instance_user_data.sh"},{"line_number":627,"context_line":"    my_other_instance:"},{"line_number":628,"context_line":"      type: OS::Nova::Server"},{"line_number":629,"context_line":"      properties:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"AAAAUH%2F%2FI%2Fw%3D","line":626,"in_reply_to":"AAAAUH%2F%2FeCg%3D","updated":"2014-01-17 02:11:24.000000000","message":"Are you saying there should be a way of overriding the base url for relative paths by putting something in the environment file? If so, I don\u0027t think that would be hard - but I don\u0027t think it would be needed initially.","commit_id":"c7415e0695574fc1570916a6d89cf022fd294d48"}],"heat/engine/hot.py":[{"author":{"_account_id":7193,"name":"Thomas Spatzier","email":"thomas.spatzier@icloud.com","username":"thomasspatzier"},"change_message_id":"8fb1b119f47ef9d2ad944c3f81eef677de4a8a45","unresolved":false,"context_lines":[{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        Resolves the get_file function of the form::"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"          get_file:"},{"line_number":270,"context_line":"            \u003cstring key\u003e"},{"line_number":271,"context_line":"        \"\"\""},{"line_number":272,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2FgGs%3D","line":269,"updated":"2014-01-13 09:53:18.000000000","message":"No sure if that matters here, but shouldn\u0027t \u003cstring key\u003e be on the same line? That\u0027s how it is described in hot_spec.","commit_id":"c7415e0695574fc1570916a6d89cf022fd294d48"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"d3242651aeee190344abecbfee1ff48eac4e9baa","unresolved":false,"context_lines":[{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        Resolves the get_file function of the form::"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"          get_file:"},{"line_number":270,"context_line":"            \u003cstring key\u003e"},{"line_number":271,"context_line":"        \"\"\""},{"line_number":272,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2FJAg%3D","line":269,"in_reply_to":"AAAAUH%2F%2FgGs%3D","updated":"2014-01-17 02:11:24.000000000","message":"Yeah, it should. I\u0027ll change it.","commit_id":"c7415e0695574fc1570916a6d89cf022fd294d48"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"8f402802d91afc945d29a2e4f0c11be124be8e77","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        def handle_get_file(args):"},{"line_number":253,"context_line":"            if not (isinstance(args, basestring)):"},{"line_number":254,"context_line":"                raise TypeError("},{"line_number":255,"context_line":"                    _(\u0027Arguments to \"get_file\" must be a string\u0027))"},{"line_number":256,"context_line":"            f \u003d self.files.get(args)"},{"line_number":257,"context_line":"            if f is None:"},{"line_number":258,"context_line":"                raise ValueError(_(\u0027No content found in the \"files\" section \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2BM8Y%3D","line":255,"updated":"2014-01-29 05:07:28.000000000","message":"Should this be \"Argument\" ?\n\nThis is not a blocker, by any means, just my OCD getting the best of me, but when I read it, it seems that handle_get_file may take several arguments (args), and not just one. Maybe \"str\", \"file_str\" or \"file_path\"?","commit_id":"36998796e414e350030132286abbc9ac1fee1a2d"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"fdc4a049f7f1a0715fc8c1bdd50b760b532e2b0e","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        def handle_get_file(args):"},{"line_number":253,"context_line":"            if not (isinstance(args, basestring)):"},{"line_number":254,"context_line":"                raise TypeError("},{"line_number":255,"context_line":"                    _(\u0027Arguments to \"get_file\" must be a string\u0027))"},{"line_number":256,"context_line":"            f \u003d self.files.get(args)"},{"line_number":257,"context_line":"            if f is None:"},{"line_number":258,"context_line":"                raise ValueError(_(\u0027No content found in the \"files\" section \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2BALE%3D","line":255,"in_reply_to":"AAAAUH%2F%2BM8Y%3D","updated":"2014-01-31 04:31:59.000000000","message":"Done","commit_id":"36998796e414e350030132286abbc9ac1fee1a2d"},{"author":{"_account_id":6456,"name":"Sahdev Zala","email":"spzala@us.ibm.com","username":"spzala"},"change_message_id":"ae78692c88f5e42210962073a225aca9c950f6f4","unresolved":false,"context_lines":[{"line_number":256,"context_line":"            f \u003d self.files.get(args)"},{"line_number":257,"context_line":"            if f is None:"},{"line_number":258,"context_line":"                raise ValueError(_(\u0027No content found in the \"files\" section \u0027"},{"line_number":259,"context_line":"                                   \u0027 for get_file path: %s\u0027) % args)"},{"line_number":260,"context_line":"            return f"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        match_get_file \u003d lambda k, v: k \u003d\u003d \u0027get_file\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2BGkc%3D","line":259,"updated":"2014-01-30 04:27:28.000000000","message":"Looks great. Just a nit, extra space before \"for\".","commit_id":"36998796e414e350030132286abbc9ac1fee1a2d"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"fdc4a049f7f1a0715fc8c1bdd50b760b532e2b0e","unresolved":false,"context_lines":[{"line_number":256,"context_line":"            f \u003d self.files.get(args)"},{"line_number":257,"context_line":"            if f is None:"},{"line_number":258,"context_line":"                raise ValueError(_(\u0027No content found in the \"files\" section \u0027"},{"line_number":259,"context_line":"                                   \u0027 for get_file path: %s\u0027) % args)"},{"line_number":260,"context_line":"            return f"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        match_get_file \u003d lambda k, v: k \u003d\u003d \u0027get_file\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2BAK8%3D","line":259,"in_reply_to":"AAAAUH%2F%2BGkc%3D","updated":"2014-01-31 04:31:59.000000000","message":"Done","commit_id":"36998796e414e350030132286abbc9ac1fee1a2d"}],"heat/engine/template.py":[{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"73f866bc8672c70b984ed2a6a0255ddbb18762b7","unresolved":false,"context_lines":[{"line_number":473,"context_line":""},{"line_number":474,"context_line":"    @staticmethod"},{"line_number":475,"context_line":"    def resolve_get_file(s, transform\u003dNone):"},{"line_number":476,"context_line":"        # not implemented"},{"line_number":477,"context_line":"        return s"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"    def param_schemata(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2FiOY%3D","line":476,"updated":"2014-01-12 09:29:21.000000000","message":"I think we need to raise an exception here, so it\u0027s obvious to anyone adding this to CFN templates that it won\u0027t work?\n\nRelatedly I guess we should have a test proving that validation fails in a sensible way should users try to add this to CFN style templates.","commit_id":"c073a54b409805988de64e8c22816db7524d44b5"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"8b7cdd3dc3fd3c3e6b8d5d2a1d57eeef00022700","unresolved":false,"context_lines":[{"line_number":473,"context_line":""},{"line_number":474,"context_line":"    @staticmethod"},{"line_number":475,"context_line":"    def resolve_get_file(s, transform\u003dNone):"},{"line_number":476,"context_line":"        # not implemented"},{"line_number":477,"context_line":"        return s"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"    def param_schemata(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2FhcI%3D","line":476,"in_reply_to":"AAAAUH%2F%2FiOY%3D","updated":"2014-01-12 20:54:02.000000000","message":"I think passing through without modification is the right thing to do here, since cfn and hot shouldn\u0027t have knowledge of each other\u0027s specs.\n\nAttempts to use get_file in a cfn template will fail with a reasonably helpful error message anyway, since the properties/functions in question will be expecting a string, not a {get_file: ...} dict.","commit_id":"c073a54b409805988de64e8c22816db7524d44b5"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"8f402802d91afc945d29a2e4f0c11be124be8e77","unresolved":false,"context_lines":[{"line_number":476,"context_line":""},{"line_number":477,"context_line":"    @staticmethod"},{"line_number":478,"context_line":"    def resolve_get_file(s, transform\u003dNone):"},{"line_number":479,"context_line":"        # not implemented"},{"line_number":480,"context_line":"        return s"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"    def param_schemata(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2BM0Q%3D","line":479,"updated":"2014-01-29 05:07:28.000000000","message":"Shouldn\u0027t the explanation in patchset #1 be included in the docstring here, for future reference?","commit_id":"36998796e414e350030132286abbc9ac1fee1a2d"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"fdc4a049f7f1a0715fc8c1bdd50b760b532e2b0e","unresolved":false,"context_lines":[{"line_number":476,"context_line":""},{"line_number":477,"context_line":"    @staticmethod"},{"line_number":478,"context_line":"    def resolve_get_file(s, transform\u003dNone):"},{"line_number":479,"context_line":"        # not implemented"},{"line_number":480,"context_line":"        return s"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"    def param_schemata(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2BAK4%3D","line":479,"in_reply_to":"AAAAUH%2F%2BM0Q%3D","updated":"2014-01-31 04:31:59.000000000","message":"Done","commit_id":"36998796e414e350030132286abbc9ac1fee1a2d"}],"heat/tests/test_hot.py":[{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"9de0340f0c8d83ee8296b268f8e8567a450d77dd","unresolved":false,"context_lines":[{"line_number":260,"context_line":"            \u0027file:///tmp/foo.yaml\u0027: \u0027foo contents\u0027"},{"line_number":261,"context_line":"        })"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        self.assertEqual(tmpl.resolve_get_file(snippet), snippet_resolved)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def test_get_file_not_string(self):"},{"line_number":266,"context_line":"        \"\"\"Test get_file function with non-string argument.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2BYwI%3D","line":263,"updated":"2014-01-27 13:49:56.000000000","message":"wrong order of arguments to assertEqual, snippet_resolved is the expected value and should be first","commit_id":"2798fa33e352b02180c1678ac3a831d8463bb581"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"9de0340f0c8d83ee8296b268f8e8567a450d77dd","unresolved":false,"context_lines":[{"line_number":290,"context_line":"            \u0027file:///tmp/bar.yaml\u0027: \u0027bar content\u0027,"},{"line_number":291,"context_line":"        })"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        self.assertEqual(tmpl.resolve_get_file(snippet), snippet_resolved)"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"class StackTest(test_parser.StackTest):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2BYwA%3D","line":293,"updated":"2014-01-27 13:49:56.000000000","message":"same as line 263","commit_id":"2798fa33e352b02180c1678ac3a831d8463bb581"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"dcabb5e2657e667e0a25ea7e1bf78787155ea7db","unresolved":false,"context_lines":[{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        snippet \u003d {\u0027get_file\u0027: [\u0027file:///tmp/foo.yaml\u0027]}"},{"line_number":224,"context_line":"        tmpl \u003d parser.Template(hot_tpl_empty)"},{"line_number":225,"context_line":"        self.assertRaises(TypeError, tmpl.resolve_get_file, snippet)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    def test_get_file_missing_files(self):"},{"line_number":228,"context_line":"        \"\"\"Test get_file function with no matching key in files section.\"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F9p%2BU%3D","line":225,"updated":"2014-02-05 10:09:50.000000000","message":"Could you add check for error message.","commit_id":"5d8ec16ee4af5a624581439ad18e49d0e62eb921"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"533c3e0e082f45cb5938cedad75e709c046b0960","unresolved":false,"context_lines":[{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        snippet \u003d {\u0027get_file\u0027: [\u0027file:///tmp/foo.yaml\u0027]}"},{"line_number":224,"context_line":"        tmpl \u003d parser.Template(hot_tpl_empty)"},{"line_number":225,"context_line":"        self.assertRaises(TypeError, tmpl.resolve_get_file, snippet)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    def test_get_file_missing_files(self):"},{"line_number":228,"context_line":"        \"\"\"Test get_file function with no matching key in files section.\"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F9dQ4%3D","line":225,"in_reply_to":"AAAAUH%2F9p%2BU%3D","updated":"2014-02-06 19:33:36.000000000","message":"Done","commit_id":"5d8ec16ee4af5a624581439ad18e49d0e62eb921"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"dcabb5e2657e667e0a25ea7e1bf78787155ea7db","unresolved":false,"context_lines":[{"line_number":233,"context_line":"            \u0027file:///tmp/bar.yaml\u0027: \u0027bar contents\u0027"},{"line_number":234,"context_line":"        })"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        self.assertRaises(ValueError, tmpl.resolve_get_file, snippet)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def test_get_file_nested_does_not_resolve(self):"},{"line_number":239,"context_line":"        \"\"\"Test get_file function does not resolve nested calls.\"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F9p%2BA%3D","line":236,"updated":"2014-02-05 10:09:50.000000000","message":"Same comment about error message.","commit_id":"5d8ec16ee4af5a624581439ad18e49d0e62eb921"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"533c3e0e082f45cb5938cedad75e709c046b0960","unresolved":false,"context_lines":[{"line_number":233,"context_line":"            \u0027file:///tmp/bar.yaml\u0027: \u0027bar contents\u0027"},{"line_number":234,"context_line":"        })"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        self.assertRaises(ValueError, tmpl.resolve_get_file, snippet)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def test_get_file_nested_does_not_resolve(self):"},{"line_number":239,"context_line":"        \"\"\"Test get_file function does not resolve nested calls.\"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F9dQw%3D","line":236,"in_reply_to":"AAAAUH%2F9p%2BA%3D","updated":"2014-02-06 19:33:36.000000000","message":"Done","commit_id":"5d8ec16ee4af5a624581439ad18e49d0e62eb921"}]}
