)]}'
{"openstack_dashboard/dashboards/identity/application_credentials/forms.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a2373764fa05d90a3a1bbd4c9f842658479d75ab","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            else:"},{"line_number":105,"context_line":"                roles \u003d None"},{"line_number":106,"context_line":"            if data.get(\u0027access_rules\u0027):"},{"line_number":107,"context_line":"                access_rules \u003d json.loads(data[\u0027access_rules\u0027])"},{"line_number":108,"context_line":"            else:"},{"line_number":109,"context_line":"                access_rules \u003d None"},{"line_number":110,"context_line":"            new_app_cred \u003d api.keystone.application_credential_create("}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_0c7b26f4","line":107,"range":{"start_line":107,"start_character":31,"end_line":107,"end_character":63},"updated":"2019-10-25 05:36:55.000000000","message":"It is better to check the provided access_rules string is a valid JSON in the validation process. The current implementation just shows a message \"Unable to create application credential: No JSON object could be decoded\".\nSome clearer message would be helpful.\n\"clean\" method would be the best place to do so.","commit_id":"b5079527c0ada9f1dc1835c832f5486c8b789651"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"66d9e2086824d8dd4c68a0ee4222c70f6f193299","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            else:"},{"line_number":105,"context_line":"                roles \u003d None"},{"line_number":106,"context_line":"            if data.get(\u0027access_rules\u0027):"},{"line_number":107,"context_line":"                access_rules \u003d json.loads(data[\u0027access_rules\u0027])"},{"line_number":108,"context_line":"            else:"},{"line_number":109,"context_line":"                access_rules \u003d None"},{"line_number":110,"context_line":"            new_app_cred \u003d api.keystone.application_credential_create("}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_eded2f25","line":107,"range":{"start_line":107,"start_character":31,"end_line":107,"end_character":63},"in_reply_to":"3fa7e38b_0c7b26f4","updated":"2019-10-29 20:35:30.000000000","message":"Done","commit_id":"b5079527c0ada9f1dc1835c832f5486c8b789651"}],"openstack_dashboard/dashboards/identity/application_credentials/templates/application_credentials/_create.html":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a2373764fa05d90a3a1bbd4c9f842658479d75ab","unresolved":false,"context_lines":[{"line_number":39,"context_line":"  rules must be a JSON-formatted list of rules each containing a service type,"},{"line_number":40,"context_line":"  an HTTP method, and a URL path, for example: [{\"service\": \"compute\","},{"line_number":41,"context_line":"  \"method\": \"POST\", \"path\": \"/v2.1/servers\"}]."},{"line_number":42,"context_line":"  {% endblocktrans %}"},{"line_number":43,"context_line":"  \u003c/p\u003e"},{"line_number":44,"context_line":"  \u003cp\u003e"},{"line_number":45,"context_line":"  {% blocktrans trimmed %}"}],"source_content_type":"text/html","patch_set":2,"id":"3fa7e38b_2c75c2fa","line":42,"updated":"2019-10-25 05:36:55.000000000","message":"I wonder which is better JSON string or YAML format.\n\nYAML format would be simpler.\n\n\n  - service: compute\n    method: POST\n    path: /v21./servers\n\nOn the other hand, users can copy and paste access rules from API responses or examples in the API reference.\n\nHow about accepting both? We can accept both JSON and YAML if we replace \"json.loads()\" with \"yaml.load\" in forms.py.","commit_id":"b5079527c0ada9f1dc1835c832f5486c8b789651"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"66d9e2086824d8dd4c68a0ee4222c70f6f193299","unresolved":false,"context_lines":[{"line_number":39,"context_line":"  rules must be a JSON-formatted list of rules each containing a service type,"},{"line_number":40,"context_line":"  an HTTP method, and a URL path, for example: [{\"service\": \"compute\","},{"line_number":41,"context_line":"  \"method\": \"POST\", \"path\": \"/v2.1/servers\"}]."},{"line_number":42,"context_line":"  {% endblocktrans %}"},{"line_number":43,"context_line":"  \u003c/p\u003e"},{"line_number":44,"context_line":"  \u003cp\u003e"},{"line_number":45,"context_line":"  {% blocktrans trimmed %}"}],"source_content_type":"text/html","patch_set":2,"id":"3fa7e38b_cde87317","line":42,"in_reply_to":"3fa7e38b_2c75c2fa","updated":"2019-10-29 20:35:30.000000000","message":"Done","commit_id":"b5079527c0ada9f1dc1835c832f5486c8b789651"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f5c5370bd1c58b7a4da1af5c3273a6727df656f5","unresolved":false,"context_lines":[{"line_number":37,"context_line":"  \u003c/p\u003e"},{"line_number":38,"context_line":"  \u003cp\u003e"},{"line_number":39,"context_line":"  {% blocktrans trimmed %}"},{"line_number":40,"context_line":"  \u003cb\u003eAccess Rules\u003c/b\u003e:"},{"line_number":41,"context_line":"  If you want more fine-grained access control delegation, you can create one"},{"line_number":42,"context_line":"  or more access rules for this application credential. The list of access"},{"line_number":43,"context_line":"  rules must be a JSON- or YAML-formatted list of rules each containing a service type,"}],"source_content_type":"text/html","patch_set":5,"id":"3fa7e38b_e46464bb","line":40,"updated":"2019-10-30 05:49:48.000000000","message":"I added the form field titles in patch set 5 to clarify which description correspond to which field.","commit_id":"4d1786c68724c91c2686cda89540fa91b9c21bcf"}],"openstack_dashboard/dashboards/identity/application_credentials/templates/application_credentials/_detail_overview.html":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a2373764fa05d90a3a1bbd4c9f842658479d75ab","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        \u003c/tbody\u003e"},{"line_number":54,"context_line":"      \u003c/table\u003e"},{"line_number":55,"context_line":"    \u003c/dd\u003e"},{"line_number":56,"context_line":"    {% endif %}"},{"line_number":57,"context_line":"    \u003cdt\u003e{% trans \"Expires\" %}\u003c/dt\u003e"},{"line_number":58,"context_line":"    \u003cdd\u003e{{ application_credential.expires_at | default:_(\"-\") }}\u003c/dd\u003e"},{"line_number":59,"context_line":"    \u003cdt\u003e{% trans \"Unrestricted\" %}\u003c/dt\u003e"}],"source_content_type":"text/html","patch_set":2,"id":"3fa7e38b_4c703e09","line":56,"updated":"2019-10-25 05:36:55.000000000","message":"It looks better to show some message when there is no access rules.","commit_id":"b5079527c0ada9f1dc1835c832f5486c8b789651"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"66d9e2086824d8dd4c68a0ee4222c70f6f193299","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        \u003c/tbody\u003e"},{"line_number":54,"context_line":"      \u003c/table\u003e"},{"line_number":55,"context_line":"    \u003c/dd\u003e"},{"line_number":56,"context_line":"    {% endif %}"},{"line_number":57,"context_line":"    \u003cdt\u003e{% trans \"Expires\" %}\u003c/dt\u003e"},{"line_number":58,"context_line":"    \u003cdd\u003e{{ application_credential.expires_at | default:_(\"-\") }}\u003c/dd\u003e"},{"line_number":59,"context_line":"    \u003cdt\u003e{% trans \"Unrestricted\" %}\u003c/dt\u003e"}],"source_content_type":"text/html","patch_set":2,"id":"3fa7e38b_2d8a6763","line":56,"in_reply_to":"3fa7e38b_4c703e09","updated":"2019-10-29 20:35:30.000000000","message":"Done","commit_id":"b5079527c0ada9f1dc1835c832f5486c8b789651"}]}
