)]}'
{"keystone/server/flask/common.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"25a2286d24907fc148dff6eb99f8847b53235f46","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                           would be listed as an alternate url. These are not"},{"line_number":77,"context_line":"                           added to the JSON Home Document."},{"line_number":78,"context_line":"    :type: any iterable or None"},{"line_number":79,"context_line":"    :param rel:"},{"line_number":80,"context_line":"    :type rel: str or None"},{"line_number":81,"context_line":"    :param status:"},{"line_number":82,"context_line":"    :type status: str"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_045a971c","line":79,"range":{"start_line":79,"start_character":5,"end_line":79,"end_character":15},"updated":"2018-06-26 21:41:59.000000000","message":"Add param info.","commit_id":"48ef2a11c6f0f4fd85358c6738867997ec7e0d29"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"25a2286d24907fc148dff6eb99f8847b53235f46","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    :type: any iterable or None"},{"line_number":79,"context_line":"    :param rel:"},{"line_number":80,"context_line":"    :type rel: str or None"},{"line_number":81,"context_line":"    :param status:"},{"line_number":82,"context_line":"    :type status: str"},{"line_number":83,"context_line":"    :param path_vars:"},{"line_number":84,"context_line":"    :type path_vars: dict or None"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_c49d7fbb","line":81,"range":{"start_line":81,"start_character":6,"end_line":81,"end_character":18},"updated":"2018-06-26 21:41:59.000000000","message":"Same as above.","commit_id":"48ef2a11c6f0f4fd85358c6738867997ec7e0d29"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"25a2286d24907fc148dff6eb99f8847b53235f46","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    :type rel: str or None"},{"line_number":81,"context_line":"    :param status:"},{"line_number":82,"context_line":"    :type status: str"},{"line_number":83,"context_line":"    :param path_vars:"},{"line_number":84,"context_line":"    :type path_vars: dict or None"},{"line_number":85,"context_line":"    :param resource_relation_func:"},{"line_number":86,"context_line":"    :type resource_relation_func: callable"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_64a02bf4","line":83,"range":{"start_line":83,"start_character":5,"end_line":83,"end_character":21},"updated":"2018-06-26 21:41:59.000000000","message":"Same as above","commit_id":"48ef2a11c6f0f4fd85358c6738867997ec7e0d29"},{"author":{"_account_id":16465,"name":"Kristi Nikolla","email":"knikolla@bu.edu","username":"knikolla"},"change_message_id":"1c1b29d739547240b890bada950db10ccd2aa7a8","unresolved":false,"context_lines":[{"line_number":33,"context_line":"from keystone import exception"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"_URL_SUBST \u003d re.compile(r\u0027\u003c[^\\s:]+:([^\u003e]+)\u003e\u0027)"},{"line_number":37,"context_line":"CONF \u003d keystone.conf.CONF"},{"line_number":38,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":39,"context_line":"ResourceMap \u003d collections.namedtuple("}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_67630c1b","line":36,"updated":"2018-07-12 14:42:05.000000000","message":"A comment explaining this regular expression would be useful. Mandatory xkcd https://www.xkcd.com/208/","commit_id":"0b579900e0c1b844c7d35236342bf7922792bda2"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"370648cabffa44d1d2df72845febe8258e787b39","unresolved":false,"context_lines":[{"line_number":33,"context_line":"from keystone import exception"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"_URL_SUBST \u003d re.compile(r\u0027\u003c[^\\s:]+:([^\u003e]+)\u003e\u0027)"},{"line_number":37,"context_line":"CONF \u003d keystone.conf.CONF"},{"line_number":38,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":39,"context_line":"ResourceMap \u003d collections.namedtuple("}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_3c5be3f9","line":36,"in_reply_to":"5f7c97a3_67630c1b","updated":"2018-07-12 17:24:38.000000000","message":"# NOTE(morgan): Mandatory Cartoon Character Swearing.\n\n^_^","commit_id":"0b579900e0c1b844c7d35236342bf7922792bda2"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"96b2447b454045bdfa198e9ffcb90f5ca33f259c","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    \"\"\""},{"line_number":105,"context_line":"    if rel is not None:"},{"line_number":106,"context_line":"        jh_data \u003d construct_json_home_data("},{"line_number":107,"context_line":"            rel\u003drel, status\u003dstatus, path_vars\u003dpath_vars,"},{"line_number":108,"context_line":"            resource_relation_func\u003dresource_relation_func)"},{"line_number":109,"context_line":"    else:"},{"line_number":110,"context_line":"        jh_data \u003d None"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_de7ce772","line":107,"range":{"start_line":107,"start_character":12,"end_line":107,"end_character":16},"updated":"2018-07-16 16:27:26.000000000","message":"super nit: this doesn\u0027t need to be passed as a kwarg, but only a style thing..","commit_id":"16be22b428fd0c7c34dd48417878f7d37ad1e2ac"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"fee7b46959b561799fc63bfdd426f52befe5c283","unresolved":false,"context_lines":[{"line_number":682,"context_line":"        url \u003d wsgiref.util.application_uri(flask.request.environ)"},{"line_number":683,"context_line":"        # remove version from the URL as it may be part of SCRIPT_NAME but"},{"line_number":684,"context_line":"        # it should not be part of base URL"},{"line_number":685,"context_line":"        url \u003d re.sub(r\u0027/v(3|(2\\.0))/*$\u0027, \u0027\u0027, url)"},{"line_number":686,"context_line":""},{"line_number":687,"context_line":"        # now remove the standard port"},{"line_number":688,"context_line":"        url \u003d utils.remove_standard_port(url)"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_ad378ce4","line":685,"range":{"start_line":685,"start_character":28,"end_line":685,"end_character":34},"updated":"2018-07-16 07:40:52.000000000","message":"it\u0027s out of date, we can update it in a following patch.","commit_id":"16be22b428fd0c7c34dd48417878f7d37ad1e2ac"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"96b2447b454045bdfa198e9ffcb90f5ca33f259c","unresolved":false,"context_lines":[{"line_number":682,"context_line":"        url \u003d wsgiref.util.application_uri(flask.request.environ)"},{"line_number":683,"context_line":"        # remove version from the URL as it may be part of SCRIPT_NAME but"},{"line_number":684,"context_line":"        # it should not be part of base URL"},{"line_number":685,"context_line":"        url \u003d re.sub(r\u0027/v(3|(2\\.0))/*$\u0027, \u0027\u0027, url)"},{"line_number":686,"context_line":""},{"line_number":687,"context_line":"        # now remove the standard port"},{"line_number":688,"context_line":"        url \u003d utils.remove_standard_port(url)"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_1ebb3fe4","line":685,"range":{"start_line":685,"start_character":28,"end_line":685,"end_character":34},"in_reply_to":"5f7c97a3_ad378ce4","updated":"2018-07-16 16:27:26.000000000","message":"++ good catch, we should also add a set of tests for this specific regex.","commit_id":"16be22b428fd0c7c34dd48417878f7d37ad1e2ac"}],"keystone/tests/unit/core.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"96b2447b454045bdfa198e9ffcb90f5ca33f259c","unresolved":false,"context_lines":[{"line_number":505,"context_line":"    def inner(*args, **kwargs):"},{"line_number":506,"context_line":"        # Get the \"expected_status_code\" kwarg if supplied. If not supplied use"},{"line_number":507,"context_line":"        # the `_default_expected_response` mapping, or fall through to"},{"line_number":508,"context_line":"        # \"HTTP OK\" if the method is somehow unknown."},{"line_number":509,"context_line":"        expected_status_code \u003d kwargs.pop("},{"line_number":510,"context_line":"            \u0027expected_status_code\u0027,"},{"line_number":511,"context_line":"            _default_expected_responses.get("}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_7e903350","line":508,"range":{"start_line":508,"start_character":20,"end_line":508,"end_character":53},"updated":"2018-07-16 16:27:26.000000000","message":"This would blow up with a 405 in flask before reaching this point, yeah?\n\nAlso, thanks for adding the compatibility for reasonable default expected status comparisons.","commit_id":"16be22b428fd0c7c34dd48417878f7d37ad1e2ac"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"6053f906190e12ff9305c4261b72de14f0555013","unresolved":false,"context_lines":[{"line_number":505,"context_line":"    def inner(*args, **kwargs):"},{"line_number":506,"context_line":"        # Get the \"expected_status_code\" kwarg if supplied. If not supplied use"},{"line_number":507,"context_line":"        # the `_default_expected_response` mapping, or fall through to"},{"line_number":508,"context_line":"        # \"HTTP OK\" if the method is somehow unknown."},{"line_number":509,"context_line":"        expected_status_code \u003d kwargs.pop("},{"line_number":510,"context_line":"            \u0027expected_status_code\u0027,"},{"line_number":511,"context_line":"            _default_expected_responses.get("}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_5b50e42c","line":508,"range":{"start_line":508,"start_character":20,"end_line":508,"end_character":53},"in_reply_to":"5f7c97a3_7e903350","updated":"2018-07-16 17:46:07.000000000","message":"Correct.","commit_id":"16be22b428fd0c7c34dd48417878f7d37ad1e2ac"}],"keystone/tests/unit/server/test_keystone_flask.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"da7968a25d6bd5a99502dbf46ade6922c5c74787","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def post(self):"},{"line_number":64,"context_line":"        rbac_enforcer.enforcer.RBACEnforcer.enforce_call("},{"line_number":65,"context_line":"            action\u003d\u0027example:allowed\u0027)"},{"line_number":66,"context_line":"        ref \u003d flask.request.get_json(force\u003dTrue)"},{"line_number":67,"context_line":"        ref \u003d self._assign_unique_id(ref)"},{"line_number":68,"context_line":"        self._storage_dict[ref[\u0027id\u0027]] \u003d ref"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_3da39845","line":65,"range":{"start_line":65,"start_character":19,"end_line":65,"end_character":36},"updated":"2018-07-03 20:01:16.000000000","message":"I\u0027m not sure how big of a deal this is, but I was expecting this to be something like `identity:create_arguments`, just thinking about it in terms of what we have today. Unless that\u0027s not the goal?","commit_id":"77ce76ad424aa1e1f190cea7d7ce5b6f2b21686a"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"add78d53e9d50c3a1c00452c94923dd205c64095","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def post(self):"},{"line_number":64,"context_line":"        rbac_enforcer.enforcer.RBACEnforcer.enforce_call("},{"line_number":65,"context_line":"            action\u003d\u0027example:allowed\u0027)"},{"line_number":66,"context_line":"        ref \u003d flask.request.get_json(force\u003dTrue)"},{"line_number":67,"context_line":"        ref \u003d self._assign_unique_id(ref)"},{"line_number":68,"context_line":"        self._storage_dict[ref[\u0027id\u0027]] \u003d ref"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_c52e4aaa","line":65,"range":{"start_line":65,"start_character":19,"end_line":65,"end_character":36},"in_reply_to":"5f7c97a3_3da39845","updated":"2018-07-03 20:40:22.000000000","message":"the goal here is totally synthetic test of the pipeline. I can change what the rule is, but the goal is to not lean a pure unit test on anything that might change (unrelated). This is why both in enforcer and here we created and registered new defaults, the only way the rule fails because the rule changed is if the test rule is changed without the test changing (or vice-versa).","commit_id":"77ce76ad424aa1e1f190cea7d7ce5b6f2b21686a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"da7968a25d6bd5a99502dbf46ade6922c5c74787","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        def register_rules(enf_obj):"},{"line_number":136,"context_line":"            enf_obj.register_defaults(self._policy_rules)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        self.useFixture(fixtures.MockPatchObject("},{"line_number":139,"context_line":"            enf, \u0027register_rules\u0027, register_rules))"},{"line_number":140,"context_line":"        self.useFixture(fixtures.MockPatchObject("},{"line_number":141,"context_line":"            rbac_enforcer.enforcer, \u0027_POSSIBLE_TARGET_ACTIONS\u0027,"},{"line_number":142,"context_line":"            {r.name for r in self._policy_rules}))"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_3d2638cd","line":139,"range":{"start_line":138,"start_character":8,"end_line":139,"end_character":51},"updated":"2018-07-03 20:01:16.000000000","message":"Same comment here as in a previous patch that needed specific policy values.","commit_id":"77ce76ad424aa1e1f190cea7d7ce5b6f2b21686a"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"add78d53e9d50c3a1c00452c94923dd205c64095","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        def register_rules(enf_obj):"},{"line_number":136,"context_line":"            enf_obj.register_defaults(self._policy_rules)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        self.useFixture(fixtures.MockPatchObject("},{"line_number":139,"context_line":"            enf, \u0027register_rules\u0027, register_rules))"},{"line_number":140,"context_line":"        self.useFixture(fixtures.MockPatchObject("},{"line_number":141,"context_line":"            rbac_enforcer.enforcer, \u0027_POSSIBLE_TARGET_ACTIONS\u0027,"},{"line_number":142,"context_line":"            {r.name for r in self._policy_rules}))"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_c8fc1f0e","line":139,"range":{"start_line":138,"start_character":8,"end_line":139,"end_character":51},"in_reply_to":"5f7c97a3_3d2638cd","updated":"2018-07-03 20:40:22.000000000","message":"Responded in the previous patch.","commit_id":"77ce76ad424aa1e1f190cea7d7ce5b6f2b21686a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"da7968a25d6bd5a99502dbf46ade6922c5c74787","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        self.addCleanup("},{"line_number":147,"context_line":"            _TestResourceWithCollectionInfo._reset)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _get_token(self):"},{"line_number":150,"context_line":"        auth_json \u003d {"},{"line_number":151,"context_line":"            \u0027auth\u0027: {"},{"line_number":152,"context_line":"                \u0027identity\u0027: {"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_c5fc0a0e","line":149,"updated":"2018-07-03 20:01:16.000000000","message":"This is duplicated from somewhere else, yeah?\n\nIt might pay to may this generalized (to an extent) and put it somewhere that we can re-use it. I don\u0027t think it needs to be a class level model, just module containing utilities might be sufficient instead of having to incorporate all this kind of stuff in to the class inheritance.","commit_id":"77ce76ad424aa1e1f190cea7d7ce5b6f2b21686a"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"add78d53e9d50c3a1c00452c94923dd205c64095","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        self.addCleanup("},{"line_number":147,"context_line":"            _TestResourceWithCollectionInfo._reset)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _get_token(self):"},{"line_number":150,"context_line":"        auth_json \u003d {"},{"line_number":151,"context_line":"            \u0027auth\u0027: {"},{"line_number":152,"context_line":"                \u0027identity\u0027: {"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_e5334612","line":149,"in_reply_to":"5f7c97a3_c5fc0a0e","updated":"2018-07-03 20:40:22.000000000","message":"Some squashing down into the rest test case will happen. I expect to have some of that in future tests, trying to keep things isolated at the moment.\n\nThe duplication you saw was in the enforcer test.","commit_id":"77ce76ad424aa1e1f190cea7d7ce5b6f2b21686a"},{"author":{"_account_id":16465,"name":"Kristi Nikolla","email":"knikolla@bu.edu","username":"knikolla"},"change_message_id":"1c1b29d739547240b890bada950db10ccd2aa7a8","unresolved":false,"context_lines":[{"line_number":205,"context_line":"                   expected_status_code\u003d404)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"            # PUT non-existent ref"},{"line_number":208,"context_line":"            c.get(\u0027%s/%s\u0027 % (url, unknown_id), json\u003d{}, headers\u003dheaders,"},{"line_number":209,"context_line":"                  expected_status_code\u003d404)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"            # PATCH non-existent ref"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_aa4009a4","line":208,"range":{"start_line":208,"start_character":14,"end_line":208,"end_character":17},"updated":"2018-07-12 14:42:05.000000000","message":"/s/get/put/","commit_id":"0b579900e0c1b844c7d35236342bf7922792bda2"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"370648cabffa44d1d2df72845febe8258e787b39","unresolved":false,"context_lines":[{"line_number":205,"context_line":"                   expected_status_code\u003d404)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"            # PUT non-existent ref"},{"line_number":208,"context_line":"            c.get(\u0027%s/%s\u0027 % (url, unknown_id), json\u003d{}, headers\u003dheaders,"},{"line_number":209,"context_line":"                  expected_status_code\u003d404)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"            # PATCH non-existent ref"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_1c0f07e1","line":208,"range":{"start_line":208,"start_character":14,"end_line":208,"end_character":17},"in_reply_to":"5f7c97a3_aa4009a4","updated":"2018-07-12 17:24:38.000000000","message":"fixed in next.","commit_id":"0b579900e0c1b844c7d35236342bf7922792bda2"},{"author":{"_account_id":16465,"name":"Kristi Nikolla","email":"knikolla@bu.edu","username":"knikolla"},"change_message_id":"1c1b29d739547240b890bada950db10ccd2aa7a8","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                  expected_status_code\u003d404)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"            # PATCH non-existent ref"},{"line_number":212,"context_line":"            c.get(\u0027%s/%s\u0027 % (url, unknown_id), json\u003d{}, headers\u003dheaders,"},{"line_number":213,"context_line":"                  expected_status_code\u003d404)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"            # DELETE non-existent ref"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_0a09fd82","line":212,"range":{"start_line":212,"start_character":14,"end_line":212,"end_character":17},"updated":"2018-07-12 14:42:05.000000000","message":"/s/get/patch/","commit_id":"0b579900e0c1b844c7d35236342bf7922792bda2"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"370648cabffa44d1d2df72845febe8258e787b39","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                  expected_status_code\u003d404)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"            # PATCH non-existent ref"},{"line_number":212,"context_line":"            c.get(\u0027%s/%s\u0027 % (url, unknown_id), json\u003d{}, headers\u003dheaders,"},{"line_number":213,"context_line":"                  expected_status_code\u003d404)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"            # DELETE non-existent ref"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_bcf373e8","line":212,"range":{"start_line":212,"start_character":14,"end_line":212,"end_character":17},"in_reply_to":"5f7c97a3_0a09fd82","updated":"2018-07-12 17:24:38.000000000","message":"Fixed in next.","commit_id":"0b579900e0c1b844c7d35236342bf7922792bda2"},{"author":{"_account_id":16465,"name":"Kristi Nikolla","email":"knikolla@bu.edu","username":"knikolla"},"change_message_id":"1c1b29d739547240b890bada950db10ccd2aa7a8","unresolved":false,"context_lines":[{"line_number":286,"context_line":"                             get_patched_ref_resp)"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"            # DELETE first ref"},{"line_number":289,"context_line":"            c.delete("},{"line_number":290,"context_line":"                \u0027%s/%s\u0027 % (url, new_argument_resp[\u0027id\u0027]),"},{"line_number":291,"context_line":"                headers\u003dheaders)"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    def test_api_url_prefix(self):"},{"line_number":294,"context_line":"        url_prefix \u003d \u0027/%s\u0027 % uuid.uuid4().hex"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_aadc89e1","line":291,"range":{"start_line":289,"start_character":12,"end_line":291,"end_character":32},"updated":"2018-07-12 14:42:05.000000000","message":"worth checking that this either isn\u0027t in the list anymore or that get returns 404 after this.","commit_id":"0b579900e0c1b844c7d35236342bf7922792bda2"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"370648cabffa44d1d2df72845febe8258e787b39","unresolved":false,"context_lines":[{"line_number":286,"context_line":"                             get_patched_ref_resp)"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"            # DELETE first ref"},{"line_number":289,"context_line":"            c.delete("},{"line_number":290,"context_line":"                \u0027%s/%s\u0027 % (url, new_argument_resp[\u0027id\u0027]),"},{"line_number":291,"context_line":"                headers\u003dheaders)"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    def test_api_url_prefix(self):"},{"line_number":294,"context_line":"        url_prefix \u003d \u0027/%s\u0027 % uuid.uuid4().hex"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_7cfddbb0","line":291,"range":{"start_line":289,"start_character":12,"end_line":291,"end_character":32},"in_reply_to":"5f7c97a3_aadc89e1","updated":"2018-07-12 17:24:38.000000000","message":"Sure.","commit_id":"0b579900e0c1b844c7d35236342bf7922792bda2"},{"author":{"_account_id":16465,"name":"Kristi Nikolla","email":"knikolla@bu.edu","username":"knikolla"},"change_message_id":"1c1b29d739547240b890bada950db10ccd2aa7a8","unresolved":false,"context_lines":[{"line_number":320,"context_line":"        class TestAPIDuplicateAfter(_TestRestfulAPI):"},{"line_number":321,"context_line":"            def __init__(self):"},{"line_number":322,"context_line":"                super(TestAPIDuplicateAfter, self).__init__()"},{"line_number":323,"context_line":"                self._register_before_request_functions()"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        self.assertRaises(AssertionError, TestAPIDuplicateAfter)"},{"line_number":326,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_2a9f1903","line":323,"range":{"start_line":323,"start_character":31,"end_line":323,"end_character":37},"updated":"2018-07-12 14:42:05.000000000","message":"s/before/after/","commit_id":"0b579900e0c1b844c7d35236342bf7922792bda2"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"370648cabffa44d1d2df72845febe8258e787b39","unresolved":false,"context_lines":[{"line_number":320,"context_line":"        class TestAPIDuplicateAfter(_TestRestfulAPI):"},{"line_number":321,"context_line":"            def __init__(self):"},{"line_number":322,"context_line":"                super(TestAPIDuplicateAfter, self).__init__()"},{"line_number":323,"context_line":"                self._register_before_request_functions()"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        self.assertRaises(AssertionError, TestAPIDuplicateAfter)"},{"line_number":326,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_3c29a339","line":323,"range":{"start_line":323,"start_character":31,"end_line":323,"end_character":37},"in_reply_to":"5f7c97a3_2a9f1903","updated":"2018-07-12 17:24:38.000000000","message":"In next.","commit_id":"0b579900e0c1b844c7d35236342bf7922792bda2"},{"author":{"_account_id":16465,"name":"Kristi Nikolla","email":"knikolla@bu.edu","username":"knikolla"},"change_message_id":"1c1b29d739547240b890bada950db10ccd2aa7a8","unresolved":false,"context_lines":[{"line_number":447,"context_line":"        with self.test_client() as c:"},{"line_number":448,"context_line":"            body \u003d {\u0027test_value\u0027: uuid.uuid4().hex}"},{"line_number":449,"context_line":"            resp \u003d c.post(\u0027/v3/test_api\u0027, json\u003dbody,"},{"line_number":450,"context_line":"                          headers\u003d{\u0027X-Auth-Token\u0027: token})"},{"line_number":451,"context_line":"            self.assertEqual(body, resp.json[\u0027post_body\u0027])"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"    def test_mapped_resource_routes(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_cd36bfe9","line":450,"range":{"start_line":450,"start_character":26,"end_line":450,"end_character":57},"updated":"2018-07-12 14:42:05.000000000","message":"shouldn\u0027t unenforced not require a token?","commit_id":"0b579900e0c1b844c7d35236342bf7922792bda2"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"370648cabffa44d1d2df72845febe8258e787b39","unresolved":false,"context_lines":[{"line_number":447,"context_line":"        with self.test_client() as c:"},{"line_number":448,"context_line":"            body \u003d {\u0027test_value\u0027: uuid.uuid4().hex}"},{"line_number":449,"context_line":"            resp \u003d c.post(\u0027/v3/test_api\u0027, json\u003dbody,"},{"line_number":450,"context_line":"                          headers\u003d{\u0027X-Auth-Token\u0027: token})"},{"line_number":451,"context_line":"            self.assertEqual(body, resp.json[\u0027post_body\u0027])"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"    def test_mapped_resource_routes(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_1c286731","line":450,"range":{"start_line":450,"start_character":26,"end_line":450,"end_character":57},"in_reply_to":"5f7c97a3_cd36bfe9","updated":"2018-07-12 17:24:38.000000000","message":"Ah, copy/paste error. Thanks.","commit_id":"0b579900e0c1b844c7d35236342bf7922792bda2"},{"author":{"_account_id":16465,"name":"Kristi Nikolla","email":"knikolla@bu.edu","username":"knikolla"},"change_message_id":"15b6c1dde6d62bede5a6d54dcd2ec0dc373a1a4c","unresolved":false,"context_lines":[{"line_number":485,"context_line":"                          headers\u003d{\u0027X-Auth-Token\u0027: token})"},{"line_number":486,"context_line":"            self.assertEqual(body, resp.json[\u0027post_body\u0027])"},{"line_number":487,"context_line":"            # Works without token"},{"line_number":488,"context_line":"            resp \u003d c.post(\u0027/v3/test_api\u0027, json\u003dbody)"},{"line_number":489,"context_line":"            self.assertEqual(body, resp.json[\u0027post_body\u0027])"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"    def test_correct_json_home_document(self):"},{"line_number":492,"context_line":"        class MappedResource(flask_restful.Resource):"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_bc8373aa","line":489,"range":{"start_line":488,"start_character":12,"end_line":489,"end_character":58},"updated":"2018-07-12 17:49:48.000000000","message":"shouldn\u0027t this be in test_unenforced_api_decorator rather than here?","commit_id":"7e883d3ab0e9c904900ea3a9232ce4ddbfc0b4b0"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"fee7b46959b561799fc63bfdd426f52befe5c283","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            _TestResourceWithCollectionInfo._reset)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _get_token(self):"},{"line_number":150,"context_line":"        auth_json \u003d {"},{"line_number":151,"context_line":"            \u0027auth\u0027: {"},{"line_number":152,"context_line":"                \u0027identity\u0027: {"},{"line_number":153,"context_line":"                    \u0027methods\u0027: [\u0027password\u0027],"},{"line_number":154,"context_line":"                    \u0027password\u0027: {"},{"line_number":155,"context_line":"                        \u0027user\u0027: {"},{"line_number":156,"context_line":"                            \u0027name\u0027: self.user_req_admin[\u0027name\u0027],"},{"line_number":157,"context_line":"                            \u0027password\u0027: self.user_req_admin[\u0027password\u0027],"},{"line_number":158,"context_line":"                            \u0027domain\u0027: {"},{"line_number":159,"context_line":"                                \u0027id\u0027: self.user_req_admin[\u0027domain_id\u0027]"},{"line_number":160,"context_line":"                            }"},{"line_number":161,"context_line":"                        }"},{"line_number":162,"context_line":"                    }"},{"line_number":163,"context_line":"                },"},{"line_number":164,"context_line":"                \u0027scope\u0027: {"},{"line_number":165,"context_line":"                    \u0027project\u0027: {"},{"line_number":166,"context_line":"                        \u0027id\u0027: self.tenant_service[\u0027id\u0027]"},{"line_number":167,"context_line":"                    }"},{"line_number":168,"context_line":"                }"},{"line_number":169,"context_line":"            }"},{"line_number":170,"context_line":"        }"},{"line_number":171,"context_line":"        return self.test_client().post("},{"line_number":172,"context_line":"            \u0027/v3/auth/tokens\u0027,"},{"line_number":173,"context_line":"            json\u003dauth_json,"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_8db65025","line":170,"range":{"start_line":150,"start_character":0,"end_line":170,"end_character":9},"updated":"2018-07-16 07:40:52.000000000","message":"can be replaced by tests.common.auth.AuthTestMixin.build_authentication_request","commit_id":"16be22b428fd0c7c34dd48417878f7d37ad1e2ac"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"96b2447b454045bdfa198e9ffcb90f5ca33f259c","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            _TestResourceWithCollectionInfo._reset)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _get_token(self):"},{"line_number":150,"context_line":"        auth_json \u003d {"},{"line_number":151,"context_line":"            \u0027auth\u0027: {"},{"line_number":152,"context_line":"                \u0027identity\u0027: {"},{"line_number":153,"context_line":"                    \u0027methods\u0027: [\u0027password\u0027],"},{"line_number":154,"context_line":"                    \u0027password\u0027: {"},{"line_number":155,"context_line":"                        \u0027user\u0027: {"},{"line_number":156,"context_line":"                            \u0027name\u0027: self.user_req_admin[\u0027name\u0027],"},{"line_number":157,"context_line":"                            \u0027password\u0027: self.user_req_admin[\u0027password\u0027],"},{"line_number":158,"context_line":"                            \u0027domain\u0027: {"},{"line_number":159,"context_line":"                                \u0027id\u0027: self.user_req_admin[\u0027domain_id\u0027]"},{"line_number":160,"context_line":"                            }"},{"line_number":161,"context_line":"                        }"},{"line_number":162,"context_line":"                    }"},{"line_number":163,"context_line":"                },"},{"line_number":164,"context_line":"                \u0027scope\u0027: {"},{"line_number":165,"context_line":"                    \u0027project\u0027: {"},{"line_number":166,"context_line":"                        \u0027id\u0027: self.tenant_service[\u0027id\u0027]"},{"line_number":167,"context_line":"                    }"},{"line_number":168,"context_line":"                }"},{"line_number":169,"context_line":"            }"},{"line_number":170,"context_line":"        }"},{"line_number":171,"context_line":"        return self.test_client().post("},{"line_number":172,"context_line":"            \u0027/v3/auth/tokens\u0027,"},{"line_number":173,"context_line":"            json\u003dauth_json,"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_9e998f6c","line":170,"range":{"start_line":150,"start_character":0,"end_line":170,"end_character":9},"in_reply_to":"5f7c97a3_23306406","updated":"2018-07-16 16:27:26.000000000","message":"I think David Stanek pulled the common auth stuff into that place to be shared across unit tests and functional tests. It would be nice to have a single set of utilities for auth specific builder methods.","commit_id":"16be22b428fd0c7c34dd48417878f7d37ad1e2ac"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"209b0327c0ca2d18510a0acd4f2aa0623f240b50","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            _TestResourceWithCollectionInfo._reset)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _get_token(self):"},{"line_number":150,"context_line":"        auth_json \u003d {"},{"line_number":151,"context_line":"            \u0027auth\u0027: {"},{"line_number":152,"context_line":"                \u0027identity\u0027: {"},{"line_number":153,"context_line":"                    \u0027methods\u0027: [\u0027password\u0027],"},{"line_number":154,"context_line":"                    \u0027password\u0027: {"},{"line_number":155,"context_line":"                        \u0027user\u0027: {"},{"line_number":156,"context_line":"                            \u0027name\u0027: self.user_req_admin[\u0027name\u0027],"},{"line_number":157,"context_line":"                            \u0027password\u0027: self.user_req_admin[\u0027password\u0027],"},{"line_number":158,"context_line":"                            \u0027domain\u0027: {"},{"line_number":159,"context_line":"                                \u0027id\u0027: self.user_req_admin[\u0027domain_id\u0027]"},{"line_number":160,"context_line":"                            }"},{"line_number":161,"context_line":"                        }"},{"line_number":162,"context_line":"                    }"},{"line_number":163,"context_line":"                },"},{"line_number":164,"context_line":"                \u0027scope\u0027: {"},{"line_number":165,"context_line":"                    \u0027project\u0027: {"},{"line_number":166,"context_line":"                        \u0027id\u0027: self.tenant_service[\u0027id\u0027]"},{"line_number":167,"context_line":"                    }"},{"line_number":168,"context_line":"                }"},{"line_number":169,"context_line":"            }"},{"line_number":170,"context_line":"        }"},{"line_number":171,"context_line":"        return self.test_client().post("},{"line_number":172,"context_line":"            \u0027/v3/auth/tokens\u0027,"},{"line_number":173,"context_line":"            json\u003dauth_json,"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_23306406","line":170,"range":{"start_line":150,"start_character":0,"end_line":170,"end_character":9},"in_reply_to":"5f7c97a3_8db65025","updated":"2018-07-16 14:53:14.000000000","message":"Probably not, this will be rolled into an isolated flask-way of doing things as we break down the tests to be more flask friendly.","commit_id":"16be22b428fd0c7c34dd48417878f7d37ad1e2ac"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"6053f906190e12ff9305c4261b72de14f0555013","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            _TestResourceWithCollectionInfo._reset)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _get_token(self):"},{"line_number":150,"context_line":"        auth_json \u003d {"},{"line_number":151,"context_line":"            \u0027auth\u0027: {"},{"line_number":152,"context_line":"                \u0027identity\u0027: {"},{"line_number":153,"context_line":"                    \u0027methods\u0027: [\u0027password\u0027],"},{"line_number":154,"context_line":"                    \u0027password\u0027: {"},{"line_number":155,"context_line":"                        \u0027user\u0027: {"},{"line_number":156,"context_line":"                            \u0027name\u0027: self.user_req_admin[\u0027name\u0027],"},{"line_number":157,"context_line":"                            \u0027password\u0027: self.user_req_admin[\u0027password\u0027],"},{"line_number":158,"context_line":"                            \u0027domain\u0027: {"},{"line_number":159,"context_line":"                                \u0027id\u0027: self.user_req_admin[\u0027domain_id\u0027]"},{"line_number":160,"context_line":"                            }"},{"line_number":161,"context_line":"                        }"},{"line_number":162,"context_line":"                    }"},{"line_number":163,"context_line":"                },"},{"line_number":164,"context_line":"                \u0027scope\u0027: {"},{"line_number":165,"context_line":"                    \u0027project\u0027: {"},{"line_number":166,"context_line":"                        \u0027id\u0027: self.tenant_service[\u0027id\u0027]"},{"line_number":167,"context_line":"                    }"},{"line_number":168,"context_line":"                }"},{"line_number":169,"context_line":"            }"},{"line_number":170,"context_line":"        }"},{"line_number":171,"context_line":"        return self.test_client().post("},{"line_number":172,"context_line":"            \u0027/v3/auth/tokens\u0027,"},{"line_number":173,"context_line":"            json\u003dauth_json,"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_db12b461","line":170,"range":{"start_line":150,"start_character":0,"end_line":170,"end_character":9},"in_reply_to":"5f7c97a3_9e998f6c","updated":"2018-07-16 17:46:07.000000000","message":"That is fine, the idea here is I do not ever want to cross flask-specific testing with old-style testing. if this is rolled into something new that is common, it will be flask-specific to avoid any odd interactions. We want to be sure the old tests work exactly as they are, all flask-specific and refactored tests should not lean on the old-style restful bits.","commit_id":"16be22b428fd0c7c34dd48417878f7d37ad1e2ac"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"a5c7d4b60e5b09e42528dc6ae0719a52324a1b88","unresolved":false,"context_lines":[{"line_number":363,"context_line":"        token \u003d self._get_token()"},{"line_number":364,"context_line":"        with self.test_client() as c:"},{"line_number":365,"context_line":"            c.get(\u0027/v3/arguments\u0027, headers\u003d{\u0027X-Auth-Token\u0027: token})"},{"line_number":366,"context_line":"            self.assertTrue(getattr(flask.g, attr, False))"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    def test_after_request_functions(self):"},{"line_number":369,"context_line":"        # Test additional \"after\" request functions fire. In this case, we"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_acd8dc51","line":366,"range":{"start_line":366,"start_character":51,"end_line":366,"end_character":56},"updated":"2018-07-16 19:25:55.000000000","message":"nit: I don\u0027t think this is needed? We can remove this later though.","commit_id":"16be22b428fd0c7c34dd48417878f7d37ad1e2ac"}]}
