)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"dd747c291e638386fdc247790d005b720f92f33c","unresolved":false,"context_lines":[{"line_number":15,"context_line":"This patch is cleanup and first in a row for fixing the use of HOT templates"},{"line_number":16,"context_line":"as provider templates."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Contributes to fixing bug 1224111"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Change-Id: Ia35f281f874b906aabeb684fd9caca03dd994b9c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAS3%2F%2Fpag%3D","line":18,"updated":"2013-09-23 16:40:57.000000000","message":"This tag should be Partial-Bug: #1224111\n\nhttps://wiki.openstack.org/wiki/GitCommitMessages#Including_external_references","commit_id":"c0130f8133c446cda59c84bbe29e86d2a82062f1"}],"heat/engine/hot.py":[{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"6b6c69e6bb570bfef562c7e7903fe8bf237560f9","unresolved":false,"context_lines":[{"line_number":278,"context_line":"        }.get(ptype)"},{"line_number":279,"context_line":"        return (keys, list_keys)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def do_check(self, name, value, keys):"},{"line_number":282,"context_line":"        for const_type in keys:"},{"line_number":283,"context_line":"            check \u003d self.check(const_type)"},{"line_number":284,"context_line":"            # HOT has dedicated constraints section"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAS3%2F%2Fkug%3D","line":281,"updated":"2013-09-24 14:57:04.000000000","message":"It seems to me that this is the only function we need to override if we translate the constraint keys here:\n\n  for const_type in keys:\n    check \u003d self.check(const_type)\n     \n    for constraint in self.get(CONSTRAINTS, []):\n      const_descr \u003d constraint.get(DESCRIPTION)\n\n      if (const_type \u003d\u003d parameters.MAX_LENGTH and\n          LENGTH in constraint and\n          MAX in constraint[LENGTH]):\n        check(name, value, constraint[LENGTH][MAX], const_descr)\n      elif ...\n\nBonus points for driving this from a data structure e.g.\n\n  constraint_map {\n    parameters.MAX_LENGTH: [LENGTH, MAX],\n    ...\n  }\n\n  keys \u003d constraint_map[const_type]\n\n  for constraint in self.get(CONSTRAINTS, []):\n    const_descr \u003d constraint.get(DESCRIPTION)\n\n    for key in keys:\n      if key not in constraint:\n        break\n      constraint \u003d constraint[key]\n    else:\n      check(name, value, constraint, const_descr)","commit_id":"e1517e820f93b411024dd72fe508fd593b9dfaa9"},{"author":{"_account_id":7193,"name":"Thomas Spatzier","email":"thomas.spatzier@icloud.com","username":"thomasspatzier"},"change_message_id":"20444273848623fd09a187645b16ffd70840ebe0","unresolved":false,"context_lines":[{"line_number":278,"context_line":"        }.get(ptype)"},{"line_number":279,"context_line":"        return (keys, list_keys)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def do_check(self, name, value, keys):"},{"line_number":282,"context_line":"        for const_type in keys:"},{"line_number":283,"context_line":"            check \u003d self.check(const_type)"},{"line_number":284,"context_line":"            # HOT has dedicated constraints section"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAS3%2F%2FhcE%3D","line":281,"in_reply_to":"AAAAS3%2F%2Fkug%3D","updated":"2013-09-25 09:23:18.000000000","message":"I\u0027m always happy to learn :-) I gave it a try in patch set 4. Please have a look.","commit_id":"e1517e820f93b411024dd72fe508fd593b9dfaa9"}]}
