)]}'
{"ironic/common/args.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"92c8178e560a9939afb319967655041f21440f03","unresolved":false,"context_lines":[{"line_number":235,"context_line":"    :param: schema dict representing jsonschema to validate with"},{"line_number":236,"context_line":"    :returns: validator function which takes name and value arguments"},{"line_number":237,"context_line":"    \"\"\""},{"line_number":238,"context_line":"    jsonschema.Draft7Validator.check_schema(schema)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    return functools.partial(_validate_schema, schema\u003dschema)"},{"line_number":241,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_6b9d9265","line":238,"range":{"start_line":238,"start_character":15,"end_line":238,"end_character":30},"updated":"2020-08-18 00:38:09.000000000","message":"This will need to be Draft4Validator to handle older jsonschema packages downstream","commit_id":"6a3c65c726ea319257ba131d8732c484aca918ea"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"e09a588976177fb059f3cfccdb571a85ad9fd7ba","unresolved":false,"context_lines":[{"line_number":240,"context_line":"    return functools.partial(_validate_schema, schema\u003dschema)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"def _validate_dict(name, value, validators):"},{"line_number":244,"context_line":"    for k, v in validators.items():"},{"line_number":245,"context_line":"        if k not in value:"},{"line_number":246,"context_line":"            raise exception.InvalidParameterValue("}],"source_content_type":"text/x-python","patch_set":7,"id":"9f560f44_ba217bff","line":243,"updated":"2020-08-18 05:23:27.000000000","message":"If this tested for value being instance dict then it would be useful for basic dict validation too","commit_id":"54488b5547d755b1eddeee9ad9b94e0ef718a993"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"381b4d1f98070383f18ec3cd8d6f177275e59920","unresolved":false,"context_lines":[{"line_number":240,"context_line":"    return functools.partial(_validate_schema, schema\u003dschema)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"def _validate_dict(name, value, validators):"},{"line_number":244,"context_line":"    for k, v in validators.items():"},{"line_number":245,"context_line":"        if k not in value:"},{"line_number":246,"context_line":"            raise exception.InvalidParameterValue("}],"source_content_type":"text/x-python","patch_set":7,"id":"9f560f44_0a6d9003","line":243,"in_reply_to":"9f560f44_ba217bff","updated":"2020-08-24 19:29:46.000000000","message":"On second thoughts, a generic types validator which takes a list of types would be better","commit_id":"54488b5547d755b1eddeee9ad9b94e0ef718a993"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"0160911b96b55870516953e1927a5bd58db0646b","unresolved":false,"context_lines":[{"line_number":321,"context_line":"                elif param.name in kwargs:"},{"line_number":322,"context_line":"                    # validate keyword argument"},{"line_number":323,"context_line":"                    kwargs_next[param.name] \u003d val_function("},{"line_number":324,"context_line":"                        param.name, kwargs.pop(param.name))"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"            if param_positional:"},{"line_number":327,"context_line":"                # handle validating *args"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f560f44_2a50545e","line":324,"updated":"2020-08-20 02:52:23.000000000","message":"There needs to be a check here for a missing argument with no parameter default, so that it gets raised as an InvalidParameterValue instead of a TypeError.","commit_id":"54488b5547d755b1eddeee9ad9b94e0ef718a993"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"16a7a7bb556a703cadb36e634462a5ee1ae9fe95","unresolved":false,"context_lines":[{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    for k, v in validators.items():"},{"line_number":253,"context_line":"        if k not in value:"},{"line_number":254,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":255,"context_line":"                \u0027Expected key in dict %s: %s\u0027 % (name, k))"},{"line_number":256,"context_line":"        value[k] \u003d v(name\u003dk, value\u003dvalue[k])"},{"line_number":257,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9f560f44_d032340f","line":254,"updated":"2020-09-04 04:19:56.000000000","message":"On second thoughts, required keys should be handled in the jsonschema, the dict validator should only validate for keys which exist","commit_id":"0924b6c347429406134922ffaa338198646b7f1d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"293066f3f6c803023c9b07ba5dbd9a64758f0933","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    :raises: InvalidParameterValue if the value is not a string"},{"line_number":31,"context_line":"    \"\"\""},{"line_number":32,"context_line":"    if value is None:"},{"line_number":33,"context_line":"        return"},{"line_number":34,"context_line":"    if not isinstance(value, str):"},{"line_number":35,"context_line":"        raise exception.InvalidParameterValue(\u0027Expected string for %s: %s\u0027 %"},{"line_number":36,"context_line":"                                              (name, value))"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f560f44_b2470d7b","line":33,"updated":"2020-09-30 16:03:03.000000000","message":"This repeats in every validator, maybe move it to wherever they\u0027re used?","commit_id":"83186090b7558b376704842d56d5776c1b147534"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"a8ad3cece7cfb9408b8fd51aac273ab71ebb45dd","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    :raises: InvalidParameterValue if the value is not a string"},{"line_number":31,"context_line":"    \"\"\""},{"line_number":32,"context_line":"    if value is None:"},{"line_number":33,"context_line":"        return"},{"line_number":34,"context_line":"    if not isinstance(value, str):"},{"line_number":35,"context_line":"        raise exception.InvalidParameterValue(\u0027Expected string for %s: %s\u0027 %"},{"line_number":36,"context_line":"                                              (name, value))"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f560f44_2620dff8","line":33,"in_reply_to":"9f560f44_b2470d7b","updated":"2020-10-01 03:07:01.000000000","message":"I\u0027d like to keep the flexibility of a validator transforming None to a value (like an alternate boolean validator which transforms None to False, I\u0027d do that now but that would change the behavior of current boolean attributes)","commit_id":"83186090b7558b376704842d56d5776c1b147534"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"293066f3f6c803023c9b07ba5dbd9a64758f0933","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    if value is None:"},{"line_number":33,"context_line":"        return"},{"line_number":34,"context_line":"    if not isinstance(value, str):"},{"line_number":35,"context_line":"        raise exception.InvalidParameterValue(\u0027Expected string for %s: %s\u0027 %"},{"line_number":36,"context_line":"                                              (name, value))"},{"line_number":37,"context_line":"    return value"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"9f560f44_924c899e","line":35,"updated":"2020-09-30 16:03:03.000000000","message":"missing _() for i18n here and below (can be fixed in a follow-up)","commit_id":"83186090b7558b376704842d56d5776c1b147534"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"a8ad3cece7cfb9408b8fd51aac273ab71ebb45dd","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    if value is None:"},{"line_number":33,"context_line":"        return"},{"line_number":34,"context_line":"    if not isinstance(value, str):"},{"line_number":35,"context_line":"        raise exception.InvalidParameterValue(\u0027Expected string for %s: %s\u0027 %"},{"line_number":36,"context_line":"                                              (name, value))"},{"line_number":37,"context_line":"    return value"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"9f560f44_e6d1c7ce","line":35,"in_reply_to":"9f560f44_924c899e","updated":"2020-10-01 03:07:01.000000000","message":"Done","commit_id":"83186090b7558b376704842d56d5776c1b147534"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"293066f3f6c803023c9b07ba5dbd9a64758f0933","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            \u0027Expected an integer for %s: %s\u0027 % (name, value))"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"def macaddress(name, value):"},{"line_number":146,"context_line":"    \"\"\"Validate that the value represents a MAC address"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    :param name: Name of the argument"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f560f44_f2418565","line":145,"updated":"2020-09-30 16:03:03.000000000","message":"nit: mac_address","commit_id":"83186090b7558b376704842d56d5776c1b147534"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"a8ad3cece7cfb9408b8fd51aac273ab71ebb45dd","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            \u0027Expected an integer for %s: %s\u0027 % (name, value))"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"def macaddress(name, value):"},{"line_number":146,"context_line":"    \"\"\"Validate that the value represents a MAC address"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    :param name: Name of the argument"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f560f44_26fc5f3e","line":145,"in_reply_to":"9f560f44_f2418565","updated":"2020-10-01 03:07:01.000000000","message":"Done","commit_id":"83186090b7558b376704842d56d5776c1b147534"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"293066f3f6c803023c9b07ba5dbd9a64758f0933","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    :returns: The value"},{"line_number":168,"context_line":"    :raises: InvalidParameterValue if the value evaluates to False"},{"line_number":169,"context_line":"    \"\"\""},{"line_number":170,"context_line":"    if not value:"},{"line_number":171,"context_line":"        raise exception.InvalidParameterValue(\u0027Required value %s: %s\u0027 %"},{"line_number":172,"context_line":"                                              (name, value))"},{"line_number":173,"context_line":"    return value"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f560f44_d246017c","line":170,"updated":"2020-09-30 16:03:03.000000000","message":"You need to check for None, otherwise it will fail on 0, False and empty strings","commit_id":"83186090b7558b376704842d56d5776c1b147534"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"a8ad3cece7cfb9408b8fd51aac273ab71ebb45dd","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    :returns: The value"},{"line_number":168,"context_line":"    :raises: InvalidParameterValue if the value evaluates to False"},{"line_number":169,"context_line":"    \"\"\""},{"line_number":170,"context_line":"    if not value:"},{"line_number":171,"context_line":"        raise exception.InvalidParameterValue(\u0027Required value %s: %s\u0027 %"},{"line_number":172,"context_line":"                                              (name, value))"},{"line_number":173,"context_line":"    return value"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f560f44_e69f0700","line":170,"in_reply_to":"9f560f44_d246017c","updated":"2020-10-01 03:07:01.000000000","message":"That was the intent for this validator, but I changed approach and never used this validator for anything. I\u0027ll just delete it.","commit_id":"83186090b7558b376704842d56d5776c1b147534"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"a8ad3cece7cfb9408b8fd51aac273ab71ebb45dd","unresolved":false,"context_lines":[{"line_number":256,"context_line":"    return value"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"def dict_valid(validators):"},{"line_number":260,"context_line":"    \"\"\"Return a validator function which validates dict fields"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    Validators will replace the value with the validation result. Any dict"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f560f44_46099330","line":259,"range":{"start_line":259,"start_character":15,"end_line":259,"end_character":25},"updated":"2020-10-01 03:07:01.000000000","message":"I wish I\u0027d done **validators, I\u0027m going to change it now.","commit_id":"83186090b7558b376704842d56d5776c1b147534"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"293066f3f6c803023c9b07ba5dbd9a64758f0933","unresolved":false,"context_lines":[{"line_number":272,"context_line":""},{"line_number":273,"context_line":"def _validate_types(name, value, types):"},{"line_number":274,"context_line":"    if not isinstance(value, types):"},{"line_number":275,"context_line":"        str_types \u003d \u0027,\u0027.join([str(t) for t in types])"},{"line_number":276,"context_line":"        raise exception.InvalidParameterValue("},{"line_number":277,"context_line":"            \u0027Expected types %s for %s: %s\u0027 % (str_types, name, value))"},{"line_number":278,"context_line":"    return value"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f560f44_325bfd55","line":275,"updated":"2020-09-30 16:03:03.000000000","message":"nit: \u0027, \u0027.join(map(str, types))","commit_id":"83186090b7558b376704842d56d5776c1b147534"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"a8ad3cece7cfb9408b8fd51aac273ab71ebb45dd","unresolved":false,"context_lines":[{"line_number":272,"context_line":""},{"line_number":273,"context_line":"def _validate_types(name, value, types):"},{"line_number":274,"context_line":"    if not isinstance(value, types):"},{"line_number":275,"context_line":"        str_types \u003d \u0027,\u0027.join([str(t) for t in types])"},{"line_number":276,"context_line":"        raise exception.InvalidParameterValue("},{"line_number":277,"context_line":"            \u0027Expected types %s for %s: %s\u0027 % (str_types, name, value))"},{"line_number":278,"context_line":"    return value"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f560f44_e6b8a776","line":275,"in_reply_to":"9f560f44_325bfd55","updated":"2020-10-01 03:07:01.000000000","message":"Done","commit_id":"83186090b7558b376704842d56d5776c1b147534"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"293066f3f6c803023c9b07ba5dbd9a64758f0933","unresolved":false,"context_lines":[{"line_number":336,"context_line":""},{"line_number":337,"context_line":"            if not param_keyword:"},{"line_number":338,"context_line":"                # ensure each named argument belongs to a param"},{"line_number":339,"context_line":"                kwarg_keys \u003d set(kwargs.keys())"},{"line_number":340,"context_line":"                param_names \u003d set(p.name for p in params)"},{"line_number":341,"context_line":"                extra_args \u003d kwarg_keys.difference(param_names)"},{"line_number":342,"context_line":"                if extra_args:"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f560f44_12587955","line":339,"updated":"2020-09-30 16:03:03.000000000","message":"nit: redundant .keys()","commit_id":"83186090b7558b376704842d56d5776c1b147534"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"a8ad3cece7cfb9408b8fd51aac273ab71ebb45dd","unresolved":false,"context_lines":[{"line_number":336,"context_line":""},{"line_number":337,"context_line":"            if not param_keyword:"},{"line_number":338,"context_line":"                # ensure each named argument belongs to a param"},{"line_number":339,"context_line":"                kwarg_keys \u003d set(kwargs.keys())"},{"line_number":340,"context_line":"                param_names \u003d set(p.name for p in params)"},{"line_number":341,"context_line":"                extra_args \u003d kwarg_keys.difference(param_names)"},{"line_number":342,"context_line":"                if extra_args:"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f560f44_26aa9f19","line":339,"in_reply_to":"9f560f44_12587955","updated":"2020-10-01 03:07:01.000000000","message":"Done","commit_id":"83186090b7558b376704842d56d5776c1b147534"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"293066f3f6c803023c9b07ba5dbd9a64758f0933","unresolved":false,"context_lines":[{"line_number":341,"context_line":"                extra_args \u003d kwarg_keys.difference(param_names)"},{"line_number":342,"context_line":"                if extra_args:"},{"line_number":343,"context_line":"                    raise exception.InvalidParameterValue("},{"line_number":344,"context_line":"                        \u0027Unexpected arguments: %s\u0027 % \u0027,\u0027.join(extra_args))"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"            for i, param in enumerate(params):"},{"line_number":347,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"9f560f44_7255751e","line":344,"updated":"2020-09-30 16:03:03.000000000","message":"I wonder if we could use https://docs.python.org/3/library/inspect.html#inspect.Signature.bind for validation instead of all this code. It seems to do exactly what you need (modulo maybe special treatment for self)","commit_id":"83186090b7558b376704842d56d5776c1b147534"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"a8ad3cece7cfb9408b8fd51aac273ab71ebb45dd","unresolved":false,"context_lines":[{"line_number":341,"context_line":"                extra_args \u003d kwarg_keys.difference(param_names)"},{"line_number":342,"context_line":"                if extra_args:"},{"line_number":343,"context_line":"                    raise exception.InvalidParameterValue("},{"line_number":344,"context_line":"                        \u0027Unexpected arguments: %s\u0027 % \u0027,\u0027.join(extra_args))"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"            for i, param in enumerate(params):"},{"line_number":347,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"9f560f44_06103b59","line":344,"in_reply_to":"9f560f44_7255751e","updated":"2020-10-01 03:07:01.000000000","message":"Oh I wish I was aware of this ;)\n\nI\u0027d like to switch over but it might be after this file lands.","commit_id":"83186090b7558b376704842d56d5776c1b147534"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"8ac131b90262f10c33a8b0089a276a5fad617b1b","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    if value is None:"},{"line_number":101,"context_line":"        return"},{"line_number":102,"context_line":"    if (not utils.is_valid_logical_name(value)"},{"line_number":103,"context_line":"        and not uuidutils.is_uuid_like(value)):"},{"line_number":104,"context_line":"        raise exception.InvalidParameterValue("},{"line_number":105,"context_line":"            _(\u0027Expected UUID or name for %s: %s\u0027) % (name, value))"},{"line_number":106,"context_line":"    return value"}],"source_content_type":"text/x-python","patch_set":23,"id":"1f621f24_0f7b628b","line":103,"updated":"2020-11-17 19:15:18.000000000","message":"nit: more indentation","commit_id":"6ea0e8eaf65330e47e9be231fd7871474ad16f76"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"1f9376ddc14b76e913d84cdf336360fa99989d8a","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    if value is None:"},{"line_number":101,"context_line":"        return"},{"line_number":102,"context_line":"    if (not utils.is_valid_logical_name(value)"},{"line_number":103,"context_line":"        and not uuidutils.is_uuid_like(value)):"},{"line_number":104,"context_line":"        raise exception.InvalidParameterValue("},{"line_number":105,"context_line":"            _(\u0027Expected UUID or name for %s: %s\u0027) % (name, value))"},{"line_number":106,"context_line":"    return value"}],"source_content_type":"text/x-python","patch_set":23,"id":"1f621f24_d6d582e7","line":103,"in_reply_to":"1f621f24_0f7b628b","updated":"2020-11-20 03:58:41.000000000","message":"Done","commit_id":"6ea0e8eaf65330e47e9be231fd7871474ad16f76"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"8ac131b90262f10c33a8b0089a276a5fad617b1b","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        return utils.validate_and_normalize_mac(value)"},{"line_number":158,"context_line":"    except exception.InvalidMAC:"},{"line_number":159,"context_line":"        raise exception.InvalidParameterValue("},{"line_number":160,"context_line":"            _(\u0027Expected valid MAC address for %s: %s\u0027) % (name, value))"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"def _or(name, value, validators):"}],"source_content_type":"text/x-python","patch_set":23,"id":"1f621f24_6f6e56c9","line":160,"updated":"2020-11-17 19:15:18.000000000","message":"nit: add the actual error message","commit_id":"6ea0e8eaf65330e47e9be231fd7871474ad16f76"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"1f9376ddc14b76e913d84cdf336360fa99989d8a","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        return utils.validate_and_normalize_mac(value)"},{"line_number":158,"context_line":"    except exception.InvalidMAC:"},{"line_number":159,"context_line":"        raise exception.InvalidParameterValue("},{"line_number":160,"context_line":"            _(\u0027Expected valid MAC address for %s: %s\u0027) % (name, value))"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"def _or(name, value, validators):"}],"source_content_type":"text/x-python","patch_set":23,"id":"1f621f24_f6f19e97","line":160,"in_reply_to":"1f621f24_6f6e56c9","updated":"2020-11-20 03:58:41.000000000","message":"The InvalidMAC message is:\n\n  \"Expected a MAC address but received %(mac)s.\"\n\nSo its the same as this message, but lacking the context of the parameter name","commit_id":"6ea0e8eaf65330e47e9be231fd7871474ad16f76"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"8ac131b90262f10c33a8b0089a276a5fad617b1b","unresolved":false,"context_lines":[{"line_number":388,"context_line":"            \u0027op\u0027: {\u0027type\u0027: \u0027string\u0027, \u0027enum\u0027: [\u0027add\u0027, \u0027replace\u0027, \u0027remove\u0027]},"},{"line_number":389,"context_line":"            \u0027value\u0027: {}"},{"line_number":390,"context_line":"        },"},{"line_number":391,"context_line":"        \u0027additionalProperties\u0027: False"},{"line_number":392,"context_line":"    }"},{"line_number":393,"context_line":"})"},{"line_number":394,"context_line":"\"\"\"Validate a patch API operation\"\"\""}],"source_content_type":"text/x-python","patch_set":23,"id":"1f621f24_4f71daa7","line":391,"updated":"2020-11-17 19:15:18.000000000","message":"nit: requiredProperties: [\u0027op\u0027, \u0027path\u0027]","commit_id":"6ea0e8eaf65330e47e9be231fd7871474ad16f76"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"1f9376ddc14b76e913d84cdf336360fa99989d8a","unresolved":false,"context_lines":[{"line_number":388,"context_line":"            \u0027op\u0027: {\u0027type\u0027: \u0027string\u0027, \u0027enum\u0027: [\u0027add\u0027, \u0027replace\u0027, \u0027remove\u0027]},"},{"line_number":389,"context_line":"            \u0027value\u0027: {}"},{"line_number":390,"context_line":"        },"},{"line_number":391,"context_line":"        \u0027additionalProperties\u0027: False"},{"line_number":392,"context_line":"    }"},{"line_number":393,"context_line":"})"},{"line_number":394,"context_line":"\"\"\"Validate a patch API operation\"\"\""}],"source_content_type":"text/x-python","patch_set":23,"id":"1f621f24_b625660d","line":391,"in_reply_to":"1f621f24_4f71daa7","updated":"2020-11-20 03:58:41.000000000","message":"Done, the property name is \u0027required\u0027","commit_id":"6ea0e8eaf65330e47e9be231fd7871474ad16f76"}],"ironic/tests/unit/common/test_args.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bc959756efeef33aa3ee49da8edd77f2f3979e3d","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"# from unittest.mock import MagicMock"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from oslo_utils import uuidutils"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1f621f24_40560408","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":37},"updated":"2020-11-12 16:19:52.000000000","message":"Excess from a prior version?","commit_id":"96fd61cc4545c7811d92092089222f0057c786c7"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"9ffcaa56f46873cdd8ebd696a10aa951449c5820","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"# from unittest.mock import MagicMock"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from oslo_utils import uuidutils"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1f621f24_afa6cd0d","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":37},"in_reply_to":"1f621f24_40560408","updated":"2020-11-17 22:26:33.000000000","message":"Done","commit_id":"96fd61cc4545c7811d92092089222f0057c786c7"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bc959756efeef33aa3ee49da8edd77f2f3979e3d","unresolved":false,"context_lines":[{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def test_mac_address(self):"},{"line_number":266,"context_line":"        self.assertEqual(\u002702:ce:20:50:68:6f\u0027,"},{"line_number":267,"context_line":"                         self.decorated.needs_mac_address(\u002702:cE:20:50:68:6F\u0027))"},{"line_number":268,"context_line":"        self.assertIsNone(self.decorated.needs_mac_address(None))"},{"line_number":269,"context_line":"        self.assertRaises(exception.InvalidParameterValue,"},{"line_number":270,"context_line":"                          self.decorated.needs_mac_address,"}],"source_content_type":"text/x-python","patch_set":22,"id":"1f621f24_c034d4e0","line":267,"updated":"2020-11-12 16:19:52.000000000","message":"One reqeust, and this can be a follow up, but I\u0027d like us to make sure that we have an infiniband MAC tested here as well since it is a longer value. Just to make sure we don\u0027t accidentally break ourselves on that front.","commit_id":"96fd61cc4545c7811d92092089222f0057c786c7"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"9ffcaa56f46873cdd8ebd696a10aa951449c5820","unresolved":false,"context_lines":[{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def test_mac_address(self):"},{"line_number":266,"context_line":"        self.assertEqual(\u002702:ce:20:50:68:6f\u0027,"},{"line_number":267,"context_line":"                         self.decorated.needs_mac_address(\u002702:cE:20:50:68:6F\u0027))"},{"line_number":268,"context_line":"        self.assertIsNone(self.decorated.needs_mac_address(None))"},{"line_number":269,"context_line":"        self.assertRaises(exception.InvalidParameterValue,"},{"line_number":270,"context_line":"                          self.decorated.needs_mac_address,"}],"source_content_type":"text/x-python","patch_set":22,"id":"1f621f24_2fb2bd49","line":267,"in_reply_to":"1f621f24_c034d4e0","updated":"2020-11-17 22:26:33.000000000","message":"Oh, this validator calls:\nironic.common.utils.validate_and_normalize_mac\nwhich calls:\noslo_utils.netutils.is_valid_mac\nwhich only supports 48 bit macs, so allowing infiniband macs there would be the first step.","commit_id":"96fd61cc4545c7811d92092089222f0057c786c7"}]}
