)]}'
{"neutron_lib/placement/constants.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"046fded2ed0219a495288c533111d0c48551a6dd","unresolved":false,"context_lines":[{"line_number":16,"context_line":"RP_TRAIT_PREFIX_VNIC_TYPE \u003d \u0027CUSTOM_VNIC_TYPE_\u0027"},{"line_number":17,"context_line":"RP_TRAIT_PREFIX_PHYSNET \u003d \u0027CUSTOM_PHYSNET_\u0027"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"# resource provider classes"},{"line_number":20,"context_line":"RP_CLASS_NET_BW_EGRESS_KBPS \u003d \u0027NET_BANDWIDTH_EGRESS_KILOBITS_PER_SECOND\u0027"},{"line_number":21,"context_line":"RP_CLASS_NET_BW_INGRESS_KBPS \u003d \u0027NET_BANDWIDTH_INGRESS_KILOBITS_PER_SECOND\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_6bc0017d","line":19,"range":{"start_line":19,"start_character":2,"end_line":19,"end_character":27},"updated":"2018-06-26 15:41:10.000000000","message":"It is simply called resource classes in placement. Also these are not classes of providers these are classes of resources so if you want to mention both resource providers and resource classes then I think you should say something like \"resource classes used in resource providers\"","commit_id":"5d1cf42871e802563f809e7ca43bfe5f69275bc5"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"2d5d1925095fe2acdb444f963cad00039493c302","unresolved":false,"context_lines":[{"line_number":16,"context_line":"RP_TRAIT_PREFIX_VNIC_TYPE \u003d \u0027CUSTOM_VNIC_TYPE_\u0027"},{"line_number":17,"context_line":"RP_TRAIT_PREFIX_PHYSNET \u003d \u0027CUSTOM_PHYSNET_\u0027"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"# resource provider classes"},{"line_number":20,"context_line":"RP_CLASS_NET_BW_EGRESS_KBPS \u003d \u0027NET_BANDWIDTH_EGRESS_KILOBITS_PER_SECOND\u0027"},{"line_number":21,"context_line":"RP_CLASS_NET_BW_INGRESS_KBPS \u003d \u0027NET_BANDWIDTH_INGRESS_KILOBITS_PER_SECOND\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_d70c4543","line":19,"range":{"start_line":19,"start_character":2,"end_line":19,"end_character":27},"in_reply_to":"5f7c97a3_6bc0017d","updated":"2018-07-06 14:08:01.000000000","message":"Done","commit_id":"5d1cf42871e802563f809e7ca43bfe5f69275bc5"}],"neutron_lib/placement/utils.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"046fded2ed0219a495288c533111d0c48551a6dd","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"def traitify(string):"},{"line_number":22,"context_line":"    # cf. https://github.com/openstack/nova/blob/master/nova"},{"line_number":23,"context_line":"    #            /api/openstack/placement/schemas/trait.py#L22"},{"line_number":24,"context_line":"    return re.sub(r\u0027[^A-Z0-9_]\u0027, \u0027_\u0027, string.upper())"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_eb3971a2","line":23,"updated":"2018-06-26 15:41:10.000000000","message":"use permanent link as it could move in further versions.","commit_id":"5d1cf42871e802563f809e7ca43bfe5f69275bc5"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"2d5d1925095fe2acdb444f963cad00039493c302","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"def traitify(string):"},{"line_number":22,"context_line":"    # cf. https://github.com/openstack/nova/blob/master/nova"},{"line_number":23,"context_line":"    #            /api/openstack/placement/schemas/trait.py#L22"},{"line_number":24,"context_line":"    return re.sub(r\u0027[^A-Z0-9_]\u0027, \u0027_\u0027, string.upper())"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_92457b46","line":23,"in_reply_to":"5f7c97a3_eb3971a2","updated":"2018-07-06 14:08:01.000000000","message":"Done","commit_id":"5d1cf42871e802563f809e7ca43bfe5f69275bc5"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"6631b4fa5493e9998f91a34c5a4049382889adb7","unresolved":false,"context_lines":[{"line_number":15,"context_line":"import re"},{"line_number":16,"context_line":"import uuid"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import six"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from oslo_log import log as logging"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_d9658e4a","line":18,"updated":"2018-07-19 09:58:43.000000000","message":"nit: according to pep8 there should be 3 sections of imports: https://www.python.org/dev/peps/pep-0008/?#imports\nSo You should move six to section below :)","commit_id":"fa1db2452473a930faf1e0d1b1452822197a904b"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"e300d2abfa8578017a037d1931d160e0b2fc584c","unresolved":false,"context_lines":[{"line_number":15,"context_line":"import re"},{"line_number":16,"context_line":"import uuid"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import six"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from oslo_log import log as logging"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_1dd8b2ed","line":18,"in_reply_to":"5f7c97a3_d9658e4a","updated":"2018-07-20 11:56:55.000000000","message":"Done","commit_id":"fa1db2452473a930faf1e0d1b1452822197a904b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"6631b4fa5493e9998f91a34c5a4049382889adb7","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def traitify(string):"},{"line_number":30,"context_line":"    \u0027\u0027\u0027Translitarete a string into the character set of Placement traits."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    Traits must be expressed in a character set from the seventies. When"},{"line_number":33,"context_line":"    assembling custom trait names this function makes strings includable into"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_39604235","line":30,"range":{"start_line":30,"start_character":7,"end_line":30,"end_character":20},"updated":"2018-07-19 09:58:43.000000000","message":"Transliterate","commit_id":"fa1db2452473a930faf1e0d1b1452822197a904b"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"e300d2abfa8578017a037d1931d160e0b2fc584c","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def traitify(string):"},{"line_number":30,"context_line":"    \u0027\u0027\u0027Translitarete a string into the character set of Placement traits."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    Traits must be expressed in a character set from the seventies. When"},{"line_number":33,"context_line":"    assembling custom trait names this function makes strings includable into"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_dddd5ade","line":30,"range":{"start_line":30,"start_character":7,"end_line":30,"end_character":20},"in_reply_to":"5f7c97a3_39604235","updated":"2018-07-20 11:56:55.000000000","message":"Done","commit_id":"fa1db2452473a930faf1e0d1b1452822197a904b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"6631b4fa5493e9998f91a34c5a4049382889adb7","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                \u0027Cannot parse resource_provider_bandwidths. \u0027"},{"line_number":139,"context_line":"                \u0027Expected: non-negative integer egress value, got: %s\u0027) %"},{"line_number":140,"context_line":"                egress_str)"},{"line_number":141,"context_line":"        try:"},{"line_number":142,"context_line":"            if ingress_str \u003d\u003d \u0027\u0027:"},{"line_number":143,"context_line":"                ingress \u003d None  # not set in configuration"},{"line_number":144,"context_line":"            else:"},{"line_number":145,"context_line":"                ingress \u003d int(ingress_str)"},{"line_number":146,"context_line":"                if ingress \u003c 0:"},{"line_number":147,"context_line":"                    raise ValueError()"},{"line_number":148,"context_line":"        except ValueError:"},{"line_number":149,"context_line":"            raise ValueError(_("},{"line_number":150,"context_line":"                \u0027Cannot parse resource_provider_bandwidths. \u0027"},{"line_number":151,"context_line":"                \u0027Expected: non-negative integer ingress value, got: %s\u0027) %"},{"line_number":152,"context_line":"                ingress_str)"},{"line_number":153,"context_line":"        if device in rv:"},{"line_number":154,"context_line":"            raise ValueError(_("},{"line_number":155,"context_line":"                \u0027Cannot parse resource_provider_bandwidths. \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_994e368e","line":152,"range":{"start_line":141,"start_character":8,"end_line":152,"end_character":28},"updated":"2018-07-19 09:58:43.000000000","message":"nit: maybe You could move this part to some additional helper function and repeat it to get ingress and egress bw value as this code is (almost) exactly the same","commit_id":"fa1db2452473a930faf1e0d1b1452822197a904b"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"e300d2abfa8578017a037d1931d160e0b2fc584c","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                \u0027Cannot parse resource_provider_bandwidths. \u0027"},{"line_number":139,"context_line":"                \u0027Expected: non-negative integer egress value, got: %s\u0027) %"},{"line_number":140,"context_line":"                egress_str)"},{"line_number":141,"context_line":"        try:"},{"line_number":142,"context_line":"            if ingress_str \u003d\u003d \u0027\u0027:"},{"line_number":143,"context_line":"                ingress \u003d None  # not set in configuration"},{"line_number":144,"context_line":"            else:"},{"line_number":145,"context_line":"                ingress \u003d int(ingress_str)"},{"line_number":146,"context_line":"                if ingress \u003c 0:"},{"line_number":147,"context_line":"                    raise ValueError()"},{"line_number":148,"context_line":"        except ValueError:"},{"line_number":149,"context_line":"            raise ValueError(_("},{"line_number":150,"context_line":"                \u0027Cannot parse resource_provider_bandwidths. \u0027"},{"line_number":151,"context_line":"                \u0027Expected: non-negative integer ingress value, got: %s\u0027) %"},{"line_number":152,"context_line":"                ingress_str)"},{"line_number":153,"context_line":"        if device in rv:"},{"line_number":154,"context_line":"            raise ValueError(_("},{"line_number":155,"context_line":"                \u0027Cannot parse resource_provider_bandwidths. \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_1d22f2ba","line":152,"range":{"start_line":141,"start_character":8,"end_line":152,"end_character":28},"in_reply_to":"5f7c97a3_994e368e","updated":"2018-07-20 11:56:55.000000000","message":"Done","commit_id":"fa1db2452473a930faf1e0d1b1452822197a904b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"6631b4fa5493e9998f91a34c5a4049382889adb7","unresolved":false,"context_lines":[{"line_number":150,"context_line":"                \u0027Cannot parse resource_provider_bandwidths. \u0027"},{"line_number":151,"context_line":"                \u0027Expected: non-negative integer ingress value, got: %s\u0027) %"},{"line_number":152,"context_line":"                ingress_str)"},{"line_number":153,"context_line":"        if device in rv:"},{"line_number":154,"context_line":"            raise ValueError(_("},{"line_number":155,"context_line":"                \u0027Cannot parse resource_provider_bandwidths. \u0027"},{"line_number":156,"context_line":"                \u0027Same device listed multiple times: %s\u0027) % device)"},{"line_number":157,"context_line":"        rv[device] \u003d {"},{"line_number":158,"context_line":"            \u0027egress\u0027: egress,"},{"line_number":159,"context_line":"            \u0027ingress\u0027: ingress,"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_1938e6ea","line":156,"range":{"start_line":153,"start_character":8,"end_line":156,"end_character":66},"updated":"2018-07-19 09:58:43.000000000","message":"small optimization, this check could be done before converting ingress and egress values to integers","commit_id":"fa1db2452473a930faf1e0d1b1452822197a904b"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"e300d2abfa8578017a037d1931d160e0b2fc584c","unresolved":false,"context_lines":[{"line_number":150,"context_line":"                \u0027Cannot parse resource_provider_bandwidths. \u0027"},{"line_number":151,"context_line":"                \u0027Expected: non-negative integer ingress value, got: %s\u0027) %"},{"line_number":152,"context_line":"                ingress_str)"},{"line_number":153,"context_line":"        if device in rv:"},{"line_number":154,"context_line":"            raise ValueError(_("},{"line_number":155,"context_line":"                \u0027Cannot parse resource_provider_bandwidths. \u0027"},{"line_number":156,"context_line":"                \u0027Same device listed multiple times: %s\u0027) % device)"},{"line_number":157,"context_line":"        rv[device] \u003d {"},{"line_number":158,"context_line":"            \u0027egress\u0027: egress,"},{"line_number":159,"context_line":"            \u0027ingress\u0027: ingress,"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_ddf6ba5e","line":156,"range":{"start_line":153,"start_character":8,"end_line":156,"end_character":66},"in_reply_to":"5f7c97a3_1938e6ea","updated":"2018-07-20 11:56:55.000000000","message":"Done","commit_id":"fa1db2452473a930faf1e0d1b1452822197a904b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"6631b4fa5493e9998f91a34c5a4049382889adb7","unresolved":false,"context_lines":[{"line_number":183,"context_line":"    # https://developer.openstack.org/api-ref/placement/"},{"line_number":184,"context_line":"    #        #update-resource-provider-inventory"},{"line_number":185,"context_line":"    known_optional_params \u003d set(["},{"line_number":186,"context_line":"        \u0027allocation_ratio\u0027,"},{"line_number":187,"context_line":"        \u0027min_unit\u0027,"},{"line_number":188,"context_line":"        \u0027max_unit\u0027,"},{"line_number":189,"context_line":"        \u0027reserved\u0027,"},{"line_number":190,"context_line":"        \u0027step_size\u0027,"},{"line_number":191,"context_line":"        ])"},{"line_number":192,"context_line":"    unexpected_params \u003d set(inventory_defaults.keys()) - known_optional_params"},{"line_number":193,"context_line":"    if unexpected_params:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_4c00da00","line":190,"range":{"start_line":186,"start_character":8,"end_line":190,"end_character":20},"updated":"2018-07-19 09:58:43.000000000","message":"maybe would be good to define those in constants file?","commit_id":"fa1db2452473a930faf1e0d1b1452822197a904b"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"e300d2abfa8578017a037d1931d160e0b2fc584c","unresolved":false,"context_lines":[{"line_number":183,"context_line":"    # https://developer.openstack.org/api-ref/placement/"},{"line_number":184,"context_line":"    #        #update-resource-provider-inventory"},{"line_number":185,"context_line":"    known_optional_params \u003d set(["},{"line_number":186,"context_line":"        \u0027allocation_ratio\u0027,"},{"line_number":187,"context_line":"        \u0027min_unit\u0027,"},{"line_number":188,"context_line":"        \u0027max_unit\u0027,"},{"line_number":189,"context_line":"        \u0027reserved\u0027,"},{"line_number":190,"context_line":"        \u0027step_size\u0027,"},{"line_number":191,"context_line":"        ])"},{"line_number":192,"context_line":"    unexpected_params \u003d set(inventory_defaults.keys()) - known_optional_params"},{"line_number":193,"context_line":"    if unexpected_params:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_106739ec","line":190,"range":{"start_line":186,"start_character":8,"end_line":190,"end_character":20},"in_reply_to":"5f7c97a3_4c00da00","updated":"2018-07-20 11:56:55.000000000","message":"Done","commit_id":"fa1db2452473a930faf1e0d1b1452822197a904b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"b909477b29a358fffb5b5ed0f954df92221dde09","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    cf. https://github.com/openstack/nova/blob/18.0.0.0b2"},{"line_number":36,"context_line":"               /nova/api/openstack/placement/schemas/trait.py#L22"},{"line_number":37,"context_line":"    \u0027\u0027\u0027"},{"line_number":38,"context_line":"    return re.sub(r\u0027[^A-Z0-9_]\u0027, \u0027_\u0027, string.upper())"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"def physnet_trait(physnet):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_2ba7a4bd","line":38,"updated":"2018-07-30 13:42:21.000000000","message":"See https://github.com/openstack/os-traits/blob/master/os_traits/__init__.py#L113\n\nSince you\u0027ll be wanting os-traits as a required lib in this stuff anyway, may as well use it. It\u0027s also covers a bizarre bug with uppercasing some unicode codepoints.","commit_id":"3b55e6db9be5b927c4b5098f8f559e7e0062124b"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"f4af9cddd4e9c0fc4c795c00bd82f933e0d5a3f1","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    cf. https://github.com/openstack/nova/blob/18.0.0.0b2"},{"line_number":36,"context_line":"               /nova/api/openstack/placement/schemas/trait.py#L22"},{"line_number":37,"context_line":"    \u0027\u0027\u0027"},{"line_number":38,"context_line":"    return re.sub(r\u0027[^A-Z0-9_]\u0027, \u0027_\u0027, string.upper())"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"def physnet_trait(physnet):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_71aebca1","line":38,"in_reply_to":"5f7c97a3_2ba7a4bd","updated":"2018-08-01 11:27:08.000000000","message":"Done","commit_id":"3b55e6db9be5b927c4b5098f8f559e7e0062124b"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"48114c75dd9caa92e717a9c1ac83307902898169","unresolved":false,"context_lines":[{"line_number":38,"context_line":"def six_uuid5(namespace, name):"},{"line_number":39,"context_line":"    \u0027\u0027\u0027A uuid.uuid5 variant that takes utf-8 \u0027name\u0027 both in Python 2 and 3."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    uuid.uuid5() behaves seemingly consistently but still incompatibly"},{"line_number":42,"context_line":"    different in cPython 2 and 3. Both expects the \u0027name\u0027 parameter to have"},{"line_number":43,"context_line":"    the type of the default string literal in each language version."},{"line_number":44,"context_line":"    That is:"},{"line_number":45,"context_line":"        The cPython 2 variant expects a byte string."},{"line_number":46,"context_line":"        The cPython 3 variant expects a unicode string."},{"line_number":47,"context_line":"    Which types are called respectively \u0027str\u0027 and \u0027str\u0027 for the sake of"},{"line_number":48,"context_line":"    confusion. But the sha1() hash inside uuid5() always needs a byte string,"},{"line_number":49,"context_line":"    so we have to treat the two versions asymmetrically. See also:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    cPython 2.7:"},{"line_number":52,"context_line":"    https://github.com/python/cpython/blob"},{"line_number":53,"context_line":"           /ea9a0994cd0f4bd37799b045c34097eb21662b3d/Lib/uuid.py#L603"},{"line_number":54,"context_line":"    cPython 3.6:"},{"line_number":55,"context_line":"    https://github.com/python/cpython/blob"},{"line_number":56,"context_line":"           /e9e2fd75ccbc6e9a5221cf3525e39e9d042d843f/Lib/uuid.py#L628"},{"line_number":57,"context_line":"    \u0027\u0027\u0027"},{"line_number":58,"context_line":"    if six.PY2:"},{"line_number":59,"context_line":"        name \u003d name.encode(\u0027utf-8\u0027)"},{"line_number":60,"context_line":"    return uuid.uuid5(namespace\u003dnamespace, name\u003dname)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_fbe2712f","line":57,"range":{"start_line":41,"start_character":4,"end_line":57,"end_character":7},"updated":"2018-08-06 12:45:38.000000000","message":"small nit: instead of docstring this should be # Note() perhaps","commit_id":"97a46f3769b4a1953f694520eed225621215e220"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"6f643d91ba6838d3677efe93bf78b3362a62245a","unresolved":false,"context_lines":[{"line_number":38,"context_line":"def six_uuid5(namespace, name):"},{"line_number":39,"context_line":"    \u0027\u0027\u0027A uuid.uuid5 variant that takes utf-8 \u0027name\u0027 both in Python 2 and 3."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    uuid.uuid5() behaves seemingly consistently but still incompatibly"},{"line_number":42,"context_line":"    different in cPython 2 and 3. Both expects the \u0027name\u0027 parameter to have"},{"line_number":43,"context_line":"    the type of the default string literal in each language version."},{"line_number":44,"context_line":"    That is:"},{"line_number":45,"context_line":"        The cPython 2 variant expects a byte string."},{"line_number":46,"context_line":"        The cPython 3 variant expects a unicode string."},{"line_number":47,"context_line":"    Which types are called respectively \u0027str\u0027 and \u0027str\u0027 for the sake of"},{"line_number":48,"context_line":"    confusion. But the sha1() hash inside uuid5() always needs a byte string,"},{"line_number":49,"context_line":"    so we have to treat the two versions asymmetrically. See also:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    cPython 2.7:"},{"line_number":52,"context_line":"    https://github.com/python/cpython/blob"},{"line_number":53,"context_line":"           /ea9a0994cd0f4bd37799b045c34097eb21662b3d/Lib/uuid.py#L603"},{"line_number":54,"context_line":"    cPython 3.6:"},{"line_number":55,"context_line":"    https://github.com/python/cpython/blob"},{"line_number":56,"context_line":"           /e9e2fd75ccbc6e9a5221cf3525e39e9d042d843f/Lib/uuid.py#L628"},{"line_number":57,"context_line":"    \u0027\u0027\u0027"},{"line_number":58,"context_line":"    if six.PY2:"},{"line_number":59,"context_line":"        name \u003d name.encode(\u0027utf-8\u0027)"},{"line_number":60,"context_line":"    return uuid.uuid5(namespace\u003dnamespace, name\u003dname)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_c61319b8","line":57,"range":{"start_line":41,"start_character":4,"end_line":57,"end_character":7},"in_reply_to":"3f79a3b5_fbe2712f","updated":"2018-08-06 13:02:13.000000000","message":"Done","commit_id":"97a46f3769b4a1953f694520eed225621215e220"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"46f4a34e3c7b9ab33b60c432d8296b75f5368c8d","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    :raises: ValueError on invalid input."},{"line_number":99,"context_line":"    \u0027\u0027\u0027"},{"line_number":100,"context_line":"    try:"},{"line_number":101,"context_line":"        if bw_str \u003d\u003d \u0027\u0027:"},{"line_number":102,"context_line":"            bw \u003d None  # not set in configuration"},{"line_number":103,"context_line":"        else:"},{"line_number":104,"context_line":"            bw \u003d int(bw_str)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_096ebd00","line":101,"updated":"2018-08-09 08:22:05.000000000","message":"something like:\n\n    bw \u003d None\n    if bw_str:\n        bw \u003d int(bw_str)\n        if bw \u003c 0:\n            raise ValueError()\n\nwould be one line less :)","commit_id":"1ad030b887b8765339eba4a43d9c180c435a7f6e"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"9250fde07e18460f70f330573e38a3534d1186c8","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    :raises: ValueError on invalid input."},{"line_number":99,"context_line":"    \u0027\u0027\u0027"},{"line_number":100,"context_line":"    try:"},{"line_number":101,"context_line":"        if bw_str \u003d\u003d \u0027\u0027:"},{"line_number":102,"context_line":"            bw \u003d None  # not set in configuration"},{"line_number":103,"context_line":"        else:"},{"line_number":104,"context_line":"            bw \u003d int(bw_str)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_f89be914","line":101,"in_reply_to":"3f79a3b5_096ebd00","updated":"2018-08-10 08:55:35.000000000","message":"Done","commit_id":"1ad030b887b8765339eba4a43d9c180c435a7f6e"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"8fcfff20fe0b5b37d7c55ee0abcc7e824b283f58","unresolved":false,"context_lines":[{"line_number":130,"context_line":"    rv \u003d {}"},{"line_number":131,"context_line":"    for bandwidth in bandwidths:"},{"line_number":132,"context_line":"        try:"},{"line_number":133,"context_line":"            device, egress_str, ingress_str \u003d bandwidth.split(\u0027:\u0027)"},{"line_number":134,"context_line":"        except ValueError:"},{"line_number":135,"context_line":"            raise ValueError(_("},{"line_number":136,"context_line":"                \u0027Cannot parse resource_provider_bandwidths. \u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_1874d067","line":133,"range":{"start_line":133,"start_character":56,"end_line":133,"end_character":61},"updated":"2018-08-08 20:14:30.000000000","message":"A minor issue. The spec said the following is supported\n\n  # Resource provider created, no inventory reported.\n  resource_provider_bandwidths \u003d br0\n  resource_provider_bandwidths \u003d br0::\n\nbut the agent failed to start if I don\u0027t give the \u0027::\u0027. If this is intentional or the spec is outdated, it is fine.","commit_id":"1ad030b887b8765339eba4a43d9c180c435a7f6e"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"780807b39b73ec28ae13d469671dc2165e11375b","unresolved":false,"context_lines":[{"line_number":130,"context_line":"    rv \u003d {}"},{"line_number":131,"context_line":"    for bandwidth in bandwidths:"},{"line_number":132,"context_line":"        try:"},{"line_number":133,"context_line":"            device, egress_str, ingress_str \u003d bandwidth.split(\u0027:\u0027)"},{"line_number":134,"context_line":"        except ValueError:"},{"line_number":135,"context_line":"            raise ValueError(_("},{"line_number":136,"context_line":"                \u0027Cannot parse resource_provider_bandwidths. \u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_49bfd560","line":133,"range":{"start_line":133,"start_character":56,"end_line":133,"end_character":61},"in_reply_to":"3f79a3b5_1874d067","updated":"2018-08-09 08:15:13.000000000","message":"Done","commit_id":"1ad030b887b8765339eba4a43d9c180c435a7f6e"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"46f4a34e3c7b9ab33b60c432d8296b75f5368c8d","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                \u0027Cannot parse resource_provider_bandwidths. \u0027"},{"line_number":137,"context_line":"                \u0027Expected: DEVICE:EGRESS:INGRESS, got: %s\u0027) % bandwidth)"},{"line_number":138,"context_line":"        if device in rv:"},{"line_number":139,"context_line":"            raise ValueError(_("},{"line_number":140,"context_line":"                \u0027Cannot parse resource_provider_bandwidths. \u0027"},{"line_number":141,"context_line":"                \u0027Same device listed multiple times: %s\u0027) % device)"},{"line_number":142,"context_line":"        egress \u003d _parse_bandwidth_value(egress_str)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_34d0ac50","line":139,"updated":"2018-08-09 08:22:05.000000000","message":"Maybe You can define here some new exception type, something like \"DuplicateResourceProviderItem\" and raise it here?","commit_id":"1ad030b887b8765339eba4a43d9c180c435a7f6e"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"9250fde07e18460f70f330573e38a3534d1186c8","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                \u0027Cannot parse resource_provider_bandwidths. \u0027"},{"line_number":137,"context_line":"                \u0027Expected: DEVICE:EGRESS:INGRESS, got: %s\u0027) % bandwidth)"},{"line_number":138,"context_line":"        if device in rv:"},{"line_number":139,"context_line":"            raise ValueError(_("},{"line_number":140,"context_line":"                \u0027Cannot parse resource_provider_bandwidths. \u0027"},{"line_number":141,"context_line":"                \u0027Same device listed multiple times: %s\u0027) % device)"},{"line_number":142,"context_line":"        egress \u003d _parse_bandwidth_value(egress_str)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_b816d154","line":139,"in_reply_to":"3f79a3b5_34d0ac50","updated":"2018-08-10 08:55:35.000000000","message":"When introducing a new exception subtype I usually ask myself the question: Does somebody want to programmatically catch and handle specifically this error?\n\nHere I don\u0027t see why this exception would be caught. I think this always bubbles up to the top and ends up in the terminal or in the logs. We can\u0027t programmatically correct a wrong config file (or at least we\u0027d be entering the murky territory of Do What I Mean). So I think it\u0027s the error message what counts.\n\nBut let me know if you see a use case for this error to be caught.","commit_id":"1ad030b887b8765339eba4a43d9c180c435a7f6e"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"139d92c82266147b087a4c00653b59b89555f5a9","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                \u0027Cannot parse resource_provider_bandwidths. \u0027"},{"line_number":137,"context_line":"                \u0027Expected: DEVICE:EGRESS:INGRESS, got: %s\u0027) % bandwidth)"},{"line_number":138,"context_line":"        if device in rv:"},{"line_number":139,"context_line":"            raise ValueError(_("},{"line_number":140,"context_line":"                \u0027Cannot parse resource_provider_bandwidths. \u0027"},{"line_number":141,"context_line":"                \u0027Same device listed multiple times: %s\u0027) % device)"},{"line_number":142,"context_line":"        egress \u003d _parse_bandwidth_value(egress_str)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_7237d100","line":139,"in_reply_to":"3f79a3b5_b816d154","updated":"2018-08-13 07:34:15.000000000","message":"ok, I think You convinced me :) Lets stay with this like it\u0027s now.","commit_id":"1ad030b887b8765339eba4a43d9c180c435a7f6e"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"af1152c9b19056d5bd4b4ca062ae0f51c5ae4949","unresolved":false,"context_lines":[{"line_number":170,"context_line":"    unexpected_options \u003d (set(inventory_defaults.keys()) -"},{"line_number":171,"context_line":"                          constants.INVENTORY_OPTIONS)"},{"line_number":172,"context_line":"    if unexpected_options:"},{"line_number":173,"context_line":"        raise ValueError(_("},{"line_number":174,"context_line":"            \u0027Cannot parse inventory_defaults. Unexpected options: %s\u0027) %"},{"line_number":175,"context_line":"            \u0027,\u0027.join(unexpected_options))"},{"line_number":176,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_3668d7f3","line":173,"range":{"start_line":173,"start_character":25,"end_line":173,"end_character":26},"updated":"2018-08-07 22:33:50.000000000","message":"Nit: this is not a user-facing error message so probably don\u0027t need translation.","commit_id":"1ad030b887b8765339eba4a43d9c180c435a7f6e"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"d4770454283ac8f124ede37756aaeefe875bd46d","unresolved":false,"context_lines":[{"line_number":170,"context_line":"    unexpected_options \u003d (set(inventory_defaults.keys()) -"},{"line_number":171,"context_line":"                          constants.INVENTORY_OPTIONS)"},{"line_number":172,"context_line":"    if unexpected_options:"},{"line_number":173,"context_line":"        raise ValueError(_("},{"line_number":174,"context_line":"            \u0027Cannot parse inventory_defaults. Unexpected options: %s\u0027) %"},{"line_number":175,"context_line":"            \u0027,\u0027.join(unexpected_options))"},{"line_number":176,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_e3029909","line":173,"range":{"start_line":173,"start_character":25,"end_line":173,"end_character":26},"in_reply_to":"3f79a3b5_3668d7f3","updated":"2018-08-08 08:25:41.000000000","message":"You\u0027re right that end users will never see these messages, however if I delete the translations pep8 starts complaining. :-(","commit_id":"1ad030b887b8765339eba4a43d9c180c435a7f6e"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"8fcfff20fe0b5b37d7c55ee0abcc7e824b283f58","unresolved":false,"context_lines":[{"line_number":170,"context_line":"    unexpected_options \u003d (set(inventory_defaults.keys()) -"},{"line_number":171,"context_line":"                          constants.INVENTORY_OPTIONS)"},{"line_number":172,"context_line":"    if unexpected_options:"},{"line_number":173,"context_line":"        raise ValueError(_("},{"line_number":174,"context_line":"            \u0027Cannot parse inventory_defaults. Unexpected options: %s\u0027) %"},{"line_number":175,"context_line":"            \u0027,\u0027.join(unexpected_options))"},{"line_number":176,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_78cf04b0","line":173,"range":{"start_line":173,"start_character":25,"end_line":173,"end_character":26},"in_reply_to":"3f79a3b5_e3029909","updated":"2018-08-08 20:14:30.000000000","message":"I see. Never mind.","commit_id":"1ad030b887b8765339eba4a43d9c180c435a7f6e"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"af1152c9b19056d5bd4b4ca062ae0f51c5ae4949","unresolved":false,"context_lines":[{"line_number":182,"context_line":"            if inventory_defaults[\u0027allocation_ratio\u0027] \u003c 0:"},{"line_number":183,"context_line":"                raise ValueError()"},{"line_number":184,"context_line":"    except ValueError:"},{"line_number":185,"context_line":"        raise ValueError(_("},{"line_number":186,"context_line":"            \u0027Cannot parse inventory_defaults.allocation_ratio. \u0027"},{"line_number":187,"context_line":"            \u0027Expected: non-negative float, got: %s\u0027) %"},{"line_number":188,"context_line":"            inventory_defaults[\u0027allocation_ratio\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_767defaf","line":185,"range":{"start_line":185,"start_character":25,"end_line":185,"end_character":26},"updated":"2018-08-07 22:33:50.000000000","message":"Ditto: this is not a user-facing error message so probably don\u0027t need translation.","commit_id":"1ad030b887b8765339eba4a43d9c180c435a7f6e"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"af1152c9b19056d5bd4b4ca062ae0f51c5ae4949","unresolved":false,"context_lines":[{"line_number":195,"context_line":"                if inventory_defaults[key] \u003c 0:"},{"line_number":196,"context_line":"                    raise ValueError()"},{"line_number":197,"context_line":"        except ValueError:"},{"line_number":198,"context_line":"            raise ValueError(_("},{"line_number":199,"context_line":"                \u0027Cannot parse inventory_defaults.%(key)s. \u0027"},{"line_number":200,"context_line":"                \u0027Expected: non-negative int, got: %(got)s\u0027) % {"},{"line_number":201,"context_line":"                    \u0027key\u0027: key,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_164cbb9c","line":198,"range":{"start_line":198,"start_character":29,"end_line":198,"end_character":30},"updated":"2018-08-07 22:33:50.000000000","message":"Ditto: this is not a user-facing error message so probably don\u0027t need translation.","commit_id":"1ad030b887b8765339eba4a43d9c180c435a7f6e"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"424620e3ef16a22326ed69fe4385f6434e839bc1","unresolved":false,"context_lines":[{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def physnet_trait(physnet):"},{"line_number":29,"context_line":"    return os_traits.normalize_name(\u0027%s%s\u0027 % ("},{"line_number":30,"context_line":"        constants.TRAIT_PREFIX_PHYSNET, physnet))"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_562290ba","line":28,"updated":"2018-08-15 14:28:14.000000000","message":"Nit: ideally all public APIs should have the doc strings (:param, :returns, etc.)","commit_id":"51687f5188653416ad3f810c83d929496fead077"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"7223dd770c4a265391258593abbbd0c96f5946b6","unresolved":false,"context_lines":[{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def physnet_trait(physnet):"},{"line_number":29,"context_line":"    return os_traits.normalize_name(\u0027%s%s\u0027 % ("},{"line_number":30,"context_line":"        constants.TRAIT_PREFIX_PHYSNET, physnet))"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_02f7dd8c","line":28,"in_reply_to":"3f79a3b5_562290ba","updated":"2018-08-16 13:52:12.000000000","message":"Done","commit_id":"51687f5188653416ad3f810c83d929496fead077"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"424620e3ef16a22326ed69fe4385f6434e839bc1","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        egress \u003d _parse_bandwidth_value(egress_str)"},{"line_number":145,"context_line":"        ingress \u003d _parse_bandwidth_value(ingress_str)"},{"line_number":146,"context_line":"        rv[device] \u003d {"},{"line_number":147,"context_line":"            \u0027egress\u0027: egress,"},{"line_number":148,"context_line":"            \u0027ingress\u0027: ingress,"},{"line_number":149,"context_line":"        }"},{"line_number":150,"context_line":"    return rv"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_f91aaf6c","line":147,"range":{"start_line":147,"start_character":13,"end_line":147,"end_character":19},"updated":"2018-08-15 14:28:14.000000000","message":"Why not use INGRESS_DIRECTION and EGRESS_DIRECTION from neutron_lib.constants here?","commit_id":"51687f5188653416ad3f810c83d929496fead077"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"7223dd770c4a265391258593abbbd0c96f5946b6","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        egress \u003d _parse_bandwidth_value(egress_str)"},{"line_number":145,"context_line":"        ingress \u003d _parse_bandwidth_value(ingress_str)"},{"line_number":146,"context_line":"        rv[device] \u003d {"},{"line_number":147,"context_line":"            \u0027egress\u0027: egress,"},{"line_number":148,"context_line":"            \u0027ingress\u0027: ingress,"},{"line_number":149,"context_line":"        }"},{"line_number":150,"context_line":"    return rv"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_e22981e5","line":147,"range":{"start_line":147,"start_character":13,"end_line":147,"end_character":19},"in_reply_to":"3f79a3b5_f91aaf6c","updated":"2018-08-16 13:52:12.000000000","message":"Done","commit_id":"51687f5188653416ad3f810c83d929496fead077"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"c931f34a405c37fe127528e473950300cb6b0809","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        place_const.TRAIT_PREFIX_VNIC_TYPE, vnic_type))"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"def six_uuid5(namespace, name):"},{"line_number":50,"context_line":"    \"\"\"A uuid.uuid5 variant that takes utf-8 \u0027name\u0027 both in Python 2 and 3.\"\"\""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    # NOTE(bence romsics):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f79a3b5_4e81774a","line":49,"range":{"start_line":49,"start_character":4,"end_line":49,"end_character":13},"updated":"2018-08-16 18:47:40.000000000","message":"According to @boden\u0027s comment in previous patchset:\n\n  Nit: ideally all public APIs should have the doc strings (:param, :returns, etc.)\n\nit looks :param and :returns are still missing in several functions.","commit_id":"f4b0dbfd00d4f6144a42e3080f51ec209f7de095"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"cb29ce971944405617a1c75981638f591959f7f1","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        place_const.TRAIT_PREFIX_VNIC_TYPE, vnic_type))"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"def six_uuid5(namespace, name):"},{"line_number":50,"context_line":"    \"\"\"A uuid.uuid5 variant that takes utf-8 \u0027name\u0027 both in Python 2 and 3.\"\"\""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    # NOTE(bence romsics):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f79a3b5_f53040eb","line":49,"range":{"start_line":49,"start_character":4,"end_line":49,"end_character":13},"in_reply_to":"3f79a3b5_4e81774a","updated":"2018-08-17 07:19:17.000000000","message":"Oops, sorry. I just glossed over the file and seeing I had docstrings for each function I thought it was done. Now really done.","commit_id":"f4b0dbfd00d4f6144a42e3080f51ec209f7de095"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"6b4ed6e037dfa58f29882fa5dd5d37e1af5327de","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                      Optional."},{"line_number":111,"context_line":"    :returns: A unique and stable UUID identifying a physical network device."},{"line_number":112,"context_line":"    \"\"\""},{"line_number":113,"context_line":"    name \u003d separator.join(host, device)"},{"line_number":114,"context_line":"    return six_uuid5(namespace\u003dnamespace, name\u003dname)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_37fd27b1","line":113,"range":{"start_line":113,"start_character":21,"end_line":113,"end_character":25},"updated":"2018-08-20 20:05:25.000000000","message":"The unit test caught this issue:\n\n  join() takes exactly one argument (2 given)","commit_id":"8ab0aebfee9d18ea40bad40efdcd9dcbe0d16c06"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"7dab6975dd272eb738040b83bf56c8463d63532a","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                      Optional."},{"line_number":111,"context_line":"    :returns: A unique and stable UUID identifying a physical network device."},{"line_number":112,"context_line":"    \"\"\""},{"line_number":113,"context_line":"    name \u003d separator.join(host, device)"},{"line_number":114,"context_line":"    return six_uuid5(namespace\u003dnamespace, name\u003dname)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_c055fa51","line":113,"range":{"start_line":113,"start_character":21,"end_line":113,"end_character":25},"in_reply_to":"3f79a3b5_37fd27b1","updated":"2018-08-21 14:59:45.000000000","message":"Done","commit_id":"8ab0aebfee9d18ea40bad40efdcd9dcbe0d16c06"}],"neutron_lib/tests/unit/placement/test_utils.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"6631b4fa5493e9998f91a34c5a4049382889adb7","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        self.assertEqual("},{"line_number":103,"context_line":"            place_utils.parse_rp_bandwidths([]),"},{"line_number":104,"context_line":"            {},"},{"line_number":105,"context_line":"        )"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        # NOTE(bence romsics): This contradicts the spec, but IMHO prohibiting"},{"line_number":108,"context_line":"        # this format makes the config option syntax clearer. See also:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_8c3fd2b0","line":105,"updated":"2018-07-19 09:58:43.000000000","message":"You should call assertEqual with convention like:\n\n    self.assertEqual(expected, actual)\n\nand this comment is for all places in this file also :)","commit_id":"fa1db2452473a930faf1e0d1b1452822197a904b"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"e300d2abfa8578017a037d1931d160e0b2fc584c","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        self.assertEqual("},{"line_number":103,"context_line":"            place_utils.parse_rp_bandwidths([]),"},{"line_number":104,"context_line":"            {},"},{"line_number":105,"context_line":"        )"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        # NOTE(bence romsics): This contradicts the spec, but IMHO prohibiting"},{"line_number":108,"context_line":"        # this format makes the config option syntax clearer. See also:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_1095f987","line":105,"in_reply_to":"5f7c97a3_8c3fd2b0","updated":"2018-07-20 11:56:55.000000000","message":"Done","commit_id":"fa1db2452473a930faf1e0d1b1452822197a904b"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"48114c75dd9caa92e717a9c1ac83307902898169","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            place_utils.parse_rp_inventory_defaults("},{"line_number":159,"context_line":"                {\u0027allocation_ratio\u0027: \u00271.0\u0027}),"},{"line_number":160,"context_line":"        )"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        self.assertEqual("},{"line_number":163,"context_line":"            {\u0027min_unit\u0027: 1},"},{"line_number":164,"context_line":"            place_utils.parse_rp_inventory_defaults("}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_a645bd19","line":161,"updated":"2018-08-06 12:45:38.000000000","message":"Small thing, just from my coverage fetishist side miss few extra asserts for negative values, like:\n- {\u0027allocation_ratio\u0027: \u0027-1.0\u0027}\n- {\u0027min_unit\u0027: \u0027-1\u0027}","commit_id":"97a46f3769b4a1953f694520eed225621215e220"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"6f643d91ba6838d3677efe93bf78b3362a62245a","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            place_utils.parse_rp_inventory_defaults("},{"line_number":159,"context_line":"                {\u0027allocation_ratio\u0027: \u00271.0\u0027}),"},{"line_number":160,"context_line":"        )"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        self.assertEqual("},{"line_number":163,"context_line":"            {\u0027min_unit\u0027: 1},"},{"line_number":164,"context_line":"            place_utils.parse_rp_inventory_defaults("}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_66d7a5c1","line":161,"in_reply_to":"3f79a3b5_a645bd19","updated":"2018-08-06 13:02:13.000000000","message":"Done","commit_id":"97a46f3769b4a1953f694520eed225621215e220"}]}
