)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"385da13e3a6abbdba952e8a69953fdf99f1c05e2","unresolved":false,"context_lines":[{"line_number":10,"context_line":"if a user creates rbac policy whitout target_tenant, it will happen"},{"line_number":11,"context_line":"a internal error."},{"line_number":12,"context_line":"This patch adds a check for target_tenant, it must be a string which"},{"line_number":13,"context_line":"length is TENANT_ID_MAX_LEN."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I757b4b56a8cb1a8060cee3103ee2aead9be574de"},{"line_number":16,"context_line":"Closes-bug: #1517331"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"da0c15f0_9d4fc8bc","line":13,"updated":"2016-03-28 07:55:20.000000000","message":"commit message needs to be updated to indicate the change to the policy engine","commit_id":"50d7cd1ed619ea8c2971cbf65cdf0a74dbce3e4a"},{"author":{"_account_id":20128,"name":"Han Chao","email":"hanchao7@lenovo.com","username":"HanChao"},"change_message_id":"d2df168cefb387d245ba6d93b989b838644feaac","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Now the default value of target_tenant in rbac_policies resource is None,"},{"line_number":10,"context_line":"if a user creates rbac policy whitout target_tenant, it will happen"},{"line_number":11,"context_line":"a internal error."},{"line_number":12,"context_line":"This patch adds a check for target_tenant, it must be a string which"},{"line_number":13,"context_line":"length is TENANT_ID_MAX_LEN."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"dab17558_636eb330","line":11,"updated":"2016-05-09 10:43:27.000000000","message":"A minor correct could be applied if possible:\n-\u003e an internal error is raised. Therefore, the default None shall be dropped.","commit_id":"455c9fd821066701e95e39531e86a3a7b71f3e9a"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"7eb8b3a3ed4b3ca5b7253e5fbd4372c6f3decb4c","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Currently the default value of target_tenant in rbac_policies resource"},{"line_number":10,"context_line":"is None. If a user creates rbac policy without a target_tenant, neutron"},{"line_number":11,"context_line":"raises an internal error."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This patch adds a check for target_tenant, it must be a string which"},{"line_number":14,"context_line":"length is TENANT_ID_MAX_LEN."},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":24,"id":"7aa08908_0a9b2119","line":12,"updated":"2016-06-14 00:36:28.000000000","message":"please mention the fix to the policy engine in the commit message as well to allow enforce_policy to work on attrs without defaults","commit_id":"0a92c47d07025644e8c9006b925f848d0ca67481"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"45ec9a5749ae3604dcdd5fdc00b41e2cde8d15da","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Currently the default value of target_tenant in rbac_policies resource"},{"line_number":10,"context_line":"is None. If a user creates rbac policy without a target_tenant, neutron"},{"line_number":11,"context_line":"raises an internal error."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This patch adds a check for target_tenant, it must be a string which"},{"line_number":14,"context_line":"length is TENANT_ID_MAX_LEN."},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":24,"id":"7aa08908_9a73e07f","line":12,"in_reply_to":"7aa08908_0a9b2119","updated":"2016-06-14 02:41:25.000000000","message":"agree","commit_id":"0a92c47d07025644e8c9006b925f848d0ca67481"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"43d317f0fb718f29bb098b7866878fa340b0f0d9","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Check target_tenant when create rbac policy"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Now the default value of target_tenant in rbac_policies resource is None,"},{"line_number":10,"context_line":"if a user creates rbac policy whitout target_tenant, it will happen"},{"line_number":11,"context_line":"a internal error."},{"line_number":12,"context_line":"This patch adds a check for target_tenant, it must be a string which"},{"line_number":13,"context_line":"length is TENANT_ID_MAX_LEN."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"7aa08908_0bc84021","line":10,"range":{"start_line":10,"start_character":30,"end_line":10,"end_character":37},"updated":"2016-06-14 04:55:24.000000000","message":"without","commit_id":"49a63e14522b16627d0ae4f1f1e3031a80f93462"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"5a739c2e88d83799eccde606f520113423e2a6dc","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Check target_tenant when create rbac policy"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Now the default value of target_tenant in rbac_policies resource is None,"},{"line_number":10,"context_line":"if a user creates rbac policy whitout target_tenant, it will happen"},{"line_number":11,"context_line":"a internal error."},{"line_number":12,"context_line":"This patch adds a check for target_tenant, it must be a string which"},{"line_number":13,"context_line":"length is TENANT_ID_MAX_LEN."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"7aa08908_419ce70d","line":10,"range":{"start_line":10,"start_character":30,"end_line":10,"end_character":37},"in_reply_to":"7aa08908_0bc84021","updated":"2016-06-14 06:21:12.000000000","message":"Done","commit_id":"49a63e14522b16627d0ae4f1f1e3031a80f93462"}],"neutron/db/rbac_db_mixin.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"1a1d5ca10507ebe95bb4bb5bd578128f6f9ae57b","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        dbmodel \u003d models.get_type_model_map()[e[\u0027object_type\u0027]]"},{"line_number":45,"context_line":"        tenant_id \u003d self._get_tenant_id_for_create(context, e)"},{"line_number":46,"context_line":"        if not e[\u0027target_tenant\u0027]:"},{"line_number":47,"context_line":"            e[\u0027target_tenant\u0027] \u003d tenant_id"},{"line_number":48,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":49,"context_line":"            db_entry \u003d dbmodel(object_id\u003de[\u0027object_id\u0027],"},{"line_number":50,"context_line":"                               target_tenant\u003de[\u0027target_tenant\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_673a7b9a","line":47,"updated":"2015-11-24 06:49:33.000000000","message":"Just thinking aloud, should the neutronclient be updated to explain this behavior? Ignore it if you don\u0027t like it. :)","commit_id":"9dc9c3c2f2f2aa6a993f72acf20fe2d45d2278d0"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"04f6a5a7c0a1cd2dcf114c932ed28ed5e3d15c1d","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        dbmodel \u003d models.get_type_model_map()[e[\u0027object_type\u0027]]"},{"line_number":45,"context_line":"        tenant_id \u003d self._get_tenant_id_for_create(context, e)"},{"line_number":46,"context_line":"        if not e[\u0027target_tenant\u0027]:"},{"line_number":47,"context_line":"            e[\u0027target_tenant\u0027] \u003d tenant_id"},{"line_number":48,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":49,"context_line":"            db_entry \u003d dbmodel(object_id\u003de[\u0027object_id\u0027],"},{"line_number":50,"context_line":"                               target_tenant\u003de[\u0027target_tenant\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_871aff15","line":47,"in_reply_to":"ba8a016a_673a7b9a","updated":"2015-11-24 06:53:52.000000000","message":"Can be incorporated in the HELP section for target_tenant in Neutronclient, but not explicitly required.","commit_id":"9dc9c3c2f2f2aa6a993f72acf20fe2d45d2278d0"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"4f3fa45233a1e4f6772fe1e73f55afd2121742cd","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        dbmodel \u003d models.get_type_model_map()[e[\u0027object_type\u0027]]"},{"line_number":45,"context_line":"        tenant_id \u003d self._get_tenant_id_for_create(context, e)"},{"line_number":46,"context_line":"        if not e[\u0027target_tenant\u0027]:"},{"line_number":47,"context_line":"            e[\u0027target_tenant\u0027] \u003d tenant_id"},{"line_number":48,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":49,"context_line":"            db_entry \u003d dbmodel(object_id\u003de[\u0027object_id\u0027],"},{"line_number":50,"context_line":"                               target_tenant\u003de[\u0027target_tenant\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_6707db81","line":47,"in_reply_to":"ba8a016a_673a7b9a","updated":"2015-11-24 08:55:19.000000000","message":"yes, I agree with you to update neutronclient to explain this behavior, but I think it will be in a new patch","commit_id":"9dc9c3c2f2f2aa6a993f72acf20fe2d45d2278d0"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"4f3fa45233a1e4f6772fe1e73f55afd2121742cd","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        dbmodel \u003d models.get_type_model_map()[e[\u0027object_type\u0027]]"},{"line_number":45,"context_line":"        tenant_id \u003d self._get_tenant_id_for_create(context, e)"},{"line_number":46,"context_line":"        if not e[\u0027target_tenant\u0027]:"},{"line_number":47,"context_line":"            e[\u0027target_tenant\u0027] \u003d tenant_id"},{"line_number":48,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":49,"context_line":"            db_entry \u003d dbmodel(object_id\u003de[\u0027object_id\u0027],"},{"line_number":50,"context_line":"                               target_tenant\u003de[\u0027target_tenant\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_c7f8077f","line":47,"in_reply_to":"ba8a016a_871aff15","updated":"2015-11-24 08:55:19.000000000","message":"Done","commit_id":"9dc9c3c2f2f2aa6a993f72acf20fe2d45d2278d0"},{"author":{"_account_id":17211,"name":"Brandon Palm","email":"bapalm@us.ibm.com","username":"bapalm"},"change_message_id":"5ba208ee8264734c58ad71e8628cfffc9805b7ba","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        dbmodel \u003d models.get_type_model_map()[e[\u0027object_type\u0027]]"},{"line_number":45,"context_line":"        tenant_id \u003d self._get_tenant_id_for_create(context, e)"},{"line_number":46,"context_line":"        if not e[\u0027target_tenant\u0027]:"},{"line_number":47,"context_line":"            e[\u0027target_tenant\u0027] \u003d tenant_id"},{"line_number":48,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":49,"context_line":"            db_entry \u003d dbmodel(object_id\u003de[\u0027object_id\u0027],"},{"line_number":50,"context_line":"                               target_tenant\u003de[\u0027target_tenant\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a7b0d38_3d2e8443","line":47,"range":{"start_line":47,"start_character":33,"end_line":47,"end_character":42},"updated":"2015-12-29 15:56:35.000000000","message":"Could you do this in a one liner such as:\n\ne[\u0027target_tenant\u0027] \u003d e[\u0027target_tenant\u0027] or tenant_id","commit_id":"582330d46da019ef452e1b8882410a1a8f3c4777"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"4f82727190caf23b8ced8a88b4609f25c58b9a87","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        dbmodel \u003d models.get_type_model_map()[e[\u0027object_type\u0027]]"},{"line_number":45,"context_line":"        tenant_id \u003d self._get_tenant_id_for_create(context, e)"},{"line_number":46,"context_line":"        if not e[\u0027target_tenant\u0027]:"},{"line_number":47,"context_line":"            e[\u0027target_tenant\u0027] \u003d tenant_id"},{"line_number":48,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":49,"context_line":"            db_entry \u003d dbmodel(object_id\u003de[\u0027object_id\u0027],"},{"line_number":50,"context_line":"                               target_tenant\u003de[\u0027target_tenant\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa69d971_2a6cb49b","line":47,"range":{"start_line":47,"start_character":33,"end_line":47,"end_character":42},"in_reply_to":"1a7b0d38_3d2e8443","updated":"2015-12-30 00:45:47.000000000","message":"agree","commit_id":"582330d46da019ef452e1b8882410a1a8f3c4777"}],"neutron/extensions/rbac.py":[{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"cead9b5d8a32c092d6f593617ec27b96aedf3e3d","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                      \u0027is_visible\u0027: True, \u0027default\u0027: None,"},{"line_number":59,"context_line":"                      \u0027enforce_policy\u0027: True},"},{"line_number":60,"context_line":"        \u0027target_tenant\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":61,"context_line":"                          \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":62,"context_line":"                          \u0027is_visible\u0027: True, \u0027enforce_policy\u0027: True},"},{"line_number":63,"context_line":"        \u0027tenant_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":64,"context_line":"                      \u0027required_by_policy\u0027: True, \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa69d971_fc8ee3ce","line":61,"updated":"2016-01-05 09:42:57.000000000","message":"tenant IDs are opaque strings to neutron. we can\u0027t have this one validated as UUID because we don\u0027t validate the tenant ID that way anywhere else. (e.g. see https://github.com/openstack/neutron/blob/master/neutron/api/v2/attributes.py#L695-L698)\n\n the only thing we should validate is that the API caller provided something and that it doesn\u0027t exceed the max tenant ID length we have elsewhere (i.e. how tenant_id is validated for network).","commit_id":"c5765581a48578ba0035a9ef137300f6f02878f8"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"2b68873895135086ad66a9a85de3c377506c3e9d","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                      \u0027is_visible\u0027: True, \u0027default\u0027: None,"},{"line_number":59,"context_line":"                      \u0027enforce_policy\u0027: True},"},{"line_number":60,"context_line":"        \u0027target_tenant\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":61,"context_line":"                          \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":62,"context_line":"                          \u0027is_visible\u0027: True, \u0027enforce_policy\u0027: True},"},{"line_number":63,"context_line":"        \u0027tenant_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":64,"context_line":"                      \u0027required_by_policy\u0027: True, \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa69d971_6f41d037","line":61,"in_reply_to":"fa69d971_fc8ee3ce","updated":"2016-01-05 11:11:18.000000000","message":"agree with your suggestion","commit_id":"c5765581a48578ba0035a9ef137300f6f02878f8"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"d8d62c64d9237fa21aff7450d18fda32b92899ab","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                      \u0027enforce_policy\u0027: True},"},{"line_number":60,"context_line":"        \u0027target_tenant\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":61,"context_line":"                          \u0027validate\u0027: {\u0027type:string\u0027: attr.TENANT_ID_MAX_LEN},"},{"line_number":62,"context_line":"                          \u0027is_visible\u0027: True, \u0027default\u0027: None,"},{"line_number":63,"context_line":"                          \u0027enforce_policy\u0027: True},"},{"line_number":64,"context_line":"        \u0027tenant_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":65,"context_line":"                      \u0027required_by_policy\u0027: True, \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a5ae5dd_ac07d5c8","line":62,"updated":"2016-02-05 10:49:33.000000000","message":"+1. drop the default","commit_id":"11261fd105bd634c007d00f7b70666edc8f64832"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"30078691bbaa074814602d45a31ef1df5174253f","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                      \u0027enforce_policy\u0027: True},"},{"line_number":60,"context_line":"        \u0027target_tenant\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":61,"context_line":"                          \u0027validate\u0027: {\u0027type:string\u0027: attr.TENANT_ID_MAX_LEN},"},{"line_number":62,"context_line":"                          \u0027is_visible\u0027: True, \u0027default\u0027: None,"},{"line_number":63,"context_line":"                          \u0027enforce_policy\u0027: True},"},{"line_number":64,"context_line":"        \u0027tenant_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":65,"context_line":"                      \u0027required_by_policy\u0027: True, \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a5ae5dd_afeaa7aa","line":62,"range":{"start_line":62,"start_character":46,"end_line":62,"end_character":62},"updated":"2016-02-04 10:01:35.000000000","message":"Do we still need \u0027default: None\u0027?\n\nAccording to the bug report, we get internal server error when target_tenant is None. After this patch, we reject None as target_tenant. This means we always require target_tenant specified, so I wonder whether we need a default value...","commit_id":"11261fd105bd634c007d00f7b70666edc8f64832"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"bbfe82b586ee67f6fc3eb57a388ad365d52b8667","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                      \u0027enforce_policy\u0027: True},"},{"line_number":60,"context_line":"        \u0027target_tenant\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":61,"context_line":"                          \u0027validate\u0027: {\u0027type:string\u0027: attr.TENANT_ID_MAX_LEN},"},{"line_number":62,"context_line":"                          \u0027is_visible\u0027: True, \u0027default\u0027: None,"},{"line_number":63,"context_line":"                          \u0027enforce_policy\u0027: True},"},{"line_number":64,"context_line":"        \u0027tenant_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":65,"context_line":"                      \u0027required_by_policy\u0027: True, \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":13,"id":"dae33548_5b3abbce","line":62,"in_reply_to":"5a5ae5dd_ac07d5c8","updated":"2016-02-14 08:11:14.000000000","message":"hi kevin and Akihiro Motoki, \u0027target_tenant\u0027 in policy.json define as \"rule:restrict_wildcard\", \"restrict_wildcard\": \"(not field:rbac_policy:target_tenant\u003d*) or rule:admin_only\", so if we remove default value, the regular user can create rbac policy with target_tenant\u003d*","commit_id":"11261fd105bd634c007d00f7b70666edc8f64832"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"43d317f0fb718f29bb098b7866878fa340b0f0d9","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        \u0027target_tenant\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":66,"context_line":"                          \u0027validate\u0027: {\u0027type:string\u0027: attr.TENANT_ID_MAX_LEN},"},{"line_number":67,"context_line":"                          \u0027is_visible\u0027: True, \u0027enforce_policy\u0027: True},"},{"line_number":68,"context_line":"        \u0027tenant_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":69,"context_line":"                      \u0027required_by_policy\u0027: True, \u0027is_visible\u0027: True},"},{"line_number":70,"context_line":"        \u0027action\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":71,"context_line":"                   # action depends on type so validation has to occur in"}],"source_content_type":"text/x-python","patch_set":25,"id":"7aa08908_cbf91850","line":68,"updated":"2016-06-14 04:55:24.000000000","message":"please also add this here","commit_id":"49a63e14522b16627d0ae4f1f1e3031a80f93462"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"003e89a4efefc566aab94c775c22063ccbb7ff13","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        \u0027target_tenant\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":66,"context_line":"                          \u0027validate\u0027: {\u0027type:string\u0027: attr.TENANT_ID_MAX_LEN},"},{"line_number":67,"context_line":"                          \u0027is_visible\u0027: True, \u0027enforce_policy\u0027: True},"},{"line_number":68,"context_line":"        \u0027tenant_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":69,"context_line":"                      \u0027required_by_policy\u0027: True, \u0027is_visible\u0027: True},"},{"line_number":70,"context_line":"        \u0027action\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":71,"context_line":"                   # action depends on type so validation has to occur in"}],"source_content_type":"text/x-python","patch_set":25,"id":"7aa08908_215c3b7c","line":68,"in_reply_to":"7aa08908_cbf91850","updated":"2016-06-14 06:17:51.000000000","message":"got it","commit_id":"49a63e14522b16627d0ae4f1f1e3031a80f93462"}],"neutron/policy.py":[{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"385da13e3a6abbdba952e8a69953fdf99f1c05e2","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                target[attribute_name] is not attributes.ATTR_NOT_SPECIFIED)"},{"line_number":93,"context_line":"    result \u003d (attribute_name in target and"},{"line_number":94,"context_line":"              target[attribute_name] is not attributes.ATTR_NOT_SPECIFIED)"},{"line_number":95,"context_line":"    if \u0027default\u0027 in resource[attribute_name]:"},{"line_number":96,"context_line":"        return (result and"},{"line_number":97,"context_line":"                target[attribute_name] !\u003d resource[attribute_name][\u0027default\u0027])"},{"line_number":98,"context_line":"    return result"}],"source_content_type":"text/x-python","patch_set":19,"id":"da0c15f0_5d55304e","line":95,"updated":"2016-03-28 07:55:20.000000000","message":"if you do \"if result and \u0027default\u0027 in resource[attribute_name]:\" the line below doesn\u0027t need to wrap","commit_id":"50d7cd1ed619ea8c2971cbf65cdf0a74dbce3e4a"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"385da13e3a6abbdba952e8a69953fdf99f1c05e2","unresolved":false,"context_lines":[{"line_number":95,"context_line":"    if \u0027default\u0027 in resource[attribute_name]:"},{"line_number":96,"context_line":"        return (result and"},{"line_number":97,"context_line":"                target[attribute_name] !\u003d resource[attribute_name][\u0027default\u0027])"},{"line_number":98,"context_line":"    return result"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"def _should_validate_sub_attributes(attribute, sub_attr):"}],"source_content_type":"text/x-python","patch_set":19,"id":"da0c15f0_3d503c5e","line":98,"updated":"2016-03-28 07:55:20.000000000","message":"Please add a unit test to the policy engine unit tests for this.","commit_id":"50d7cd1ed619ea8c2971cbf65cdf0a74dbce3e4a"},{"author":{"_account_id":6876,"name":"stephen-ma","email":"stephenbma43@gmail.com","username":"stephen-ma"},"change_message_id":"b66a1b09519b9a5858592e1a1fe6beea2ff4fd26","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        return (attribute_name in target[const.ATTRIBUTES_TO_UPDATE] and"},{"line_number":94,"context_line":"                target[attribute_name] is not constants.ATTR_NOT_SPECIFIED)"},{"line_number":95,"context_line":"    result \u003d (attribute_name in target and"},{"line_number":96,"context_line":"              target[attribute_name] is not attributes.ATTR_NOT_SPECIFIED)"},{"line_number":97,"context_line":"    if result and \u0027default\u0027 in resource[attribute_name]:"},{"line_number":98,"context_line":"        return target[attribute_name] !\u003d resource[attribute_name][\u0027default\u0027]"},{"line_number":99,"context_line":"    return result"}],"source_content_type":"text/x-python","patch_set":22,"id":"bab6814e_66a1d6a9","line":96,"range":{"start_line":96,"start_character":0,"end_line":96,"end_character":74},"updated":"2016-05-18 14:40:02.000000000","message":"This caused a deprecation warning.  It should be \"constants.ATTR_NOT_ATTRIBUTES\" instead of \"attributes.ATTR_NOT_SPECIFIED\".","commit_id":"f55ffa8c0c1a97ca4b80eeb7e57056559a927800"},{"author":{"_account_id":6876,"name":"stephen-ma","email":"stephenbma43@gmail.com","username":"stephen-ma"},"change_message_id":"364527ee89318f74fd9cfd33f38f911604e54768","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        return (attribute_name in target[const.ATTRIBUTES_TO_UPDATE] and"},{"line_number":94,"context_line":"                target[attribute_name] is not constants.ATTR_NOT_SPECIFIED)"},{"line_number":95,"context_line":"    result \u003d (attribute_name in target and"},{"line_number":96,"context_line":"              target[attribute_name] is not attributes.ATTR_NOT_SPECIFIED)"},{"line_number":97,"context_line":"    if result and \u0027default\u0027 in resource[attribute_name]:"},{"line_number":98,"context_line":"        return target[attribute_name] !\u003d resource[attribute_name][\u0027default\u0027]"},{"line_number":99,"context_line":"    return result"}],"source_content_type":"text/x-python","patch_set":22,"id":"bab6814e_c1d86cf2","line":96,"range":{"start_line":96,"start_character":0,"end_line":96,"end_character":74},"in_reply_to":"bab6814e_66a1d6a9","updated":"2016-05-18 14:53:04.000000000","message":"ATTR_NOT_ATTRIBUTES --\u003e ATTR_NOT_SPECIFIED","commit_id":"f55ffa8c0c1a97ca4b80eeb7e57056559a927800"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"0294f8f6ef7b266f0d6cec31f9727952246e5be3","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        return (attribute_name in target[const.ATTRIBUTES_TO_UPDATE] and"},{"line_number":94,"context_line":"                target[attribute_name] is not constants.ATTR_NOT_SPECIFIED)"},{"line_number":95,"context_line":"    result \u003d (attribute_name in target and"},{"line_number":96,"context_line":"              target[attribute_name] is not attributes.ATTR_NOT_SPECIFIED)"},{"line_number":97,"context_line":"    if result and \u0027default\u0027 in resource[attribute_name]:"},{"line_number":98,"context_line":"        return target[attribute_name] !\u003d resource[attribute_name][\u0027default\u0027]"},{"line_number":99,"context_line":"    return result"}],"source_content_type":"text/x-python","patch_set":28,"id":"7aa08908_1a6069a4","line":96,"range":{"start_line":96,"start_character":44,"end_line":96,"end_character":54},"updated":"2016-06-14 15:50:50.000000000","message":"constants","commit_id":"aaa9a4c95bd4855e3ed65b4d7915f39bacb5e201"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"51a5d75d05f9a66333f76d8eb2ade2bd51470de3","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        return (attribute_name in target[const.ATTRIBUTES_TO_UPDATE] and"},{"line_number":94,"context_line":"                target[attribute_name] is not constants.ATTR_NOT_SPECIFIED)"},{"line_number":95,"context_line":"    result \u003d (attribute_name in target and"},{"line_number":96,"context_line":"              target[attribute_name] is not attributes.ATTR_NOT_SPECIFIED)"},{"line_number":97,"context_line":"    if result and \u0027default\u0027 in resource[attribute_name]:"},{"line_number":98,"context_line":"        return target[attribute_name] !\u003d resource[attribute_name][\u0027default\u0027]"},{"line_number":99,"context_line":"    return result"}],"source_content_type":"text/x-python","patch_set":28,"id":"7aa08908_1dcfad29","line":96,"range":{"start_line":96,"start_character":44,"end_line":96,"end_character":54},"in_reply_to":"7aa08908_1a6069a4","updated":"2016-06-15 00:33:33.000000000","message":"Done","commit_id":"aaa9a4c95bd4855e3ed65b4d7915f39bacb5e201"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"0294f8f6ef7b266f0d6cec31f9727952246e5be3","unresolved":false,"context_lines":[{"line_number":96,"context_line":"              target[attribute_name] is not attributes.ATTR_NOT_SPECIFIED)"},{"line_number":97,"context_line":"    if result and \u0027default\u0027 in resource[attribute_name]:"},{"line_number":98,"context_line":"        return target[attribute_name] !\u003d resource[attribute_name][\u0027default\u0027]"},{"line_number":99,"context_line":"    return result"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"def _should_validate_sub_attributes(attribute, sub_attr):"}],"source_content_type":"text/x-python","patch_set":28,"id":"7aa08908_daf0a193","line":99,"updated":"2016-06-14 15:50:50.000000000","message":"There are no unit tests for this method? :(","commit_id":"aaa9a4c95bd4855e3ed65b4d7915f39bacb5e201"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"51a5d75d05f9a66333f76d8eb2ade2bd51470de3","unresolved":false,"context_lines":[{"line_number":96,"context_line":"              target[attribute_name] is not attributes.ATTR_NOT_SPECIFIED)"},{"line_number":97,"context_line":"    if result and \u0027default\u0027 in resource[attribute_name]:"},{"line_number":98,"context_line":"        return target[attribute_name] !\u003d resource[attribute_name][\u0027default\u0027]"},{"line_number":99,"context_line":"    return result"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"def _should_validate_sub_attributes(attribute, sub_attr):"}],"source_content_type":"text/x-python","patch_set":28,"id":"7aa08908_5dddb5de","line":99,"in_reply_to":"7aa08908_daf0a193","updated":"2016-06-15 00:33:33.000000000","message":"you are right, I forgot it","commit_id":"aaa9a4c95bd4855e3ed65b4d7915f39bacb5e201"}],"neutron/tests/api/admin/test_shared_network_extension.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"1a1d5ca10507ebe95bb4bb5bd578128f6f9ae57b","unresolved":false,"context_lines":[{"line_number":205,"context_line":"    def test_create_rbac_policy_with_target_tenant_none(self):"},{"line_number":206,"context_line":"        target_tenant \u003d None"},{"line_number":207,"context_line":"        net \u003d self._make_admin_net_and_subnet_shared_to_tenant_id("},{"line_number":208,"context_line":"            target_tenant)[\u0027network\u0027]"},{"line_number":209,"context_line":"        self.client.show_network(net[\u0027id\u0027])"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_0c6dd603","line":208,"updated":"2015-11-24 06:49:33.000000000","message":"Why not just pass None to the method?","commit_id":"9dc9c3c2f2f2aa6a993f72acf20fe2d45d2278d0"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"4f3fa45233a1e4f6772fe1e73f55afd2121742cd","unresolved":false,"context_lines":[{"line_number":205,"context_line":"    def test_create_rbac_policy_with_target_tenant_none(self):"},{"line_number":206,"context_line":"        target_tenant \u003d None"},{"line_number":207,"context_line":"        net \u003d self._make_admin_net_and_subnet_shared_to_tenant_id("},{"line_number":208,"context_line":"            target_tenant)[\u0027network\u0027]"},{"line_number":209,"context_line":"        self.client.show_network(net[\u0027id\u0027])"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_a6e2a29e","line":208,"in_reply_to":"ba8a016a_0c6dd603","updated":"2015-11-24 08:55:19.000000000","message":"Done","commit_id":"9dc9c3c2f2f2aa6a993f72acf20fe2d45d2278d0"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"1a1d5ca10507ebe95bb4bb5bd578128f6f9ae57b","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        target_tenant \u003d None"},{"line_number":207,"context_line":"        net \u003d self._make_admin_net_and_subnet_shared_to_tenant_id("},{"line_number":208,"context_line":"            target_tenant)[\u0027network\u0027]"},{"line_number":209,"context_line":"        self.client.show_network(net[\u0027id\u0027])"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":212,"context_line":"    @test.idempotent_id(\u002786c3529b-1231-40de-803c-afffffff1fff\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_ec07321b","line":209,"updated":"2015-11-24 06:49:33.000000000","message":"I think you should check that client2 can\u0027t see this network, just like line 217~219. Because the behavior for None tenant is to use the current tenant.","commit_id":"9dc9c3c2f2f2aa6a993f72acf20fe2d45d2278d0"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"04f6a5a7c0a1cd2dcf114c932ed28ed5e3d15c1d","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        target_tenant \u003d None"},{"line_number":207,"context_line":"        net \u003d self._make_admin_net_and_subnet_shared_to_tenant_id("},{"line_number":208,"context_line":"            target_tenant)[\u0027network\u0027]"},{"line_number":209,"context_line":"        self.client.show_network(net[\u0027id\u0027])"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":212,"context_line":"    @test.idempotent_id(\u002786c3529b-1231-40de-803c-afffffff1fff\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_67bd9bd6","line":209,"in_reply_to":"ba8a016a_ec07321b","updated":"2015-11-24 06:53:52.000000000","message":"+1,this is a necessary clause for this test case","commit_id":"9dc9c3c2f2f2aa6a993f72acf20fe2d45d2278d0"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"1a1d5ca10507ebe95bb4bb5bd578128f6f9ae57b","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        self.client.show_network(net[\u0027id\u0027])"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":212,"context_line":"    @test.idempotent_id(\u002786c3529b-1231-40de-803c-afffffff1fff\u0027)"},{"line_number":213,"context_line":"    def test_network_only_visible_to_policy_target(self):"},{"line_number":214,"context_line":"        net \u003d self._make_admin_net_and_subnet_shared_to_tenant_id("},{"line_number":215,"context_line":"            self.client.tenant_id)[\u0027network\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_ec8412b2","line":212,"updated":"2015-11-24 06:49:33.000000000","message":"Duplicated idempotent_id with line 204.","commit_id":"9dc9c3c2f2f2aa6a993f72acf20fe2d45d2278d0"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"4f3fa45233a1e4f6772fe1e73f55afd2121742cd","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        self.client.show_network(net[\u0027id\u0027])"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":212,"context_line":"    @test.idempotent_id(\u002786c3529b-1231-40de-803c-afffffff1fff\u0027)"},{"line_number":213,"context_line":"    def test_network_only_visible_to_policy_target(self):"},{"line_number":214,"context_line":"        net \u003d self._make_admin_net_and_subnet_shared_to_tenant_id("},{"line_number":215,"context_line":"            self.client.tenant_id)[\u0027network\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_e6dc2ae6","line":212,"in_reply_to":"ba8a016a_ec8412b2","updated":"2015-11-24 08:55:19.000000000","message":"Done","commit_id":"9dc9c3c2f2f2aa6a993f72acf20fe2d45d2278d0"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"ba1ef9194b5aace06a1a900713cde8e53b706b6c","unresolved":false,"context_lines":[{"line_number":206,"context_line":"    @test.idempotent_id(\u002786c3529b-1231-40de-803c-afffffff1eee\u0027)"},{"line_number":207,"context_line":"    def test_create_rbac_policy_with_target_tenant_none(self):"},{"line_number":208,"context_line":"        with testtools.ExpectedException(lib_exc.BadRequest):"},{"line_number":209,"context_line":"            self._make_admin_net_and_subnet_shared_to_tenant_id()[\u0027network\u0027]"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":212,"context_line":"    @test.idempotent_id(\u002786c3529b-1231-40de-803c-afffffff1fee\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a68dd71_88c4c192","line":209,"range":{"start_line":209,"start_character":65,"end_line":209,"end_character":76},"updated":"2016-01-20 17:17:45.000000000","message":"do your have any plan for the return value here? if not yet, please remove the \"[\u0027network\u0027]\" here","commit_id":"cd455bb067e263eaa5b0ef9e6c13d5391fc801ad"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"4fa4defbc4370b9d2071473842a554dd54d432d5","unresolved":false,"context_lines":[{"line_number":206,"context_line":"    @test.idempotent_id(\u002786c3529b-1231-40de-803c-afffffff1eee\u0027)"},{"line_number":207,"context_line":"    def test_create_rbac_policy_with_target_tenant_none(self):"},{"line_number":208,"context_line":"        with testtools.ExpectedException(lib_exc.BadRequest):"},{"line_number":209,"context_line":"            self._make_admin_net_and_subnet_shared_to_tenant_id()[\u0027network\u0027]"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":212,"context_line":"    @test.idempotent_id(\u002786c3529b-1231-40de-803c-afffffff1fee\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a68dd71_056e65c9","line":209,"range":{"start_line":209,"start_character":65,"end_line":209,"end_character":76},"in_reply_to":"9a68dd71_88c4c192","updated":"2016-01-21 00:58:10.000000000","message":"agree","commit_id":"cd455bb067e263eaa5b0ef9e6c13d5391fc801ad"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"ba1ef9194b5aace06a1a900713cde8e53b706b6c","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        with testtools.ExpectedException(lib_exc.BadRequest):"},{"line_number":215,"context_line":"            target_tenant \u003d \u00271234\u0027 * 100"},{"line_number":216,"context_line":"            self._make_admin_net_and_subnet_shared_to_tenant_id("},{"line_number":217,"context_line":"                tenant_id\u003dtarget_tenant)[\u0027network\u0027]"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":220,"context_line":"    @test.idempotent_id(\u002786c3529b-1231-40de-803c-afffffff1fff\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a68dd71_a8c18582","line":217,"updated":"2016-01-20 17:17:45.000000000","message":"ditto","commit_id":"cd455bb067e263eaa5b0ef9e6c13d5391fc801ad"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"4fa4defbc4370b9d2071473842a554dd54d432d5","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        with testtools.ExpectedException(lib_exc.BadRequest):"},{"line_number":215,"context_line":"            target_tenant \u003d \u00271234\u0027 * 100"},{"line_number":216,"context_line":"            self._make_admin_net_and_subnet_shared_to_tenant_id("},{"line_number":217,"context_line":"                tenant_id\u003dtarget_tenant)[\u0027network\u0027]"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":220,"context_line":"    @test.idempotent_id(\u002786c3529b-1231-40de-803c-afffffff1fff\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a68dd71_c5684dbd","line":217,"in_reply_to":"9a68dd71_a8c18582","updated":"2016-01-21 00:58:10.000000000","message":"Done","commit_id":"cd455bb067e263eaa5b0ef9e6c13d5391fc801ad"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"385da13e3a6abbdba952e8a69953fdf99f1c05e2","unresolved":false,"context_lines":[{"line_number":186,"context_line":"            raise cls.skipException(msg)"},{"line_number":187,"context_line":"        cls.client2 \u003d cls.alt_manager.network_client"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def _make_admin_net_and_subnet_shared_to_tenant_id(self, tenant_id\u003dNone):"},{"line_number":190,"context_line":"        net \u003d self.admin_client.create_network("},{"line_number":191,"context_line":"            name\u003ddata_utils.rand_name(\u0027test-network-\u0027))[\u0027network\u0027]"},{"line_number":192,"context_line":"        self.addCleanup(self.admin_client.delete_network, net[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":19,"id":"da0c15f0_7d4ab4ad","line":189,"updated":"2016-03-28 07:55:20.000000000","message":"I don\u0027t think changing the default makes sense here since there is only one test that uses it and it breaks when it\u0027s used. Just make the test below specify None.","commit_id":"50d7cd1ed619ea8c2971cbf65cdf0a74dbce3e4a"}],"neutron/tests/tempest/api/admin/test_shared_network_extension.py":[{"author":{"_account_id":16264,"name":"zhenmei","email":"zma@vmware.com","username":"zma"},"change_message_id":"26a7a1347812909ec19d4c96b287a8389ac45b1d","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        return {\u0027network\u0027: net, \u0027subnet\u0027: subnet, \u0027policy\u0027: pol}"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":196,"context_line":"    @test.idempotent_id(\u002786c3529b-1231-40de-803c-afffffff1eee\u0027)"},{"line_number":197,"context_line":"    def test_create_rbac_policy_with_target_tenant_none(self):"},{"line_number":198,"context_line":"        with testtools.ExpectedException(lib_exc.BadRequest):"},{"line_number":199,"context_line":"            self._make_admin_net_and_subnet_shared_to_tenant_id("}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_be32cc0d","line":196,"range":{"start_line":196,"start_character":48,"end_line":196,"end_character":49},"updated":"2016-06-15 05:26:47.000000000","message":"nit: the idempotent_id should be unique for each test case","commit_id":"b5a0852a9b4881b70bb5b00a98977ebb12d4c8ba"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"5be88781ce0574a555ea4c246f4f3a75ce29586c","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        return {\u0027network\u0027: net, \u0027subnet\u0027: subnet, \u0027policy\u0027: pol}"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":196,"context_line":"    @test.idempotent_id(\u002786c3529b-1231-40de-803c-afffffff1eee\u0027)"},{"line_number":197,"context_line":"    def test_create_rbac_policy_with_target_tenant_none(self):"},{"line_number":198,"context_line":"        with testtools.ExpectedException(lib_exc.BadRequest):"},{"line_number":199,"context_line":"            self._make_admin_net_and_subnet_shared_to_tenant_id("}],"source_content_type":"text/x-python","patch_set":30,"id":"3aaa91ec_033072e7","line":196,"range":{"start_line":196,"start_character":48,"end_line":196,"end_character":49},"in_reply_to":"7aa08908_be32cc0d","updated":"2016-06-29 08:22:16.000000000","message":"\u002786c3529b-1231-40de-803c-afffffff1eee\u0027 is already unique","commit_id":"b5a0852a9b4881b70bb5b00a98977ebb12d4c8ba"},{"author":{"_account_id":16264,"name":"zhenmei","email":"zma@vmware.com","username":"zma"},"change_message_id":"26a7a1347812909ec19d4c96b287a8389ac45b1d","unresolved":false,"context_lines":[{"line_number":200,"context_line":"                tenant_id\u003dNone)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":203,"context_line":"    @test.idempotent_id(\u002786c3529b-1231-40de-803c-afffffff1fee\u0027)"},{"line_number":204,"context_line":"    def test_create_rbac_policy_with_target_tenant_too_long_id(self):"},{"line_number":205,"context_line":"        with testtools.ExpectedException(lib_exc.BadRequest):"},{"line_number":206,"context_line":"            target_tenant \u003d \u00271234\u0027 * 100"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_791b5e73","line":203,"updated":"2016-06-15 05:26:47.000000000","message":"ditto","commit_id":"b5a0852a9b4881b70bb5b00a98977ebb12d4c8ba"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"5be88781ce0574a555ea4c246f4f3a75ce29586c","unresolved":false,"context_lines":[{"line_number":200,"context_line":"                tenant_id\u003dNone)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":203,"context_line":"    @test.idempotent_id(\u002786c3529b-1231-40de-803c-afffffff1fee\u0027)"},{"line_number":204,"context_line":"    def test_create_rbac_policy_with_target_tenant_too_long_id(self):"},{"line_number":205,"context_line":"        with testtools.ExpectedException(lib_exc.BadRequest):"},{"line_number":206,"context_line":"            target_tenant \u003d \u00271234\u0027 * 100"}],"source_content_type":"text/x-python","patch_set":30,"id":"3aaa91ec_4350ba0a","line":203,"in_reply_to":"7aa08908_791b5e73","updated":"2016-06-29 08:22:16.000000000","message":"Done","commit_id":"b5a0852a9b4881b70bb5b00a98977ebb12d4c8ba"}],"neutron/tests/unit/test_policy.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ea7dca29920af6c2334a91e353943be57bc41530","unresolved":false,"context_lines":[{"line_number":630,"context_line":"                           \u0027validate\u0027: {\u0027type:string\u0027: 10}}}"},{"line_number":631,"context_line":""},{"line_number":632,"context_line":"        result \u003d policy._is_attribute_explicitly_set("},{"line_number":633,"context_line":"            attr, resource, target, action)"},{"line_number":634,"context_line":"        self.assertTrue(result)"},{"line_number":635,"context_line":""},{"line_number":636,"context_line":"        target \u003d {\u0027tgt-tenant\u0027: \u0027tenantA\u0027}"}],"source_content_type":"text/x-python","patch_set":30,"id":"7aa08908_ffe6fd48","line":633,"updated":"2016-06-15 12:45:36.000000000","message":"It is better to test a public method, in this case policy.check().\nIt is because public methods are the interface which policy module provides. private methods can be changed.","commit_id":"b5a0852a9b4881b70bb5b00a98977ebb12d4c8ba"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"5be88781ce0574a555ea4c246f4f3a75ce29586c","unresolved":false,"context_lines":[{"line_number":630,"context_line":"                           \u0027validate\u0027: {\u0027type:string\u0027: 10}}}"},{"line_number":631,"context_line":""},{"line_number":632,"context_line":"        result \u003d policy._is_attribute_explicitly_set("},{"line_number":633,"context_line":"            attr, resource, target, action)"},{"line_number":634,"context_line":"        self.assertTrue(result)"},{"line_number":635,"context_line":""},{"line_number":636,"context_line":"        target \u003d {\u0027tgt-tenant\u0027: \u0027tenantA\u0027}"}],"source_content_type":"text/x-python","patch_set":30,"id":"3aaa91ec_a3099e2e","line":633,"in_reply_to":"7aa08908_ffe6fd48","updated":"2016-06-29 08:22:16.000000000","message":"hi Akihiro Motoki, thx for your suggetion, but I don\u0027t know how to test the change with policy.check(), as I understand, we can test a special rule with policy.check() like #L287, for \u0027create_rbac_policy\u0027, it is already tested in test_shared_network_extension.py, what do you think?","commit_id":"b5a0852a9b4881b70bb5b00a98977ebb12d4c8ba"}]}
