)]}'
{"api-ref/source/v1/parameters.yaml":[{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"b5378ba13a9be50eaf4a36a463acd3aa6ba79c10","unresolved":false,"context_lines":[{"line_number":380,"context_line":"    The affinity of instances to reserve. The value should be ``True``, ``False`` or ``None``."},{"line_number":381,"context_line":"  in: body"},{"line_number":382,"context_line":"  required: true"},{"line_number":383,"context_line":"  type: boolean"},{"line_number":384,"context_line":"reservation_affinity_optional:"},{"line_number":385,"context_line":"  description: |"},{"line_number":386,"context_line":"    The affinity of instances to reserve. The value should be ``True``, ``False`` or ``None``."}],"source_content_type":"text/x-yaml","patch_set":1,"id":"5fc1f717_891b95c8","line":383,"range":{"start_line":383,"start_character":8,"end_line":383,"end_character":15},"updated":"2019-04-04 09:30:32.000000000","message":"trilean","commit_id":"29e93cf8e5b8b5cf5291d93bf00407de3fe1283a"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"b5378ba13a9be50eaf4a36a463acd3aa6ba79c10","unresolved":false,"context_lines":[{"line_number":386,"context_line":"    The affinity of instances to reserve. The value should be ``True``, ``False`` or ``None``."},{"line_number":387,"context_line":"  in: body"},{"line_number":388,"context_line":"  required: false"},{"line_number":389,"context_line":"  type: boolean"},{"line_number":390,"context_line":"reservation_aggregate_id:"},{"line_number":391,"context_line":"  description: |"},{"line_number":392,"context_line":"    The aggregate ID of the reservation."}],"source_content_type":"text/x-yaml","patch_set":1,"id":"5fc1f717_a96bf11c","line":389,"range":{"start_line":389,"start_character":8,"end_line":389,"end_character":15},"updated":"2019-04-04 09:30:32.000000000","message":"trilean","commit_id":"29e93cf8e5b8b5cf5291d93bf00407de3fe1283a"}],"blazar/plugins/instances/instance_plugin.py":[{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"b5378ba13a9be50eaf4a36a463acd3aa6ba79c10","unresolved":false,"context_lines":[{"line_number":398,"context_line":"                          \u0027and it should be greater than 0)\u0027)"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        if \u0027affinity\u0027 in values:"},{"line_number":401,"context_line":"            if (values[\u0027affinity\u0027] is not None and"},{"line_number":402,"context_line":"                    not strutils.is_valid_boolstr(values[\u0027affinity\u0027])):"},{"line_number":403,"context_line":"                raise mgr_exceptions.MalformedParameter("},{"line_number":404,"context_line":"                    param\u003d\u0027affinity (must be a bool value or None)\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_fdcf7326","line":401,"range":{"start_line":401,"start_character":16,"end_line":401,"end_character":46},"updated":"2019-04-04 09:30:32.000000000","message":"This isn\u0027t the case when you try this via CLI where the value is translated to string. So... we *should* support strings, too.","commit_id":"29e93cf8e5b8b5cf5291d93bf00407de3fe1283a"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"19b262f236ba848c66ddabb5b5f6e52fc0315e9e","unresolved":false,"context_lines":[{"line_number":42,"context_line":"FLAVOR_EXTRA_SPEC \u003d \"aggregate_instance_extra_specs:\" + RESERVATION_PREFIX"},{"line_number":43,"context_line":"INSTANCE_DELETION_TIMEOUT \u003d 10 * 60 * 1000  # 10 minutes"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"NONE_STRINGS \u003d (\u0027None\u0027, \u0027none\u0027, None)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class VirtualInstancePlugin(base.BasePlugin, nova.NovaClientWrapper):"}],"source_content_type":"text/x-python","patch_set":2,"id":"bfb3d3c7_e38437d5","line":45,"range":{"start_line":45,"start_character":0,"end_line":45,"end_character":12},"updated":"2019-05-30 15:32:15.000000000","message":"Agree with Tetsuro, NONE_VALUES would be better.\n\nAlthough I am feeling like the code is made much more complex by supporting string / bool / null types. Maybe in a future API version we can enforce proper JSON types.","commit_id":"2c7cc0bf13cf693875af6dd2ff1543b2d946510a"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"c2356e0a3071c3f7b9d7a3e8b20ce4a134d6fe07","unresolved":false,"context_lines":[{"line_number":42,"context_line":"FLAVOR_EXTRA_SPEC \u003d \"aggregate_instance_extra_specs:\" + RESERVATION_PREFIX"},{"line_number":43,"context_line":"INSTANCE_DELETION_TIMEOUT \u003d 10 * 60 * 1000  # 10 minutes"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"NONE_STRINGS \u003d (\u0027None\u0027, \u0027none\u0027, None)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class VirtualInstancePlugin(base.BasePlugin, nova.NovaClientWrapper):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_693fd724","line":45,"range":{"start_line":45,"start_character":0,"end_line":45,"end_character":12},"updated":"2019-04-10 07:06:49.000000000","message":"nit: NONE_VALUES\nmaybe? that said there is a non-string value","commit_id":"2c7cc0bf13cf693875af6dd2ff1543b2d946510a"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"c2356e0a3071c3f7b9d7a3e8b20ce4a134d6fe07","unresolved":false,"context_lines":[{"line_number":404,"context_line":"                    not strutils.is_valid_boolstr(values[\u0027affinity\u0027])):"},{"line_number":405,"context_line":"                raise mgr_exceptions.MalformedParameter("},{"line_number":406,"context_line":"                    param\u003d\u0027affinity (must be a bool value or None)\u0027)"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    def reserve_resource(self, reservation_id, values):"},{"line_number":409,"context_line":"        self._check_missing_reservation_params(values)"},{"line_number":410,"context_line":"        self._validate_reservation_params(values)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_e91427a2","line":407,"updated":"2019-04-10 07:06:49.000000000","message":"Thanks! Optionally we can centerize bool_from_string(value[affinity]) here. Can be done in a follow up.","commit_id":"2c7cc0bf13cf693875af6dd2ff1543b2d946510a"},{"author":{"_account_id":29278,"name":"Asmita Singh","email":"Asmita.Singh@nttdata.com","username":"asmita.singh"},"change_message_id":"bd7682fdb9c3c3b68d07709e34e082899a22cc95","unresolved":false,"context_lines":[{"line_number":404,"context_line":"                    not strutils.is_valid_boolstr(values[\u0027affinity\u0027])):"},{"line_number":405,"context_line":"                raise mgr_exceptions.MalformedParameter("},{"line_number":406,"context_line":"                    param\u003d\u0027affinity (must be a bool value or None)\u0027)"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    def reserve_resource(self, reservation_id, values):"},{"line_number":409,"context_line":"        self._check_missing_reservation_params(values)"},{"line_number":410,"context_line":"        self._validate_reservation_params(values)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb8cfa7_9df6af8f","line":407,"in_reply_to":"5fc1f717_e91427a2","updated":"2019-06-04 06:36:39.000000000","message":"Thank you so much for your review. Forgive me if I am wrong but IMO bool_from_string(values[affinity]) will return True for all the TRUE_STRINGS and False for all the FALSE_STRINGS. But what we need here is \"is_valid_boolstr(values[affinity])\" ,because this method returns True for all the boolean values(TRUE_STRINGS + FALSE_STRINGS) and False otherwise.","commit_id":"2c7cc0bf13cf693875af6dd2ff1543b2d946510a"},{"author":{"_account_id":29278,"name":"Asmita Singh","email":"Asmita.Singh@nttdata.com","username":"asmita.singh"},"change_message_id":"236ac79d3161d6c2c99205cf94221690b263c99b","unresolved":false,"context_lines":[{"line_number":404,"context_line":"                    not strutils.is_valid_boolstr(values[\u0027affinity\u0027])):"},{"line_number":405,"context_line":"                raise mgr_exceptions.MalformedParameter("},{"line_number":406,"context_line":"                    param\u003d\u0027affinity (must be a bool value or None)\u0027)"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    def reserve_resource(self, reservation_id, values):"},{"line_number":409,"context_line":"        self._check_missing_reservation_params(values)"},{"line_number":410,"context_line":"        self._validate_reservation_params(values)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb8cfa7_ac4a667d","line":407,"in_reply_to":"9fb8cfa7_6cc22e88","updated":"2019-06-04 08:36:34.000000000","message":"Yes, definitely. This can be addressed in JSON Schema.","commit_id":"2c7cc0bf13cf693875af6dd2ff1543b2d946510a"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"a73572b322af987ed6c065e0aee0e127ca97a9a7","unresolved":false,"context_lines":[{"line_number":404,"context_line":"                    not strutils.is_valid_boolstr(values[\u0027affinity\u0027])):"},{"line_number":405,"context_line":"                raise mgr_exceptions.MalformedParameter("},{"line_number":406,"context_line":"                    param\u003d\u0027affinity (must be a bool value or None)\u0027)"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    def reserve_resource(self, reservation_id, values):"},{"line_number":409,"context_line":"        self._check_missing_reservation_params(values)"},{"line_number":410,"context_line":"        self._validate_reservation_params(values)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb8cfa7_6cc22e88","line":407,"in_reply_to":"9fb8cfa7_9df6af8f","updated":"2019-06-04 08:03:42.000000000","message":"My suggestion was renaming\n\n_validate_reservation_params() to _normalize_reservation_params() and \nDo the validation (is_valid_boolstr) and translation (bool_from_string) here in one function,\n\nbut anyway I now assume we can address it (i.e. centerize) in JSON schema check thanks to the spec, right?","commit_id":"2c7cc0bf13cf693875af6dd2ff1543b2d946510a"}],"blazar/tests/plugins/instances/test_instance_plugin.py":[{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"b5378ba13a9be50eaf4a36a463acd3aa6ba79c10","unresolved":false,"context_lines":[{"line_number":446,"context_line":"            \u0027memory_mb\u0027: 4096,"},{"line_number":447,"context_line":"            \u0027disk_gb\u0027: 200,"},{"line_number":448,"context_line":"            \u0027amount\u0027: 2,"},{"line_number":449,"context_line":"            \u0027affinity\u0027: None,"},{"line_number":450,"context_line":"            \u0027resource_properties\u0027: \u0027\u0027,"},{"line_number":451,"context_line":"            \u0027start_date\u0027: datetime.datetime(2030, 1, 1, 8, 00),"},{"line_number":452,"context_line":"            \u0027end_date\u0027: datetime.datetime(2030, 1, 1, 12, 00)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_9d7aefb7","line":449,"range":{"start_line":449,"start_character":24,"end_line":449,"end_character":28},"updated":"2019-04-04 09:30:32.000000000","message":"So if the request is from CLI, this is actually a string. \"None\"","commit_id":"29e93cf8e5b8b5cf5291d93bf00407de3fe1283a"}]}
