)]}'
{"neutron_lib/api/validators/allowedaddresspairs.py":[{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"88bcc2ba77d5eff0df18334a547042ae7425fdbd","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from webob import exc"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo_config import cfg"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bf3e73b7_cbbd7f69","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":21},"updated":"2017-08-07 02:55:44.000000000","message":"This line should be put under oslo_config import line because webob is third party library.\n\nAnyway, I saw that webob isn\u0027t in requirements.txt. It\u0027s another issue so I pushed the fix patch[1].\n\n[1]: https://review.openstack.org/491315","commit_id":"63249c6278a9b20f085cfc61b981f74e04d10d35"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"42024b2c356360e59e863355bec99dcb16b4566b","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from webob import exc"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo_config import cfg"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bf3e73b7_db453b72","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":21},"in_reply_to":"bf3e73b7_cbbd7f69","updated":"2017-08-07 15:56:13.000000000","message":"Done","commit_id":"63249c6278a9b20f085cfc61b981f74e04d10d35"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"88bcc2ba77d5eff0df18334a547042ae7425fdbd","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from neutron_lib.exceptions import allowedaddresspairs as exceptions"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def _validate_allowed_address_pairs(address_pairs, valid_values\u003dNone):"},{"line_number":25,"context_line":"    \"\"\"Validates a list of allowed address pair dicts."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    Validation herein requires the caller to have registered the following"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf3e73b7_8b59b7ff","line":24,"range":{"start_line":24,"start_character":4,"end_line":24,"end_character":35},"updated":"2017-08-07 02:55:44.000000000","message":"This method is called from external so it\u0027s better to remove underscore which means internal method generally.","commit_id":"63249c6278a9b20f085cfc61b981f74e04d10d35"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"55e4cd6f7233ef17d632bf1a0384dc72d1fbb024","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from neutron_lib.exceptions import allowedaddresspairs as exceptions"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def _validate_allowed_address_pairs(address_pairs, valid_values\u003dNone):"},{"line_number":25,"context_line":"    \"\"\"Validates a list of allowed address pair dicts."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    Validation herein requires the caller to have registered the following"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f436f4f_4db975e7","line":24,"range":{"start_line":24,"start_character":4,"end_line":24,"end_character":35},"in_reply_to":"9f436f4f_1c672650","updated":"2017-08-09 22:54:16.000000000","message":"I understand your intention.","commit_id":"63249c6278a9b20f085cfc61b981f74e04d10d35"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"bb60d695982a8c2770e791551d62d451316b0257","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from neutron_lib.exceptions import allowedaddresspairs as exceptions"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def _validate_allowed_address_pairs(address_pairs, valid_values\u003dNone):"},{"line_number":25,"context_line":"    \"\"\"Validates a list of allowed address pair dicts."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    Validation herein requires the caller to have registered the following"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f436f4f_1c672650","line":24,"range":{"start_line":24,"start_character":4,"end_line":24,"end_character":35},"in_reply_to":"bf3e73b7_07835a55","updated":"2017-08-09 17:36:44.000000000","message":"We had discussed the consumption of these validators by external consumers directly invoking them (I\u0027d have to find the patch) and I thought we decided consumers shouldn\u0027t be doing that; hence the private (also follows what neutron_lib.validators.dns does). While other modules in lib may invoke it, the private nature was intended to tell consumers not to use it... I\u0027m fine with public too, but then we should probably follow suit in the dns validator.","commit_id":"63249c6278a9b20f085cfc61b981f74e04d10d35"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"42024b2c356360e59e863355bec99dcb16b4566b","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from neutron_lib.exceptions import allowedaddresspairs as exceptions"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def _validate_allowed_address_pairs(address_pairs, valid_values\u003dNone):"},{"line_number":25,"context_line":"    \"\"\"Validates a list of allowed address pair dicts."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    Validation herein requires the caller to have registered the following"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf3e73b7_9b2453c8","line":24,"range":{"start_line":24,"start_character":4,"end_line":24,"end_character":35},"in_reply_to":"bf3e73b7_8b59b7ff","updated":"2017-08-07 15:56:13.000000000","message":"Sorry, but where is this called from externally? I\u0027m not seeing it here: http://codesearch.openstack.org/?q\u003dvalidate_allowed_address_pairs\u0026i\u003dnope\u0026files\u003d\u0026repos\u003d","commit_id":"63249c6278a9b20f085cfc61b981f74e04d10d35"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"534f3da2c383c1366df62672ee01d5451fae203d","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from neutron_lib.exceptions import allowedaddresspairs as exceptions"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def _validate_allowed_address_pairs(address_pairs, valid_values\u003dNone):"},{"line_number":25,"context_line":"    \"\"\"Validates a list of allowed address pair dicts."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    Validation herein requires the caller to have registered the following"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf3e73b7_07835a55","line":24,"range":{"start_line":24,"start_character":4,"end_line":24,"end_character":35},"in_reply_to":"bf3e73b7_9b2453c8","updated":"2017-08-08 00:20:59.000000000","message":"I didn\u0027t mean it\u0027s called from external project. It means private method which isn\u0027t covered by import[1] but it\u0027s called from neutron_lib/api/definitions/allowedaddresspairs.py now. Of course, it\u0027s just convention.\n\n[1]: https://www.python.org/dev/peps/pep-0008/#descriptive-naming-styles","commit_id":"63249c6278a9b20f085cfc61b981f74e04d10d35"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"88bcc2ba77d5eff0df18334a547042ae7425fdbd","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    Validation herein requires the caller to have registered the following"},{"line_number":28,"context_line":"    oslo config options in the global CONF prior to having this validator"},{"line_number":29,"context_line":"    invoked: max_allowed_address_pair"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    :param address_pairs: A list of address pair dicts to validate."},{"line_number":32,"context_line":"    :param valid_values: Not used."}],"source_content_type":"text/x-python","patch_set":1,"id":"bf3e73b7_7634364b","line":29,"range":{"start_line":29,"start_character":4,"end_line":29,"end_character":37},"updated":"2017-08-07 02:55:44.000000000","message":"Generating reference seems be failed[1]. I\u0027m not sure the reason. I guess that it might be caused a semi-colon of \"invoked:\".\n\n[1]: http://docs-draft.openstack.org/59/490659/1/check/gate-neutron-lib-docs-ubuntu-xenial/9aec989//doc/build/html/reference/modules/neutron_lib.api.validators.html","commit_id":"63249c6278a9b20f085cfc61b981f74e04d10d35"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"42024b2c356360e59e863355bec99dcb16b4566b","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    Validation herein requires the caller to have registered the following"},{"line_number":28,"context_line":"    oslo config options in the global CONF prior to having this validator"},{"line_number":29,"context_line":"    invoked: max_allowed_address_pair"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    :param address_pairs: A list of address pair dicts to validate."},{"line_number":32,"context_line":"    :param valid_values: Not used."}],"source_content_type":"text/x-python","patch_set":1,"id":"bf3e73b7_7b0acf26","line":29,"range":{"start_line":29,"start_character":4,"end_line":29,"end_character":37},"in_reply_to":"bf3e73b7_7634364b","updated":"2017-08-07 15:56:13.000000000","message":"I don\u0027t think it failed; I think it\u0027s correct but because this is a private function it\u0027s not listed. Hence the empty module ref doc for this one. I changed the wording anyway.","commit_id":"63249c6278a9b20f085cfc61b981f74e04d10d35"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"534f3da2c383c1366df62672ee01d5451fae203d","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    Validation herein requires the caller to have registered the following"},{"line_number":28,"context_line":"    oslo config options in the global CONF prior to having this validator"},{"line_number":29,"context_line":"    invoked: max_allowed_address_pair"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    :param address_pairs: A list of address pair dicts to validate."},{"line_number":32,"context_line":"    :param valid_values: Not used."}],"source_content_type":"text/x-python","patch_set":1,"id":"9f436f4f_cfaa3dd1","line":29,"range":{"start_line":29,"start_character":4,"end_line":29,"end_character":37},"in_reply_to":"bf3e73b7_7b0acf26","updated":"2017-08-08 00:20:59.000000000","message":"\u003e this is a private function\n\nI see. You\u0027re right.","commit_id":"63249c6278a9b20f085cfc61b981f74e04d10d35"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"88bcc2ba77d5eff0df18334a547042ae7425fdbd","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    invoked: max_allowed_address_pair"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    :param address_pairs: A list of address pair dicts to validate."},{"line_number":32,"context_line":"    :param valid_values: Not used."},{"line_number":33,"context_line":"    :returns: None"},{"line_number":34,"context_line":"    :raises: AllowedAddressPairExhausted if the address pairs requested"},{"line_number":35,"context_line":"    exceeds cfg.CONF.max_allowed_address_pair. AllowedAddressPairsMissingIP"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf3e73b7_0b9ee762","line":32,"range":{"start_line":32,"start_character":4,"end_line":32,"end_character":34},"updated":"2017-08-07 02:55:44.000000000","message":"Why do we need to keep the variable?","commit_id":"63249c6278a9b20f085cfc61b981f74e04d10d35"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"42024b2c356360e59e863355bec99dcb16b4566b","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    invoked: max_allowed_address_pair"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    :param address_pairs: A list of address pair dicts to validate."},{"line_number":32,"context_line":"    :param valid_values: Not used."},{"line_number":33,"context_line":"    :returns: None"},{"line_number":34,"context_line":"    :raises: AllowedAddressPairExhausted if the address pairs requested"},{"line_number":35,"context_line":"    exceeds cfg.CONF.max_allowed_address_pair. AllowedAddressPairsMissingIP"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf3e73b7_a6a25e99","line":32,"range":{"start_line":32,"start_character":4,"end_line":32,"end_character":34},"in_reply_to":"bf3e73b7_0b9ee762","updated":"2017-08-07 15:56:13.000000000","message":"The way validators are called today (and have been historically) is to assume a 2nd arg is supported for valid values. For example [1]. If we want to also support validator functions without valid_values we\u0027d have to likely update the callers or provide some type of \"proxy\".\n\n\n[1] https://github.com/openstack/neutron-lib/blob/master/neutron_lib/api/attributes.py#L147","commit_id":"63249c6278a9b20f085cfc61b981f74e04d10d35"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"534f3da2c383c1366df62672ee01d5451fae203d","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    invoked: max_allowed_address_pair"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    :param address_pairs: A list of address pair dicts to validate."},{"line_number":32,"context_line":"    :param valid_values: Not used."},{"line_number":33,"context_line":"    :returns: None"},{"line_number":34,"context_line":"    :raises: AllowedAddressPairExhausted if the address pairs requested"},{"line_number":35,"context_line":"    exceeds cfg.CONF.max_allowed_address_pair. AllowedAddressPairsMissingIP"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f436f4f_4f888d70","line":32,"range":{"start_line":32,"start_character":4,"end_line":32,"end_character":34},"in_reply_to":"bf3e73b7_a6a25e99","updated":"2017-08-08 00:20:59.000000000","message":"I got it.","commit_id":"63249c6278a9b20f085cfc61b981f74e04d10d35"}],"neutron_lib/tests/unit/api/definitions/test_allowedaddresspairs.py":[{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"88bcc2ba77d5eff0df18334a547042ae7425fdbd","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class AllowedAddressPairsDefinitionTestCase(base.DefinitionBaseTestCase):"},{"line_number":18,"context_line":"    extension_module \u003d allowedaddresspairs"},{"line_number":19,"context_line":"    extension_resources \u003d (allowedaddresspairs.COLLECTION_NAME,)"},{"line_number":20,"context_line":"    extension_attributes \u003d (allowedaddresspairs.ADDRESS_PAIRS,)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf3e73b7_565ed2e6","line":19,"range":{"start_line":19,"start_character":27,"end_line":19,"end_character":62},"updated":"2017-08-07 02:55:44.000000000","message":"It means ports but it\u0027s not extensions resource.","commit_id":"63249c6278a9b20f085cfc61b981f74e04d10d35"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"42024b2c356360e59e863355bec99dcb16b4566b","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class AllowedAddressPairsDefinitionTestCase(base.DefinitionBaseTestCase):"},{"line_number":18,"context_line":"    extension_module \u003d allowedaddresspairs"},{"line_number":19,"context_line":"    extension_resources \u003d (allowedaddresspairs.COLLECTION_NAME,)"},{"line_number":20,"context_line":"    extension_attributes \u003d (allowedaddresspairs.ADDRESS_PAIRS,)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf3e73b7_a6cb7e51","line":19,"range":{"start_line":19,"start_character":27,"end_line":19,"end_character":62},"in_reply_to":"bf3e73b7_565ed2e6","updated":"2017-08-07 15:56:13.000000000","message":"Done","commit_id":"63249c6278a9b20f085cfc61b981f74e04d10d35"}]}
