)]}'
{"doc/source/api/dictutils.rst":[{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"3bfd9d63c64ee68a71b81beeba1405e2a27a3483","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":" securityutils"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":".. automodule:: oslo_utils.securityutils"}],"source_content_type":"text/x-rst","patch_set":11,"id":"ba5da102_a6ab9a1c","line":2,"range":{"start_line":2,"start_character":1,"end_line":2,"end_character":14},"updated":"2016-10-28 14:01:14.000000000","message":"dictutils","commit_id":"205e504870c2f0fd87148514c01ead0a26ca5a01"},{"author":{"_account_id":22752,"name":"Hanxi Liu","email":"apolloliuhx@gmail.com","username":"Hanxi_Liu"},"change_message_id":"e86dee5c8a350d9a2629b5f1b7ad21e3aeaf021b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":" securityutils"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":".. automodule:: oslo_utils.securityutils"}],"source_content_type":"text/x-rst","patch_set":11,"id":"ba5da102_a9f28dd0","line":2,"range":{"start_line":2,"start_character":1,"end_line":2,"end_character":14},"in_reply_to":"ba5da102_a6ab9a1c","updated":"2016-10-28 14:24:24.000000000","message":"Done","commit_id":"205e504870c2f0fd87148514c01ead0a26ca5a01"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"3bfd9d63c64ee68a71b81beeba1405e2a27a3483","unresolved":false,"context_lines":[{"line_number":2,"context_line":" securityutils"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":".. automodule:: oslo_utils.securityutils"},{"line_number":6,"context_line":"   :members:"}],"source_content_type":"text/x-rst","patch_set":11,"id":"ba5da102_c6a6ce52","line":5,"range":{"start_line":5,"start_character":27,"end_line":5,"end_character":40},"updated":"2016-10-28 14:01:14.000000000","message":"dictutils","commit_id":"205e504870c2f0fd87148514c01ead0a26ca5a01"},{"author":{"_account_id":22752,"name":"Hanxi Liu","email":"apolloliuhx@gmail.com","username":"Hanxi_Liu"},"change_message_id":"e86dee5c8a350d9a2629b5f1b7ad21e3aeaf021b","unresolved":false,"context_lines":[{"line_number":2,"context_line":" securityutils"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":".. automodule:: oslo_utils.securityutils"},{"line_number":6,"context_line":"   :members:"}],"source_content_type":"text/x-rst","patch_set":11,"id":"ba5da102_e9bac5e0","line":5,"range":{"start_line":5,"start_character":27,"end_line":5,"end_character":40},"in_reply_to":"ba5da102_c6a6ce52","updated":"2016-10-28 14:24:24.000000000","message":"Done","commit_id":"205e504870c2f0fd87148514c01ead0a26ca5a01"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"99fd268a293111fb3073a17ca2eec9534fc0c37b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":" dictutils"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"ba5da102_31379ee4","line":1,"range":{"start_line":1,"start_character":11,"end_line":1,"end_character":13},"updated":"2016-10-31 15:55:56.000000000","message":"extra \u003d","commit_id":"12d7adf54382fbfc5e954bb1eb3e1803b363d660"},{"author":{"_account_id":22752,"name":"Hanxi Liu","email":"apolloliuhx@gmail.com","username":"Hanxi_Liu"},"change_message_id":"c094584b1e39542d341785552bb65972f2001707","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":" dictutils"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"ba5da102_267923f7","line":1,"range":{"start_line":1,"start_character":11,"end_line":1,"end_character":13},"in_reply_to":"ba5da102_31379ee4","updated":"2016-10-31 16:35:33.000000000","message":"Done","commit_id":"12d7adf54382fbfc5e954bb1eb3e1803b363d660"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"99fd268a293111fb3073a17ca2eec9534fc0c37b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":" dictutils"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":".. automodule:: oslo_utils.dictutils"},{"line_number":6,"context_line":"   :members:"}],"source_content_type":"text/x-rst","patch_set":15,"id":"ba5da102_5136d2e6","line":3,"range":{"start_line":3,"start_character":11,"end_line":3,"end_character":13},"updated":"2016-10-31 15:55:56.000000000","message":"extra \u003d","commit_id":"12d7adf54382fbfc5e954bb1eb3e1803b363d660"},{"author":{"_account_id":22752,"name":"Hanxi Liu","email":"apolloliuhx@gmail.com","username":"Hanxi_Liu"},"change_message_id":"c094584b1e39542d341785552bb65972f2001707","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":" dictutils"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":".. automodule:: oslo_utils.dictutils"},{"line_number":6,"context_line":"   :members:"}],"source_content_type":"text/x-rst","patch_set":15,"id":"ba5da102_467457fc","line":3,"range":{"start_line":3,"start_character":11,"end_line":3,"end_character":13},"in_reply_to":"ba5da102_5136d2e6","updated":"2016-10-31 16:35:33.000000000","message":"Done","commit_id":"12d7adf54382fbfc5e954bb1eb3e1803b363d660"}],"doc/source/index.rst":[{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"4bc24ea24b4895e2e9e1f8984752f9f05da2ad19","unresolved":false,"context_lines":[{"line_number":29,"context_line":"   api/netutils"},{"line_number":30,"context_line":"   api/reflection"},{"line_number":31,"context_line":"   api/secretutils"},{"line_number":32,"context_line":"   api/securityutils"},{"line_number":33,"context_line":"   api/specs_matcher"},{"line_number":34,"context_line":"   api/strutils"},{"line_number":35,"context_line":"   api/timeutils"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba5da102_c08320cb","line":32,"updated":"2016-10-28 07:37:52.000000000","message":"This isn\u0027t appearing in the docs output\n\nhttp://docs-draft.openstack.org/24/391324/5/check/gate-oslo.utils-docs-ubuntu-xenial/206905c//doc/build/html/","commit_id":"97b60ccc7ad540c0da3838335d74717138914ed1"},{"author":{"_account_id":22752,"name":"Hanxi Liu","email":"apolloliuhx@gmail.com","username":"Hanxi_Liu"},"change_message_id":"6c2fad62111ea3441871bec5851ba0fe7b45d9d1","unresolved":false,"context_lines":[{"line_number":29,"context_line":"   api/netutils"},{"line_number":30,"context_line":"   api/reflection"},{"line_number":31,"context_line":"   api/secretutils"},{"line_number":32,"context_line":"   api/securityutils"},{"line_number":33,"context_line":"   api/specs_matcher"},{"line_number":34,"context_line":"   api/strutils"},{"line_number":35,"context_line":"   api/timeutils"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba5da102_03935f5c","line":32,"in_reply_to":"ba5da102_c08320cb","updated":"2016-10-28 09:24:14.000000000","message":"Done","commit_id":"97b60ccc7ad540c0da3838335d74717138914ed1"}],"doc/source/securityutils.rst":[{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"4bc24ea24b4895e2e9e1f8984752f9f05da2ad19","unresolved":false,"context_lines":[{"line_number":1,"context_line":"+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":" + securityutils"},{"line_number":3,"context_line":" +\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":" +"},{"line_number":5,"context_line":" +.. automodule:: oslo_utils.securityutils"},{"line_number":6,"context_line":" +   :members:"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba5da102_a0654c46","line":6,"range":{"start_line":1,"start_character":0,"end_line":6,"end_character":3},"updated":"2016-10-28 07:37:52.000000000","message":"Remove the +\u0027s","commit_id":"97b60ccc7ad540c0da3838335d74717138914ed1"},{"author":{"_account_id":22752,"name":"Hanxi Liu","email":"apolloliuhx@gmail.com","username":"Hanxi_Liu"},"change_message_id":"6c2fad62111ea3441871bec5851ba0fe7b45d9d1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":" + securityutils"},{"line_number":3,"context_line":" +\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":" +"},{"line_number":5,"context_line":" +.. automodule:: oslo_utils.securityutils"},{"line_number":6,"context_line":" +   :members:"}],"source_content_type":"text/x-rst","patch_set":5,"id":"ba5da102_c3b087f7","line":6,"range":{"start_line":1,"start_character":0,"end_line":6,"end_character":3},"in_reply_to":"ba5da102_a0654c46","updated":"2016-10-28 09:24:14.000000000","message":"Done","commit_id":"97b60ccc7ad540c0da3838335d74717138914ed1"}],"oslo_utils/dictutils.py":[{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"99fd268a293111fb3073a17ca2eec9534fc0c37b","unresolved":false,"context_lines":[{"line_number":19,"context_line":"def flatten_dict_to_keypairs(d, separator\u003d\u0027:\u0027):"},{"line_number":20,"context_line":"    \"\"\"Generator that produces sequence of keypairs for nested dictionaries."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    :param d: dicionaries which may be nested"},{"line_number":23,"context_line":"    :param separator: symbol between names"},{"line_number":24,"context_line":"    \"\"\""},{"line_number":25,"context_line":"    for name, value in sorted(six.iteritems(d)):"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5da102_43efe9af","line":22,"range":{"start_line":22,"start_character":14,"end_line":22,"end_character":25},"updated":"2016-10-31 15:55:56.000000000","message":"dictionaries","commit_id":"12d7adf54382fbfc5e954bb1eb3e1803b363d660"},{"author":{"_account_id":22752,"name":"Hanxi Liu","email":"apolloliuhx@gmail.com","username":"Hanxi_Liu"},"change_message_id":"c094584b1e39542d341785552bb65972f2001707","unresolved":false,"context_lines":[{"line_number":19,"context_line":"def flatten_dict_to_keypairs(d, separator\u003d\u0027:\u0027):"},{"line_number":20,"context_line":"    \"\"\"Generator that produces sequence of keypairs for nested dictionaries."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    :param d: dicionaries which may be nested"},{"line_number":23,"context_line":"    :param separator: symbol between names"},{"line_number":24,"context_line":"    \"\"\""},{"line_number":25,"context_line":"    for name, value in sorted(six.iteritems(d)):"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5da102_8664af49","line":22,"range":{"start_line":22,"start_character":14,"end_line":22,"end_character":25},"in_reply_to":"ba5da102_43efe9af","updated":"2016-10-31 16:35:33.000000000","message":"Done","commit_id":"12d7adf54382fbfc5e954bb1eb3e1803b363d660"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"f8746219f43b36e9f7bb4ebc53a648622ae49c60","unresolved":false,"context_lines":[{"line_number":19,"context_line":"def flatten_dict_to_keypairs(d, separator\u003d\u0027:\u0027):"},{"line_number":20,"context_line":"    \"\"\"Generator that produces sequence of keypairs for nested dictionaries."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    :param d: dicionaries which may be nested"},{"line_number":23,"context_line":"    :param separator: symbol between names"},{"line_number":24,"context_line":"    \"\"\""},{"line_number":25,"context_line":"    for name, value in sorted(six.iteritems(d)):"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5da102_f9ac2c37","line":22,"range":{"start_line":22,"start_character":14,"end_line":22,"end_character":25},"updated":"2016-10-31 18:07:33.000000000","message":"still have a misspelling here","commit_id":"82ea70ddc819260fd42246d36a4d32cd92ade653"}],"oslo_utils/securityutils.py":[{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"4bc24ea24b4895e2e9e1f8984752f9f05da2ad19","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def recursive_keypairs(d, separator\u003d\u0027:\u0027):"},{"line_number":19,"context_line":"    \"\"\"Generator that produces sequence of keypairs for nested dictionaries.\"\"\""},{"line_number":20,"context_line":"    for name, value in sorted(six.iteritems(d)):"},{"line_number":21,"context_line":"        if isinstance(value, dict):"},{"line_number":22,"context_line":"            for subname, subvalue in recursive_keypairs(value, separator):"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5da102_404f10bd","line":19,"updated":"2016-10-28 07:37:52.000000000","message":"Add docstring on parameters and such.","commit_id":"97b60ccc7ad540c0da3838335d74717138914ed1"},{"author":{"_account_id":22752,"name":"Hanxi Liu","email":"apolloliuhx@gmail.com","username":"Hanxi_Liu"},"change_message_id":"6c2fad62111ea3441871bec5851ba0fe7b45d9d1","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def recursive_keypairs(d, separator\u003d\u0027:\u0027):"},{"line_number":19,"context_line":"    \"\"\"Generator that produces sequence of keypairs for nested dictionaries.\"\"\""},{"line_number":20,"context_line":"    for name, value in sorted(six.iteritems(d)):"},{"line_number":21,"context_line":"        if isinstance(value, dict):"},{"line_number":22,"context_line":"            for subname, subvalue in recursive_keypairs(value, separator):"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5da102_a3ab9388","line":19,"in_reply_to":"ba5da102_404f10bd","updated":"2016-10-28 09:24:14.000000000","message":"Done","commit_id":"97b60ccc7ad540c0da3838335d74717138914ed1"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"99960d342f6f5136aafb2b606093091624af1e62","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def recursive_keypairs(nested_dictionaries, separator\u003d\u0027:\u0027):"},{"line_number":19,"context_line":"    \"\"\"Generator that produces sequence of keypairs for nested dictionaries.\"\"\""},{"line_number":20,"context_line":"    for name, value in sorted(six.iteritems(nested_dictionaries)):"},{"line_number":21,"context_line":"        if isinstance(value, dict):"},{"line_number":22,"context_line":"            for subname, subvalue in recursive_keypairs(value, separator):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5da102_665ee9ea","line":19,"updated":"2016-10-28 09:48:09.000000000","message":"Still missing docstrings on the parameters.","commit_id":"6c30dfe506dde4d99d5656809a7da8cf8e3ac1ec"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"a0d5ae52fb6524557e3cc470685051540545482d","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def recursive_keypairs(nested_dictionaries, separator\u003d\u0027:\u0027):"},{"line_number":19,"context_line":"    \"\"\"Generator that produces sequence of keypairs for nested dictionaries.\"\"\""},{"line_number":20,"context_line":"    for name, value in sorted(six.iteritems(nested_dictionaries)):"},{"line_number":21,"context_line":"        if isinstance(value, dict):"},{"line_number":22,"context_line":"            for subname, subvalue in recursive_keypairs(value, separator):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5da102_61d09354","line":19,"in_reply_to":"ba5da102_267871f2","updated":"2016-10-28 10:15:54.000000000","message":"Yes, that way it shows up nicely in the docs, since this is an oslo library, its important.","commit_id":"6c30dfe506dde4d99d5656809a7da8cf8e3ac1ec"},{"author":{"_account_id":22752,"name":"Hanxi Liu","email":"apolloliuhx@gmail.com","username":"Hanxi_Liu"},"change_message_id":"e1b3b38e9eb66929b83ecf6e39bd65bcf2816758","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def recursive_keypairs(nested_dictionaries, separator\u003d\u0027:\u0027):"},{"line_number":19,"context_line":"    \"\"\"Generator that produces sequence of keypairs for nested dictionaries.\"\"\""},{"line_number":20,"context_line":"    for name, value in sorted(six.iteritems(nested_dictionaries)):"},{"line_number":21,"context_line":"        if isinstance(value, dict):"},{"line_number":22,"context_line":"            for subname, subvalue in recursive_keypairs(value, separator):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5da102_6163331b","line":19,"in_reply_to":"ba5da102_61d09354","updated":"2016-10-28 10:32:45.000000000","message":"sorry, I was mistake for that I have put the doc under appropriate directory.","commit_id":"6c30dfe506dde4d99d5656809a7da8cf8e3ac1ec"},{"author":{"_account_id":22752,"name":"Hanxi Liu","email":"apolloliuhx@gmail.com","username":"Hanxi_Liu"},"change_message_id":"059a99e6f85b2b5f9076f43fba6b4b432a171735","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def recursive_keypairs(nested_dictionaries, separator\u003d\u0027:\u0027):"},{"line_number":19,"context_line":"    \"\"\"Generator that produces sequence of keypairs for nested dictionaries.\"\"\""},{"line_number":20,"context_line":"    for name, value in sorted(six.iteritems(nested_dictionaries)):"},{"line_number":21,"context_line":"        if isinstance(value, dict):"},{"line_number":22,"context_line":"            for subname, subvalue in recursive_keypairs(value, separator):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5da102_267871f2","line":19,"in_reply_to":"ba5da102_665ee9ea","updated":"2016-10-28 10:01:30.000000000","message":"I think it\u0027s obvious for the params\u0027 meaning. Does it still need to be added?","commit_id":"6c30dfe506dde4d99d5656809a7da8cf8e3ac1ec"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b7ef28e155a89a84117345e3e52b85a81fb2b27a","unresolved":false,"context_lines":[{"line_number":15,"context_line":"import six"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def recursive_keypairs(d, separator\u003d\u0027:\u0027):"},{"line_number":19,"context_line":"    \"\"\"Generator that produces sequence of keypairs for nested dictionaries."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    :param d: dicionaries which may be nested"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5da102_b79e6954","line":18,"updated":"2016-10-28 11:43:12.000000000","message":"The name is not very good. Something like:\n\nflatten_dict_to_keypairs\n\nwould be better","commit_id":"4c427aca172d7bf4eeddbfb47b9636f78fd92685"},{"author":{"_account_id":22752,"name":"Hanxi Liu","email":"apolloliuhx@gmail.com","username":"Hanxi_Liu"},"change_message_id":"bee4394ddee514f6087aeaa8ceb4a54be6a55d39","unresolved":false,"context_lines":[{"line_number":15,"context_line":"import six"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def recursive_keypairs(d, separator\u003d\u0027:\u0027):"},{"line_number":19,"context_line":"    \"\"\"Generator that produces sequence of keypairs for nested dictionaries."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    :param d: dicionaries which may be nested"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5da102_57318d0a","line":18,"in_reply_to":"ba5da102_b79e6954","updated":"2016-10-28 12:04:37.000000000","message":"good suggestion!","commit_id":"4c427aca172d7bf4eeddbfb47b9636f78fd92685"}],"oslo_utils/tests/test_dictutils.py":[{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"3bfd9d63c64ee68a71b81beeba1405e2a27a3483","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- coding: utf-8 -*-"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"#    Copyright (C) 2012 Yahoo! Inc. All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba5da102_266eaa01","line":3,"range":{"start_line":3,"start_character":19,"end_line":3,"end_character":23},"updated":"2016-10-28 14:01:14.000000000","message":"New file should not have an old copyright year. Also, do you work at Yahoo?","commit_id":"205e504870c2f0fd87148514c01ead0a26ca5a01"},{"author":{"_account_id":22752,"name":"Hanxi Liu","email":"apolloliuhx@gmail.com","username":"Hanxi_Liu"},"change_message_id":"e86dee5c8a350d9a2629b5f1b7ad21e3aeaf021b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- coding: utf-8 -*-"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"#    Copyright (C) 2012 Yahoo! Inc. All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba5da102_49b811e6","line":3,"range":{"start_line":3,"start_character":19,"end_line":3,"end_character":23},"in_reply_to":"ba5da102_266eaa01","updated":"2016-10-28 14:24:24.000000000","message":"Done","commit_id":"205e504870c2f0fd87148514c01ead0a26ca5a01"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"f5a2e547bfa22befecec27266eb395620829235e","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from oslo_utils import dictutils as du"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class SecurityUtilsTestCase(test_base.BaseTestCase):"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def test_flatten_dict_to_keypairs(self):"},{"line_number":26,"context_line":"        data \u003d {\u0027a\u0027: \u0027A\u0027, \u0027b\u0027: \u0027B\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba5da102_06cb661f","line":23,"range":{"start_line":23,"start_character":6,"end_line":23,"end_character":27},"updated":"2016-10-28 13:56:19.000000000","message":"Security :)","commit_id":"205e504870c2f0fd87148514c01ead0a26ca5a01"},{"author":{"_account_id":22752,"name":"Hanxi Liu","email":"apolloliuhx@gmail.com","username":"Hanxi_Liu"},"change_message_id":"e86dee5c8a350d9a2629b5f1b7ad21e3aeaf021b","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from oslo_utils import dictutils as du"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class SecurityUtilsTestCase(test_base.BaseTestCase):"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def test_flatten_dict_to_keypairs(self):"},{"line_number":26,"context_line":"        data \u003d {\u0027a\u0027: \u0027A\u0027, \u0027b\u0027: \u0027B\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba5da102_09be19d4","line":23,"range":{"start_line":23,"start_character":6,"end_line":23,"end_character":27},"in_reply_to":"ba5da102_06cb661f","updated":"2016-10-28 14:24:24.000000000","message":"Done","commit_id":"205e504870c2f0fd87148514c01ead0a26ca5a01"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"99fd268a293111fb3073a17ca2eec9534fc0c37b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- coding: utf-8 -*-"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"#    Copyright (C) 2016 EasyStack Inc. All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5da102_03a0918f","line":3,"updated":"2016-10-31 15:55:56.000000000","message":"Any reason this copyright is different than dictutils.py?","commit_id":"12d7adf54382fbfc5e954bb1eb3e1803b363d660"},{"author":{"_account_id":22752,"name":"Hanxi Liu","email":"apolloliuhx@gmail.com","username":"Hanxi_Liu"},"change_message_id":"c094584b1e39542d341785552bb65972f2001707","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- coding: utf-8 -*-"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"#    Copyright (C) 2016 EasyStack Inc. All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5da102_b90d5439","line":3,"in_reply_to":"ba5da102_03a0918f","updated":"2016-10-31 16:35:33.000000000","message":"no different, but I will change this","commit_id":"12d7adf54382fbfc5e954bb1eb3e1803b363d660"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"99fd268a293111fb3073a17ca2eec9534fc0c37b","unresolved":false,"context_lines":[{"line_number":35,"context_line":"                \u0027b\u0027: \u0027B\u0027,"},{"line_number":36,"context_line":"                \u0027nested\u0027: {\u0027a\u0027: \u0027A\u0027,"},{"line_number":37,"context_line":"                           \u0027b\u0027: \u0027B\u0027,"},{"line_number":38,"context_line":"                           },"},{"line_number":39,"context_line":"                }"},{"line_number":40,"context_line":"        separator \u003d \u0027.\u0027"},{"line_number":41,"context_line":"        pairs \u003d list(du.flatten_dict_to_keypairs(data, separator))"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5da102_23dd950e","line":38,"range":{"start_line":38,"start_character":26,"end_line":38,"end_character":27},"updated":"2016-10-31 15:55:56.000000000","message":"remove leading space or move to previous line","commit_id":"12d7adf54382fbfc5e954bb1eb3e1803b363d660"},{"author":{"_account_id":22752,"name":"Hanxi Liu","email":"apolloliuhx@gmail.com","username":"Hanxi_Liu"},"change_message_id":"c094584b1e39542d341785552bb65972f2001707","unresolved":false,"context_lines":[{"line_number":35,"context_line":"                \u0027b\u0027: \u0027B\u0027,"},{"line_number":36,"context_line":"                \u0027nested\u0027: {\u0027a\u0027: \u0027A\u0027,"},{"line_number":37,"context_line":"                           \u0027b\u0027: \u0027B\u0027,"},{"line_number":38,"context_line":"                           },"},{"line_number":39,"context_line":"                }"},{"line_number":40,"context_line":"        separator \u003d \u0027.\u0027"},{"line_number":41,"context_line":"        pairs \u003d list(du.flatten_dict_to_keypairs(data, separator))"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5da102_06225fb9","line":38,"range":{"start_line":38,"start_character":26,"end_line":38,"end_character":27},"in_reply_to":"ba5da102_23dd950e","updated":"2016-10-31 16:35:33.000000000","message":"remove leading space will cause \u0027E124 closing bracket does not match visual indentation\u0027 issue, no need to change","commit_id":"12d7adf54382fbfc5e954bb1eb3e1803b363d660"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"99fd268a293111fb3073a17ca2eec9534fc0c37b","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                \u0027nested\u0027: {\u0027a\u0027: \u0027A\u0027,"},{"line_number":37,"context_line":"                           \u0027b\u0027: \u0027B\u0027,"},{"line_number":38,"context_line":"                           },"},{"line_number":39,"context_line":"                }"},{"line_number":40,"context_line":"        separator \u003d \u0027.\u0027"},{"line_number":41,"context_line":"        pairs \u003d list(du.flatten_dict_to_keypairs(data, separator))"},{"line_number":42,"context_line":"        self.assertEqual([(\u0027a\u0027, \u0027A\u0027),"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5da102_43d8c91d","line":39,"range":{"start_line":39,"start_character":15,"end_line":39,"end_character":16},"updated":"2016-10-31 15:55:56.000000000","message":"remove leading space or move to previous line","commit_id":"12d7adf54382fbfc5e954bb1eb3e1803b363d660"},{"author":{"_account_id":22752,"name":"Hanxi Liu","email":"apolloliuhx@gmail.com","username":"Hanxi_Liu"},"change_message_id":"c094584b1e39542d341785552bb65972f2001707","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                \u0027nested\u0027: {\u0027a\u0027: \u0027A\u0027,"},{"line_number":37,"context_line":"                           \u0027b\u0027: \u0027B\u0027,"},{"line_number":38,"context_line":"                           },"},{"line_number":39,"context_line":"                }"},{"line_number":40,"context_line":"        separator \u003d \u0027.\u0027"},{"line_number":41,"context_line":"        pairs \u003d list(du.flatten_dict_to_keypairs(data, separator))"},{"line_number":42,"context_line":"        self.assertEqual([(\u0027a\u0027, \u0027A\u0027),"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5da102_26312306","line":39,"range":{"start_line":39,"start_character":15,"end_line":39,"end_character":16},"in_reply_to":"ba5da102_43d8c91d","updated":"2016-10-31 16:35:33.000000000","message":"ditto","commit_id":"12d7adf54382fbfc5e954bb1eb3e1803b363d660"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"99fd268a293111fb3073a17ca2eec9534fc0c37b","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                           \u0027b\u0027: \u0027B\u0027,"},{"line_number":38,"context_line":"                           },"},{"line_number":39,"context_line":"                }"},{"line_number":40,"context_line":"        separator \u003d \u0027.\u0027"},{"line_number":41,"context_line":"        pairs \u003d list(du.flatten_dict_to_keypairs(data, separator))"},{"line_number":42,"context_line":"        self.assertEqual([(\u0027a\u0027, \u0027A\u0027),"},{"line_number":43,"context_line":"                          (\u0027b\u0027, \u0027B\u0027),"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5da102_03c7b145","line":40,"range":{"start_line":40,"start_character":8,"end_line":40,"end_character":17},"updated":"2016-10-31 15:55:56.000000000","message":"this variable isn\u0027t necessary,","commit_id":"12d7adf54382fbfc5e954bb1eb3e1803b363d660"},{"author":{"_account_id":22752,"name":"Hanxi Liu","email":"apolloliuhx@gmail.com","username":"Hanxi_Liu"},"change_message_id":"c094584b1e39542d341785552bb65972f2001707","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                           \u0027b\u0027: \u0027B\u0027,"},{"line_number":38,"context_line":"                           },"},{"line_number":39,"context_line":"                }"},{"line_number":40,"context_line":"        separator \u003d \u0027.\u0027"},{"line_number":41,"context_line":"        pairs \u003d list(du.flatten_dict_to_keypairs(data, separator))"},{"line_number":42,"context_line":"        self.assertEqual([(\u0027a\u0027, \u0027A\u0027),"},{"line_number":43,"context_line":"                          (\u0027b\u0027, \u0027B\u0027),"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5da102_a6137365","line":40,"range":{"start_line":40,"start_character":8,"end_line":40,"end_character":17},"in_reply_to":"ba5da102_03c7b145","updated":"2016-10-31 16:35:33.000000000","message":"Done","commit_id":"12d7adf54382fbfc5e954bb1eb3e1803b363d660"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"99fd268a293111fb3073a17ca2eec9534fc0c37b","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                           },"},{"line_number":39,"context_line":"                }"},{"line_number":40,"context_line":"        separator \u003d \u0027.\u0027"},{"line_number":41,"context_line":"        pairs \u003d list(du.flatten_dict_to_keypairs(data, separator))"},{"line_number":42,"context_line":"        self.assertEqual([(\u0027a\u0027, \u0027A\u0027),"},{"line_number":43,"context_line":"                          (\u0027b\u0027, \u0027B\u0027),"},{"line_number":44,"context_line":"                          (\u0027nested.a\u0027, \u0027A\u0027),"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5da102_63dead12","line":41,"range":{"start_line":41,"start_character":55,"end_line":41,"end_character":64},"updated":"2016-10-31 15:55:56.000000000","message":"just pass \u0027.\u0027 here","commit_id":"12d7adf54382fbfc5e954bb1eb3e1803b363d660"},{"author":{"_account_id":22752,"name":"Hanxi Liu","email":"apolloliuhx@gmail.com","username":"Hanxi_Liu"},"change_message_id":"c094584b1e39542d341785552bb65972f2001707","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                           },"},{"line_number":39,"context_line":"                }"},{"line_number":40,"context_line":"        separator \u003d \u0027.\u0027"},{"line_number":41,"context_line":"        pairs \u003d list(du.flatten_dict_to_keypairs(data, separator))"},{"line_number":42,"context_line":"        self.assertEqual([(\u0027a\u0027, \u0027A\u0027),"},{"line_number":43,"context_line":"                          (\u0027b\u0027, \u0027B\u0027),"},{"line_number":44,"context_line":"                          (\u0027nested.a\u0027, \u0027A\u0027),"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5da102_7903bc0d","line":41,"range":{"start_line":41,"start_character":55,"end_line":41,"end_character":64},"in_reply_to":"ba5da102_63dead12","updated":"2016-10-31 16:35:33.000000000","message":"use \u0027separator\u003d\u0027.\u0027\u0027 will be better","commit_id":"12d7adf54382fbfc5e954bb1eb3e1803b363d660"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"497b1af7d76cf1d5773ae87e48468a543fe3fb5a","unresolved":false,"context_lines":[{"line_number":31,"context_line":"                          (\u0027nested:a\u0027, \u0027A\u0027), (\u0027nested:b\u0027, \u0027B\u0027)],"},{"line_number":32,"context_line":"                         pairs)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def test_flatten_dict_to_keypairs_with_separator(self):"},{"line_number":35,"context_line":"        data \u003d {\u0027a\u0027: \u0027A\u0027,"},{"line_number":36,"context_line":"                \u0027b\u0027: \u0027B\u0027,"},{"line_number":37,"context_line":"                \u0027nested\u0027: {\u0027a\u0027: \u0027A\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba5da102_bc5d2949","line":34,"range":{"start_line":34,"start_character":0,"end_line":34,"end_character":4},"updated":"2016-11-01 13:29:44.000000000","message":"Can\u0027t understand why indentation and list/dict formatting in this function is different from those in the previous function, though they are almost the same, and both belong to the same author :) \nI would like to see the same formatting here as above (i.e. for a data dict and for a list of expected output).","commit_id":"df4dda9b7834eb4deccae7e605967345375175ad"}],"oslo_utils/tests/test_securityutils.py":[{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"4bc24ea24b4895e2e9e1f8984752f9f05da2ad19","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from oslo_utils import securityutils"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class KeypairkeypairutilsTestCase(test_base.BaseTestCase):"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def test_recursive_keypairs(self):"},{"line_number":26,"context_line":"        data \u003d {\u0027a\u0027: \u0027A\u0027, \u0027b\u0027: \u0027B\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5da102_e0d664c4","line":23,"range":{"start_line":23,"start_character":6,"end_line":23,"end_character":20},"updated":"2016-10-28 07:37:52.000000000","message":"Keypairkeypair seems a little weird.","commit_id":"97b60ccc7ad540c0da3838335d74717138914ed1"},{"author":{"_account_id":22752,"name":"Hanxi Liu","email":"apolloliuhx@gmail.com","username":"Hanxi_Liu"},"change_message_id":"6c2fad62111ea3441871bec5851ba0fe7b45d9d1","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from oslo_utils import securityutils"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class KeypairkeypairutilsTestCase(test_base.BaseTestCase):"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def test_recursive_keypairs(self):"},{"line_number":26,"context_line":"        data \u003d {\u0027a\u0027: \u0027A\u0027, \u0027b\u0027: \u0027B\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5da102_83a68fbf","line":23,"range":{"start_line":23,"start_character":6,"end_line":23,"end_character":20},"in_reply_to":"ba5da102_e0d664c4","updated":"2016-10-28 09:24:14.000000000","message":"Done","commit_id":"97b60ccc7ad540c0da3838335d74717138914ed1"}]}
