)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"149dd49ab8f2441b658729b725fb8d90c503a782","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We had planned to introduce a \u0027validation\u0027 parameter to the various"},{"line_number":10,"context_line":"extra spec APIs in change If67f0d924ea372746a6dc440ea7bdc655e4f0bea to"},{"line_number":11,"context_line":"configure a policy for extra spec validation. Following reviews, we\u0027ve"},{"line_number":12,"context_line":"decided to instead go with a strict policy for all known namespaces and"},{"line_number":13,"context_line":"no validation for any unknown namespaces. Update the tests we had in"},{"line_number":14,"context_line":"place for this."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: If30990ec1c43177b7d13bd8ee1c5dc481265e47b"},{"line_number":17,"context_line":"Signed-off-by: Stephen Finucane \u003cstephenfin@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"df33271e_bfe06598","line":14,"range":{"start_line":11,"start_character":46,"end_line":14,"end_character":15},"updated":"2020-04-06 17:54:48.000000000","message":"im still not conviced this is the right thing to do but im willing to conced the point.\n\nwe have been bitten badly by make this snap change right at the end of the cycle in the past, im thinking specificly sriov numa affintiy polices where a decision in gerrit shortly before code free to remove the flavor extra spec and image property broke the primarly use case of ironic when we decied to move the polic to the pci aliase which is not use for neutron interface of vnict _type direct,dricect-pysical or macvtap.\n\n\nthis late change feels similar to me but i guess untill we intoduce a new microverion that affecs flavor create or update it will not break anything as user can always use the old microverions.\n\nthis change in policy however to only support strict for new micro versions should really be enforced with a hacking check.\n\ne.g. i think we should have a hacking check that  checks if we ever use flavor.extra_specs[\u0027some_value\u0027] and asserts that is one of the know values so that intoducing a new extra specs without a validtor will casue a ci failuer.\n\nit could also be a unit test but i dont really know how to force that. we could maybe poison the the __get__/__set__  function on the flavor extra specs ovo class to raise an exception if its does not have avalidtor but im not sure how hard that would be to do.\n\nbasicaly i dont think we shoudl rely on a functional test where we actully would triger the validation to assert the presene of the validator as we often dont add functional test when we add an extra_spec.","commit_id":"717b765cfdb701dff0e9f31b219314f5a4ac21c3"}],"nova/api/validation/extra_specs/validators.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"e2acdf3dfd8940d7e79fe8d18106bca81e9849a3","unresolved":false,"context_lines":[{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"VALIDATORS: ty.Dict[str, base.ExtraSpecValidator] \u003d {}"},{"line_number":29,"context_line":"NAMESPACES: ty.Set[str] \u003d set()"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def validate(name: str, value: str):"}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_549dc057","line":29,"updated":"2020-04-06 16:53:33.000000000","message":"Do we have a test to check if the list of NAMESPACES matches all registered extra spec validators?\n\nIt would be nice to have a test with the list of NAMESPACES, as it shouldn\u0027t change. Maybe with a NOTE saying changing this requires a microversion bump?","commit_id":"717b765cfdb701dff0e9f31b219314f5a4ac21c3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"147436022279c7a9d8d41c0198877bb2dc09275e","unresolved":false,"context_lines":[{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"VALIDATORS: ty.Dict[str, base.ExtraSpecValidator] \u003d {}"},{"line_number":29,"context_line":"NAMESPACES: ty.Set[str] \u003d set()"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def validate(name: str, value: str):"}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_fff81f7d","line":29,"in_reply_to":"df33271e_3cda9516","updated":"2020-04-07 09:02:18.000000000","message":"Done","commit_id":"717b765cfdb701dff0e9f31b219314f5a4ac21c3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f71fb7875e6cd66cf3fd90781f213c8e8611b951","unresolved":false,"context_lines":[{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"VALIDATORS: ty.Dict[str, base.ExtraSpecValidator] \u003d {}"},{"line_number":29,"context_line":"NAMESPACES: ty.Set[str] \u003d set()"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def validate(name: str, value: str):"}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_9f93e15c","line":29,"in_reply_to":"df33271e_549dc057","updated":"2020-04-06 17:30:29.000000000","message":"if you have a custom validtor could that not break\n\ne.g. if we were gettign the validator by checking the stevador entry point\n\n\ni would not like the test to change depending on what i have installed.","commit_id":"717b765cfdb701dff0e9f31b219314f5a4ac21c3"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f5e0d2061b5465b651fb48f2784614b112b8dde6","unresolved":false,"context_lines":[{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"VALIDATORS: ty.Dict[str, base.ExtraSpecValidator] \u003d {}"},{"line_number":29,"context_line":"NAMESPACES: ty.Set[str] \u003d set()"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def validate(name: str, value: str):"}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_3cda9516","line":29,"in_reply_to":"df33271e_9f93e15c","updated":"2020-04-07 08:25:58.000000000","message":"I don\u0027t think we should support custom validators, not without more API visibility into it.","commit_id":"717b765cfdb701dff0e9f31b219314f5a4ac21c3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8cbc27d4a81ce197db7eeef59f69b7f77984f33a","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            validator.validate(name, value)"},{"line_number":48,"context_line":"            return"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    namespace \u003d name.split(\u0027:\u0027, 1)[0].split(\u0027{\u0027)[0] if \u0027:\u0027 in name else None"},{"line_number":51,"context_line":"    if not namespace or namespace not in NAMESPACES:  # unregistered namespace"},{"line_number":52,"context_line":"        return"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_9e43b0af","line":50,"range":{"start_line":50,"start_character":38,"end_line":50,"end_character":51},"updated":"2020-04-08 10:26:45.000000000","message":"does this mean we have namespaces with dynaminc names? Also I think there is no test coverage for this part.","commit_id":"bf66ac78bb32a6c8d13dac01f1badd15a9c1d2e7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"56c56c2cf2b06a2c7ccf4ba752795ed0e7255900","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            validator.validate(name, value)"},{"line_number":48,"context_line":"            return"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    namespace \u003d name.split(\u0027:\u0027, 1)[0].split(\u0027{\u0027)[0] if \u0027:\u0027 in name else None"},{"line_number":51,"context_line":"    if not namespace or namespace not in NAMESPACES:  # unregistered namespace"},{"line_number":52,"context_line":"        return"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_9e4a90a9","line":50,"range":{"start_line":50,"start_character":38,"end_line":50,"end_character":51},"in_reply_to":"df33271e_1e5fa072","updated":"2020-04-08 10:32:15.000000000","message":"[1] https://review.opendev.org/#/c/704643/22/nova/api/validation/extra_specs/traits.py@27","commit_id":"bf66ac78bb32a6c8d13dac01f1badd15a9c1d2e7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d1101d836d142ad7832cc5bbadfedc2a9415430f","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            validator.validate(name, value)"},{"line_number":48,"context_line":"            return"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    namespace \u003d name.split(\u0027:\u0027, 1)[0].split(\u0027{\u0027)[0] if \u0027:\u0027 in name else None"},{"line_number":51,"context_line":"    if not namespace or namespace not in NAMESPACES:  # unregistered namespace"},{"line_number":52,"context_line":"        return"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_1e5fa072","line":50,"range":{"start_line":50,"start_character":38,"end_line":50,"end_character":51},"in_reply_to":"df33271e_9e43b0af","updated":"2020-04-08 10:31:33.000000000","message":"Yes. See [1] for example. Let me add a follow-up to address the test coverage gap.","commit_id":"bf66ac78bb32a6c8d13dac01f1badd15a9c1d2e7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8640ca26c60d05506f49d2e3316f3c9586e01864","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            validator.validate(name, value)"},{"line_number":48,"context_line":"            return"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    namespace \u003d name.split(\u0027:\u0027, 1)[0].split(\u0027{\u0027)[0] if \u0027:\u0027 in name else None"},{"line_number":51,"context_line":"    if not namespace or namespace not in NAMESPACES:  # unregistered namespace"},{"line_number":52,"context_line":"        return"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_be92f4f4","line":50,"range":{"start_line":50,"start_character":38,"end_line":50,"end_character":51},"in_reply_to":"df33271e_9e4a90a9","updated":"2020-04-08 10:37:46.000000000","message":"Done at [1]\n\n[1] https://review.opendev.org/#/c/718357/2/nova/tests/unit/api/openstack/compute/test_flavors_extra_specs.py@306","commit_id":"bf66ac78bb32a6c8d13dac01f1badd15a9c1d2e7"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"2c223a3ebe48337b491b9312788baabe83adaf42","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            return"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    namespace \u003d name.split(\u0027:\u0027, 1)[0].split(\u0027{\u0027)[0] if \u0027:\u0027 in name else None"},{"line_number":51,"context_line":"    if not namespace or namespace not in NAMESPACES:  # unregistered namespace"},{"line_number":52,"context_line":"        return"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    raise exception.ValidationError("}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_2937d1b2","line":51,"updated":"2020-04-08 07:31:54.000000000","message":"++ we make it permissive","commit_id":"bf66ac78bb32a6c8d13dac01f1badd15a9c1d2e7"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"2c223a3ebe48337b491b9312788baabe83adaf42","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        for validator in ext.plugin.register():"},{"line_number":74,"context_line":"            VALIDATORS[validator.name] \u003d validator"},{"line_number":75,"context_line":"            if \u0027:\u0027 in validator.name:"},{"line_number":76,"context_line":"                NAMESPACES.add(validator.name.split(\u0027:\u0027, 1)[0].split(\u0027{\u0027)[0])"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"load_validators()"}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_a94ac123","line":76,"updated":"2020-04-08 07:31:54.000000000","message":"and here we dynamically register the existing namespaces.\n\nThat said, just a concern : if we have a new change in Victoria adding a new extraspec using a new namespace, then it will be returning an exception if the key is wrong (while for Ussuri it will just accept it).\n\nI\u0027m fine with this above, but like we said, that\u0027s why people wanting to add a new filter for a new extraspec should also provide an API microversion","commit_id":"bf66ac78bb32a6c8d13dac01f1badd15a9c1d2e7"}],"nova/tests/unit/api/openstack/compute/test_flavors_extra_specs.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"149dd49ab8f2441b658729b725fb8d90c503a782","unresolved":false,"context_lines":[{"line_number":274,"context_line":"            \u0027hw:numa_nodes\u0027: \u0027foo\u0027,"},{"line_number":275,"context_line":"            \u0027hw:cpu_policy\u0027: \u0027sharrred\u0027,"},{"line_number":276,"context_line":"            \u0027hw:cpu_policyyyyyyy\u0027: \u0027shared\u0027,"},{"line_number":277,"context_line":"            \u0027hw:foo\u0027: \u0027bar\u0027,"},{"line_number":278,"context_line":"        }"},{"line_number":279,"context_line":"        for key, value in invalid_specs.items():"},{"line_number":280,"context_line":"            body \u003d {\u0027extra_specs\u0027: {key: value}}"}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_ff4f8d8f","line":277,"range":{"start_line":277,"start_character":10,"end_line":277,"end_character":28},"updated":"2020-04-06 17:54:48.000000000","message":"this partly does not fully test what i was asserting we should test in the commit message","commit_id":"717b765cfdb701dff0e9f31b219314f5a4ac21c3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"227a454710ae93e03d22d8967aff25bdc65a8ed7","unresolved":false,"context_lines":[{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def test_create_invalid_unknown_namespace(self):"},{"line_number":290,"context_line":"        \"\"\"Test behavior of validator with specs from unknown namespace.\"\"\""},{"line_number":291,"context_line":"        invalid_specs \u003d {"},{"line_number":292,"context_line":"            \u0027foo\u0027: \u0027bar\u0027,"},{"line_number":293,"context_line":"            \u0027foo:bar\u0027: \u0027baz\u0027,"},{"line_number":294,"context_line":"            \u0027hww:cpu_policy\u0027: \u0027sharrred\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_71d0d6ca","line":291,"range":{"start_line":291,"start_character":8,"end_line":291,"end_character":21},"updated":"2020-04-06 16:19:28.000000000","message":"unknown_specs might have been a better name. Can address if a follow-up","commit_id":"717b765cfdb701dff0e9f31b219314f5a4ac21c3"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"e2acdf3dfd8940d7e79fe8d18106bca81e9849a3","unresolved":false,"context_lines":[{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def test_create_invalid_unknown_namespace(self):"},{"line_number":290,"context_line":"        \"\"\"Test behavior of validator with specs from unknown namespace.\"\"\""},{"line_number":291,"context_line":"        invalid_specs \u003d {"},{"line_number":292,"context_line":"            \u0027foo\u0027: \u0027bar\u0027,"},{"line_number":293,"context_line":"            \u0027foo:bar\u0027: \u0027baz\u0027,"},{"line_number":294,"context_line":"            \u0027hww:cpu_policy\u0027: \u0027sharrred\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_d49a706c","line":291,"range":{"start_line":291,"start_character":8,"end_line":291,"end_character":21},"in_reply_to":"df33271e_71d0d6ca","updated":"2020-04-06 16:53:33.000000000","message":"meh, yeah, if we need to respin, its a good fix up.","commit_id":"717b765cfdb701dff0e9f31b219314f5a4ac21c3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f71fb7875e6cd66cf3fd90781f213c8e8611b951","unresolved":false,"context_lines":[{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def test_create_invalid_unknown_namespace(self):"},{"line_number":290,"context_line":"        \"\"\"Test behavior of validator with specs from unknown namespace.\"\"\""},{"line_number":291,"context_line":"        invalid_specs \u003d {"},{"line_number":292,"context_line":"            \u0027foo\u0027: \u0027bar\u0027,"},{"line_number":293,"context_line":"            \u0027foo:bar\u0027: \u0027baz\u0027,"},{"line_number":294,"context_line":"            \u0027hww:cpu_policy\u0027: \u0027sharrred\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_ff8dcd31","line":291,"range":{"start_line":291,"start_character":8,"end_line":291,"end_character":21},"in_reply_to":"df33271e_d49a706c","updated":"2020-04-06 17:30:29.000000000","message":"i think that makes sense to update too but i would do it in a follow up as you said or if you respin this.","commit_id":"717b765cfdb701dff0e9f31b219314f5a4ac21c3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"147436022279c7a9d8d41c0198877bb2dc09275e","unresolved":false,"context_lines":[{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def test_create_invalid_unknown_namespace(self):"},{"line_number":290,"context_line":"        \"\"\"Test behavior of validator with specs from unknown namespace.\"\"\""},{"line_number":291,"context_line":"        invalid_specs \u003d {"},{"line_number":292,"context_line":"            \u0027foo\u0027: \u0027bar\u0027,"},{"line_number":293,"context_line":"            \u0027foo:bar\u0027: \u0027baz\u0027,"},{"line_number":294,"context_line":"            \u0027hww:cpu_policy\u0027: \u0027sharrred\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_5feb0b11","line":291,"range":{"start_line":291,"start_character":8,"end_line":291,"end_character":21},"in_reply_to":"df33271e_ff8dcd31","updated":"2020-04-07 09:02:18.000000000","message":"Done","commit_id":"717b765cfdb701dff0e9f31b219314f5a4ac21c3"}],"nova/tests/unit/api/validation/extra_specs/test_validators.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c2a8c4718ab2888b956f4bceae4c2c83779c0cdf","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        If we add new namespaces, they should be added to this list."},{"line_number":28,"context_line":"        \"\"\""},{"line_number":29,"context_line":"        namespaces \u003d {"},{"line_number":30,"context_line":"            \u0027accel\u0027, \u0027aggregate_instance_extra_specs\u0027, \u0027capabilities\u0027, \u0027hw\u0027,"},{"line_number":31,"context_line":"            \u0027hw_rng\u0027, \u0027hw_video\u0027, \u0027os\u0027, \u0027pci_passthrough\u0027, \u0027powervm\u0027, \u0027quota\u0027,"},{"line_number":32,"context_line":"            \u0027resources\u0027, \u0027trait\u0027, \u0027vmware\u0027,"},{"line_number":33,"context_line":"        }"},{"line_number":34,"context_line":"        self.assertTrue("},{"line_number":35,"context_line":"            namespaces.issubset(validators.NAMESPACES),"}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_b30b7022","line":32,"range":{"start_line":30,"start_character":10,"end_line":32,"end_character":43},"updated":"2020-04-07 11:04:06.000000000","message":"nit you could probaly make this dynamic by doing a dir() of\n nova.api.validation.extra_specs \nbut this is fine too","commit_id":"bf66ac78bb32a6c8d13dac01f1badd15a9c1d2e7"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"2c223a3ebe48337b491b9312788baabe83adaf42","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        If we add new namespaces, they should be added to this list."},{"line_number":28,"context_line":"        \"\"\""},{"line_number":29,"context_line":"        namespaces \u003d {"},{"line_number":30,"context_line":"            \u0027accel\u0027, \u0027aggregate_instance_extra_specs\u0027, \u0027capabilities\u0027, \u0027hw\u0027,"},{"line_number":31,"context_line":"            \u0027hw_rng\u0027, \u0027hw_video\u0027, \u0027os\u0027, \u0027pci_passthrough\u0027, \u0027powervm\u0027, \u0027quota\u0027,"},{"line_number":32,"context_line":"            \u0027resources\u0027, \u0027trait\u0027, \u0027vmware\u0027,"},{"line_number":33,"context_line":"        }"},{"line_number":34,"context_line":"        self.assertTrue("},{"line_number":35,"context_line":"            namespaces.issubset(validators.NAMESPACES),"}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_e954c9cc","line":32,"range":{"start_line":30,"start_character":10,"end_line":32,"end_character":43},"in_reply_to":"df33271e_b30b7022","updated":"2020-04-08 07:31:54.000000000","message":"Agreed. Can be done in a FUP.","commit_id":"bf66ac78bb32a6c8d13dac01f1badd15a9c1d2e7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7269cdc5e46aa5180130bb53c18ef50f7b561b0e","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        If we add new namespaces, they should be added to this list."},{"line_number":28,"context_line":"        \"\"\""},{"line_number":29,"context_line":"        namespaces \u003d {"},{"line_number":30,"context_line":"            \u0027accel\u0027, \u0027aggregate_instance_extra_specs\u0027, \u0027capabilities\u0027, \u0027hw\u0027,"},{"line_number":31,"context_line":"            \u0027hw_rng\u0027, \u0027hw_video\u0027, \u0027os\u0027, \u0027pci_passthrough\u0027, \u0027powervm\u0027, \u0027quota\u0027,"},{"line_number":32,"context_line":"            \u0027resources\u0027, \u0027trait\u0027, \u0027vmware\u0027,"},{"line_number":33,"context_line":"        }"},{"line_number":34,"context_line":"        self.assertTrue("},{"line_number":35,"context_line":"            namespaces.issubset(validators.NAMESPACES),"}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_4fd4d5bd","line":32,"range":{"start_line":30,"start_character":10,"end_line":32,"end_character":43},"in_reply_to":"df33271e_e954c9cc","updated":"2020-04-08 09:21:04.000000000","message":"I don\u0027t want to do that since it implies a somewhat artificial link between the names of the files containing the validators and the namespaces we use. I\u0027d also have to rename the \u0027traits.py\u0027 file to \u0027trait.py\u0027","commit_id":"bf66ac78bb32a6c8d13dac01f1badd15a9c1d2e7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c2a8c4718ab2888b956f4bceae4c2c83779c0cdf","unresolved":false,"context_lines":[{"line_number":32,"context_line":"            \u0027resources\u0027, \u0027trait\u0027, \u0027vmware\u0027,"},{"line_number":33,"context_line":"        }"},{"line_number":34,"context_line":"        self.assertTrue("},{"line_number":35,"context_line":"            namespaces.issubset(validators.NAMESPACES),"},{"line_number":36,"context_line":"            f\u0027{namespaces} is not a subset of {validators.NAMESPACES}\u0027,"},{"line_number":37,"context_line":"        )"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_3345a044","line":35,"range":{"start_line":35,"start_character":23,"end_line":35,"end_character":31},"updated":"2020-04-07 11:04:06.000000000","message":"issubset is correct as we want to assert that all the intree validator are present and ignore out of tree vailidators which issubset will do","commit_id":"bf66ac78bb32a6c8d13dac01f1badd15a9c1d2e7"}]}
