)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"195844a732f5b0c091430e0a27b9a45b4afa6d27","unresolved":false,"context_lines":[{"line_number":21,"context_line":"This change means that an OS::Nova::Server resource wouldn\u0027t need"},{"line_number":22,"context_line":"an associated OS::Heat::AccessPolicy, AWS::IAM::User, AWS::IAM::AccessKey"},{"line_number":23,"context_line":"just so that os-collect-config can poll for metadata changes (note that"},{"line_number":24,"context_line":"the actual change that does this for OS::Nova::Server is pending)."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"partial blueprint: hot-software-config"},{"line_number":27,"context_line":"Change-Id: I52a12ad3cd750ed724893abcd6dc1084b925c089"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAATn%2F%2BPv0%3D","line":24,"updated":"2013-11-28 11:18:00.000000000","message":"So this looks like a worthwhile cleanup in it\u0027s own right, and it will probably be helpful if we implement an OAuth::AccessKey resource (I\u0027ve been looking at doing that, but it\u0027s...complicated)\n\nBut I\u0027m not sure I understand how this helps with making OS::Nova::Server not need an AccessKey, surely it still has to exist in the stack, are you just saying it won\u0027t have to be explicitly Ref\u0027d?  If so then Angus\u0027 suggestion to wrap the scaffolding in a provider resource seems better to me, rather than internal magic, I guess I need to see the pending patch to see where you\u0027re headed.","commit_id":"512a5d4f42ab470a0d696f828df09f1bf0bd7818"},{"author":{"_account_id":4715,"name":"Angus Salkeld","email":"asalkeld@redhat.com","username":"asalkeld"},"change_message_id":"de9e593d178f92224fceedacd99a2007f09e157a","unresolved":false,"context_lines":[{"line_number":14,"context_line":"the provided stack for a resource which has an associated access_key."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This could be an AccessKey resource, or any resource which has"},{"line_number":17,"context_line":"registered an access allowed hander via register_access_allowed."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"One of the objectives of hot-software-config is to reduce the"},{"line_number":20,"context_line":"amount of template scaffolding required to enable software configuration."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAATn%2F%2BDm4%3D","line":17,"updated":"2013-12-03 00:44:37.000000000","message":"handler","commit_id":"bfe61261619c3962633db49d7028ab083507a72c"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"b9609e43215cae3803037ee28a147074cbb82226","unresolved":false,"context_lines":[{"line_number":14,"context_line":"the provided stack for a resource which has an associated access_key."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This could be an AccessKey resource, or any resource which has"},{"line_number":17,"context_line":"registered an access allowed hander via register_access_allowed."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"One of the objectives of hot-software-config is to reduce the"},{"line_number":20,"context_line":"amount of template scaffolding required to enable software configuration."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAATn%2F%2BDKQ%3D","line":17,"in_reply_to":"AAAATn%2F%2BDm4%3D","updated":"2013-12-03 02:56:38.000000000","message":"Done","commit_id":"bfe61261619c3962633db49d7028ab083507a72c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"2cfe01bf51d7a9fa09e124dcb2a5f6be9c56b4e5","unresolved":false,"context_lines":[{"line_number":27,"context_line":"just so that os-collect-config can poll for metadata changes (note that"},{"line_number":28,"context_line":"the actual change that does this for OS::Nova::Server is pending)."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"partial blueprint: hot-software-config"},{"line_number":31,"context_line":"Change-Id: I52a12ad3cd750ed724893abcd6dc1084b925c089"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAATn%2F9pc4%3D","line":30,"updated":"2013-12-09 10:28:16.000000000","message":"Is it correct statement ? Git commit message info has no such information.\nWould it be better to use Implements: partial blueprint xxxxxxxxx","commit_id":"b3f9ff10c4d418a1e1b6d8f1814268cea4ae99d0"}],"heat/engine/parser.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"4f8ea78fbe980450a8d212909eecf92354095d8a","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        None if not found."},{"line_number":305,"context_line":"        \u0027\u0027\u0027"},{"line_number":306,"context_line":"        for r in self.values():"},{"line_number":307,"context_line":"            if (hasattr(r, \u0027access_key\u0027) and hasattr(r, \u0027access_allowed\u0027)"},{"line_number":308,"context_line":"                    and r.access_key \u003d\u003d access_key):"},{"line_number":309,"context_line":"                return r"},{"line_number":310,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BRw4%3D","line":307,"updated":"2013-11-27 23:44:00.000000000","message":"I\u0027m open to alternatives to this duck-typing.","commit_id":"512a5d4f42ab470a0d696f828df09f1bf0bd7818"},{"author":{"_account_id":4715,"name":"Angus Salkeld","email":"asalkeld@redhat.com","username":"asalkeld"},"change_message_id":"de9e593d178f92224fceedacd99a2007f09e157a","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        if not self.resources:"},{"line_number":314,"context_line":"            # this also triggers lazy-loading of resources"},{"line_number":315,"context_line":"            # so is required for register_access_allowed"},{"line_number":316,"context_line":"            # to be called"},{"line_number":317,"context_line":"            return False"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        handler \u003d self._access_allowed_handlers.get(access_key)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2BDmE%3D","line":316,"updated":"2013-12-03 00:44:37.000000000","message":"this doesn\u0027t make a lot of sense to me. You mean : \n In order to call register_access_allowed() we need a call to \"self.resources\" property to  trigger the loading of the resources?\n Shouldn\u0027t this be in register_access_allowed() then?","commit_id":"bfe61261619c3962633db49d7028ab083507a72c"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"b9609e43215cae3803037ee28a147074cbb82226","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        if not self.resources:"},{"line_number":314,"context_line":"            # this also triggers lazy-loading of resources"},{"line_number":315,"context_line":"            # so is required for register_access_allowed"},{"line_number":316,"context_line":"            # to be called"},{"line_number":317,"context_line":"            return False"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        handler \u003d self._access_allowed_handlers.get(access_key)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2BDKg%3D","line":316,"in_reply_to":"AAAATn%2F%2BDmE%3D","updated":"2013-12-03 02:56:38.000000000","message":"register_access_allowed gets called *by* the resources, which don\u0027t exist until lazy loading of resources is triggered","commit_id":"bfe61261619c3962633db49d7028ab083507a72c"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"dbe5c02f4cbdb527f1fbe1783d02978c6fc1b0cc","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        \u0027\u0027\u0027"},{"line_number":303,"context_line":"        Register a function which determines whether a given access key"},{"line_number":304,"context_line":"        can have access to a named resource."},{"line_number":305,"context_line":"        \u0027\u0027\u0027"},{"line_number":306,"context_line":"        self._access_allowed_handlers[access_key] \u003d handler"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    def access_allowed(self, access_key, resource_name):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9tHM%3D","line":305,"updated":"2013-12-06 22:21:29.000000000","message":"Great opportunity to make some cheap assertions.\n\n    assert callable(handler)\n\nFor instance.","commit_id":"35444c66c5c1700985c14ecba312a139313db508"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"414a2920c5a8887b629735143edda87ae783b1d8","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        \u0027\u0027\u0027"},{"line_number":303,"context_line":"        Register a function which determines whether a given access key"},{"line_number":304,"context_line":"        can have access to a named resource."},{"line_number":305,"context_line":"        \u0027\u0027\u0027"},{"line_number":306,"context_line":"        self._access_allowed_handlers[access_key] \u003d handler"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    def access_allowed(self, access_key, resource_name):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9q2M%3D","line":305,"in_reply_to":"AAAATn%2F9tHM%3D","updated":"2013-12-09 01:36:43.000000000","message":"Done","commit_id":"35444c66c5c1700985c14ecba312a139313db508"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"640dfb8a0a7d450d2950172403a56d6a11487030","unresolved":false,"context_lines":[{"line_number":299,"context_line":"                    (r.UPDATE, r.COMPLETE)) and r.FnGetRefId() \u003d\u003d refid:"},{"line_number":300,"context_line":"                return r"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"    def register_access_allowed(self, access_key, handler):"},{"line_number":303,"context_line":"        \u0027\u0027\u0027"},{"line_number":304,"context_line":"        Register a function which determines whether a given access key"},{"line_number":305,"context_line":"        can have access to a named resource."}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9ToU%3D","line":302,"updated":"2013-12-12 20:10:24.000000000","message":"Might \u0027register_access_key\u0027 be a better name for this method?","commit_id":"b3f9ff10c4d418a1e1b6d8f1814268cea4ae99d0"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"2cfe01bf51d7a9fa09e124dcb2a5f6be9c56b4e5","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        Register a function which determines whether a given access key"},{"line_number":305,"context_line":"        can have access to a named resource."},{"line_number":306,"context_line":"        \u0027\u0027\u0027"},{"line_number":307,"context_line":"        assert callable(handler), \u0027Handler is not callable\u0027"},{"line_number":308,"context_line":"        self._access_allowed_handlers[access_key] \u003d handler"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def access_allowed(self, access_key, resource_name):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9pb0%3D","line":307,"updated":"2013-12-09 10:28:16.000000000","message":"It would be better to avoid using assert out of test scope","commit_id":"b3f9ff10c4d418a1e1b6d8f1814268cea4ae99d0"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"19b17daf7ad35e55c21ef73bcbba4cdb95ab17f6","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        Register a function which determines whether a given access key"},{"line_number":305,"context_line":"        can have access to a named resource."},{"line_number":306,"context_line":"        \u0027\u0027\u0027"},{"line_number":307,"context_line":"        assert callable(handler), \u0027Handler is not callable\u0027"},{"line_number":308,"context_line":"        self._access_allowed_handlers[access_key] \u003d handler"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def access_allowed(self, access_key, resource_name):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9lmg%3D","line":307,"in_reply_to":"AAAATn%2F9pb0%3D","updated":"2013-12-09 22:57:50.000000000","message":"There are a few times where I would assert that using assert outside of test context is in fact a good idea. One of them is a function where many disparate parts of the code will call it, but it may be _very_ far away from the call that the problem is realized.\n\nThis is just to make it easier to debug a very obvious problem, that problem being somebody calling register_access_allowed with the wrong arguments. If this is left out, it is likely that the error will be found later in unit tests, but this one will show up _immediately_. If this weren\u0027t done here, and we wanted the same convenience of debugging, we\u0027d have to mock out register_access_allowed in all tests.\n\nAlso PEP8 and the OpenStack style guide are silent on the issue AFAICT.\n\nIn short, I think this assert is most useful where it is.","commit_id":"b3f9ff10c4d418a1e1b6d8f1814268cea4ae99d0"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"9924ce7253602536a88bd679ff55ea90a32d707f","unresolved":false,"context_lines":[{"line_number":299,"context_line":"                    (r.UPDATE, r.COMPLETE)) and r.FnGetRefId() \u003d\u003d refid:"},{"line_number":300,"context_line":"                return r"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"    def register_access_key(self, access_key, handler):"},{"line_number":303,"context_line":"        \u0027\u0027\u0027"},{"line_number":304,"context_line":"        Register a function which determines whether a given access key"},{"line_number":305,"context_line":"        can have access to a named resource."}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2F3P4%3D","line":302,"updated":"2014-01-07 14:51:06.000000000","message":"Can we come up with a better name for this, as it\u0027s not just registering an access_key, it\u0027s registering a key and an access_allowed_handler\n\nMaybe for alignment with access_allowed, this should just be called register_access_allowed_handler(self, access_key, handler)?\n\nAlso I wonder if we should refrain from using the access_key terminology in this top-level code, because the direction if instance-users (ref https://wiki.openstack.org/wiki/Heat/Blueprints/InstanceUsers) seems to be to use a randomly generated user/password in a separate domain?\n\nSo maybe we should have s/access_key/credential_id or something, so we can register either an access_key id, or a user_id depending on the model used for in-instance credentials?","commit_id":"2613c35153aef8cbf5de32d713e20441c7f3d1e7"}],"heat/engine/service.py":[{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"cc4c631cbd3401b88cf0d8f794cc15532927b084","unresolved":false,"context_lines":[{"line_number":551,"context_line":"        if ec2_creds:"},{"line_number":552,"context_line":"            access_key \u003d ec2_creds.get(\u0027access\u0027)"},{"line_number":553,"context_line":"            if stack.access_allowed(access_key, resource_name):"},{"line_number":554,"context_line":"                return stack[resource_name]"},{"line_number":555,"context_line":"            else:"},{"line_number":556,"context_line":"                logger.warning(_(\"Cannot access resource from wrong stack!\"))"},{"line_number":557,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F96KU%3D","line":554,"updated":"2013-12-04 16:13:39.000000000","message":"Why do you return an object now? It seems that \"return stack.acces_allowed...\" should be enough, unless there is another pending change I\u0027m missing.","commit_id":"35444c66c5c1700985c14ecba312a139313db508"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"1cb847d8c923a7f58515f94f7d4e084ad273f1b1","unresolved":false,"context_lines":[{"line_number":551,"context_line":"        if ec2_creds:"},{"line_number":552,"context_line":"            access_key \u003d ec2_creds.get(\u0027access\u0027)"},{"line_number":553,"context_line":"            if stack.access_allowed(access_key, resource_name):"},{"line_number":554,"context_line":"                return stack[resource_name]"},{"line_number":555,"context_line":"            else:"},{"line_number":556,"context_line":"                logger.warning(_(\"Cannot access resource from wrong stack!\"))"},{"line_number":557,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F902A%3D","line":554,"in_reply_to":"AAAATn%2F96KU%3D","updated":"2013-12-05 14:42:05.000000000","message":"Agreed with Tomas. Any reasons for changing that ?","commit_id":"35444c66c5c1700985c14ecba312a139313db508"},{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"cc4c631cbd3401b88cf0d8f794cc15532927b084","unresolved":false,"context_lines":[{"line_number":553,"context_line":"            if stack.access_allowed(access_key, resource_name):"},{"line_number":554,"context_line":"                return stack[resource_name]"},{"line_number":555,"context_line":"            else:"},{"line_number":556,"context_line":"                logger.warning(_(\"Cannot access resource from wrong stack!\"))"},{"line_number":557,"context_line":"        else:"},{"line_number":558,"context_line":"            logger.warning(_(\"Cannot access resource, invalid credentials!\"))"},{"line_number":559,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F96LM%3D","line":556,"updated":"2013-12-04 16:13:39.000000000","message":"This warning doesn\u0027t match what\u0027s being handled by this else clause anymore. Presumably we can\u0027t tell the difference anymore between that and access key not found, but we shouldn\u0027t display that warning.","commit_id":"35444c66c5c1700985c14ecba312a139313db508"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"4ec7ba324fa67b549e30f4ee724ef76d43d17b74","unresolved":false,"context_lines":[{"line_number":553,"context_line":"            if stack.access_allowed(access_key, resource_name):"},{"line_number":554,"context_line":"                return stack[resource_name]"},{"line_number":555,"context_line":"            else:"},{"line_number":556,"context_line":"                logger.warning(_(\"Cannot access resource from wrong stack!\"))"},{"line_number":557,"context_line":"        else:"},{"line_number":558,"context_line":"            logger.warning(_(\"Cannot access resource, invalid credentials!\"))"},{"line_number":559,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9qvk%3D","line":556,"in_reply_to":"AAAATn%2F96LM%3D","updated":"2013-12-09 01:38:17.000000000","message":"I\u0027ve removed all warnings now","commit_id":"35444c66c5c1700985c14ecba312a139313db508"},{"author":{"_account_id":6456,"name":"Sahdev Zala","email":"spzala@us.ibm.com","username":"spzala"},"change_message_id":"83d8f98e69643e9cf6a1cf224154c5f1d743ffce","unresolved":false,"context_lines":[{"line_number":620,"context_line":"        except (TypeError, AttributeError):"},{"line_number":621,"context_line":"            ec2_creds \u003d None"},{"line_number":622,"context_line":""},{"line_number":623,"context_line":"        if not ec2_creds:"},{"line_number":624,"context_line":"            return False"},{"line_number":625,"context_line":""},{"line_number":626,"context_line":"        access_key \u003d ec2_creds.get(\u0027access\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F8sVs%3D","line":623,"updated":"2013-12-23 05:02:31.000000000","message":"I guess it\u0027s still a good idea to keep the original log warning here?","commit_id":"a54ba0a7487ec4a56d0482e4d07e2cf3abb7a4b8"}]}
