)]}'
{"keystone/assignment/backends/sql.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9a475844df569f1edbec1072949945e90890f622","unresolved":false,"context_lines":[{"line_number":289,"context_line":""},{"line_number":290,"context_line":"            return _project_ids_to_dicts(session, project_ids)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def list_domains_for_user(self, user_id, group_ids, hints):"},{"line_number":293,"context_line":"        with sql.transaction() as session:"},{"line_number":294,"context_line":"            query \u003d session.query(Domain)"},{"line_number":295,"context_line":"            query \u003d query.join(RoleAssignment,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_efd74f49","line":292,"updated":"2014-08-20 22:55:17.000000000","message":"this is for a user, and... groups?","commit_id":"eb25fc6424b7e5106352a286e3a49db44bc85428"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9a475844df569f1edbec1072949945e90890f622","unresolved":false,"context_lines":[{"line_number":303,"context_line":"            if group_ids:"},{"line_number":304,"context_line":"                filters.append(sqlalchemy.and_("},{"line_number":305,"context_line":"                    RoleAssignment.actor_id.in_(group_ids),"},{"line_number":306,"context_line":"                    RoleAssignment.type \u003d\u003d AssignmentType.GROUP_DOMAIN))"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"            if not filters:"},{"line_number":309,"context_line":"                return []"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_8f8edb77","line":306,"updated":"2014-08-20 22:55:17.000000000","message":"so the method signature indicates that both user_id and group_ids are expected, but if i provide both, this will apply conflicting clauses and never return anything","commit_id":"eb25fc6424b7e5106352a286e3a49db44bc85428"}],"keystone/assignment/core.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"841c9d311f470556f93b87c98c59d9cb3eaf70b0","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        \"\"\""},{"line_number":157,"context_line":"        def _get_group_project_roles(user_id, project_ref):"},{"line_number":158,"context_line":"            # TODO(morganfainberg): Implement a way to get only group_ids"},{"line_number":159,"context_line":"            # instead of the more expensive to_dict() call for each record."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"            group_ids \u003d self._get_group_ids_for_user_id(user_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_153239a7","line":158,"updated":"2014-08-19 01:21:15.000000000","message":"this comment should be moved up into _get_group_ids_for_user_id","commit_id":"eb67e8df12e145bbc545926986cf0a3c9cbb856b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"841c9d311f470556f93b87c98c59d9cb3eaf70b0","unresolved":false,"context_lines":[{"line_number":321,"context_line":"    def list_domains(self, hints\u003dNone):"},{"line_number":322,"context_line":"        return self.driver.list_domains(hints or driver_hints.Hints())"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    # TODO(henry-nash): We might want to consider list limiting this at some"},{"line_number":325,"context_line":"    # point in the future."},{"line_number":326,"context_line":"    def list_domains_for_user(self, user_id, hints\u003dNone):"},{"line_number":327,"context_line":"        # NOTE(henry-nash): In order to get a complete list of user projects,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_d517e1eb","line":324,"updated":"2014-08-19 01:21:15.000000000","message":"why is this TODO for henry and not jamie?","commit_id":"eb67e8df12e145bbc545926986cf0a3c9cbb856b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"841c9d311f470556f93b87c98c59d9cb3eaf70b0","unresolved":false,"context_lines":[{"line_number":324,"context_line":"    # TODO(henry-nash): We might want to consider list limiting this at some"},{"line_number":325,"context_line":"    # point in the future."},{"line_number":326,"context_line":"    def list_domains_for_user(self, user_id, hints\u003dNone):"},{"line_number":327,"context_line":"        # NOTE(henry-nash): In order to get a complete list of user projects,"},{"line_number":328,"context_line":"        # the driver will need to look at group assignments.  To avoid cross"},{"line_number":329,"context_line":"        # calling between the assignment and identity driver we get the group"},{"line_number":330,"context_line":"        # list here and pass it in. The rest of the detailed logic of listing"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_35de5540","line":327,"updated":"2014-08-19 01:21:15.000000000","message":"is this supposed to be user domains and not projects?","commit_id":"eb67e8df12e145bbc545926986cf0a3c9cbb856b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"841c9d311f470556f93b87c98c59d9cb3eaf70b0","unresolved":false,"context_lines":[{"line_number":904,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":905,"context_line":""},{"line_number":906,"context_line":"    @abc.abstractmethod"},{"line_number":907,"context_line":"    def list_domains_for_user(self, user_id, group_ids, hints):"},{"line_number":908,"context_line":"        \"\"\"List all domains associated with a given user."},{"line_number":909,"context_line":""},{"line_number":910,"context_line":"        :param user_id: the user in question"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_15a799be","line":907,"updated":"2014-08-19 01:21:15.000000000","message":"I don\u0027t see what the point of the hints argument here is since nothing uses it.","commit_id":"eb67e8df12e145bbc545926986cf0a3c9cbb856b"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9a475844df569f1edbec1072949945e90890f622","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        # optimization with the various backend technologies (SQL, LDAP etc.)."},{"line_number":295,"context_line":"        group_ids \u003d self._get_group_ids_for_user_id(user_id)"},{"line_number":296,"context_line":"        return self.driver.list_projects_for_user("},{"line_number":297,"context_line":"            user_id, group_ids, hints or driver_hints.Hints())"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    @cache.on_arguments(should_cache_fn\u003dSHOULD_CACHE,"},{"line_number":300,"context_line":"                        expiration_time\u003dEXPIRATION_TIME)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_0f59eb8d","line":297,"updated":"2014-08-20 22:55:17.000000000","message":"this is yucky precedent :(","commit_id":"eb25fc6424b7e5106352a286e3a49db44bc85428"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4f2979da9feff1ee20b75421e6fa655c258f23b8","unresolved":false,"context_lines":[{"line_number":320,"context_line":"    def list_domains(self, hints\u003dNone):"},{"line_number":321,"context_line":"        return self.driver.list_domains(hints or driver_hints.Hints())"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    # TODO(henry-nash): We might want to consider list limiting this at some"},{"line_number":324,"context_line":"    # point in the future."},{"line_number":325,"context_line":"    def list_domains_for_user(self, user_id, hints\u003dNone):"},{"line_number":326,"context_line":"        # NOTE(henry-nash): In order to get a complete list of user domains,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_5ee9d7e4","line":323,"updated":"2014-08-20 21:11:50.000000000","message":"why is this TODO for henry and not jamie?","commit_id":"eb25fc6424b7e5106352a286e3a49db44bc85428"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9a475844df569f1edbec1072949945e90890f622","unresolved":false,"context_lines":[{"line_number":320,"context_line":"    def list_domains(self, hints\u003dNone):"},{"line_number":321,"context_line":"        return self.driver.list_domains(hints or driver_hints.Hints())"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    # TODO(henry-nash): We might want to consider list limiting this at some"},{"line_number":324,"context_line":"    # point in the future."},{"line_number":325,"context_line":"    def list_domains_for_user(self, user_id, hints\u003dNone):"},{"line_number":326,"context_line":"        # NOTE(henry-nash): In order to get a complete list of user domains,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_2f5ce7ec","line":323,"in_reply_to":"1abeadc6_5ee9d7e4","updated":"2014-08-20 22:55:17.000000000","message":"henry wrote it, jamie just duplicated it","commit_id":"eb25fc6424b7e5106352a286e3a49db44bc85428"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9a475844df569f1edbec1072949945e90890f622","unresolved":false,"context_lines":[{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    # TODO(henry-nash): We might want to consider list limiting this at some"},{"line_number":324,"context_line":"    # point in the future."},{"line_number":325,"context_line":"    def list_domains_for_user(self, user_id, hints\u003dNone):"},{"line_number":326,"context_line":"        # NOTE(henry-nash): In order to get a complete list of user domains,"},{"line_number":327,"context_line":"        # the driver will need to look at group assignments.  To avoid cross"},{"line_number":328,"context_line":"        # calling between the assignment and identity driver we get the group"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_4fccc36a","line":325,"updated":"2014-08-20 22:55:17.000000000","message":"this method signature makes sense++","commit_id":"eb25fc6424b7e5106352a286e3a49db44bc85428"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4f2979da9feff1ee20b75421e6fa655c258f23b8","unresolved":false,"context_lines":[{"line_number":909,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":910,"context_line":""},{"line_number":911,"context_line":"    @abc.abstractmethod"},{"line_number":912,"context_line":"    def list_domains_for_user(self, user_id, group_ids, hints):"},{"line_number":913,"context_line":"        \"\"\"List all domains associated with a given user."},{"line_number":914,"context_line":""},{"line_number":915,"context_line":"        :param user_id: the user in question"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_1edcbf45","line":912,"updated":"2014-08-20 21:11:50.000000000","message":"I don\u0027t see what the point of the hints argument here is since nothing uses it.","commit_id":"eb25fc6424b7e5106352a286e3a49db44bc85428"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9a475844df569f1edbec1072949945e90890f622","unresolved":false,"context_lines":[{"line_number":909,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":910,"context_line":""},{"line_number":911,"context_line":"    @abc.abstractmethod"},{"line_number":912,"context_line":"    def list_domains_for_user(self, user_id, group_ids, hints):"},{"line_number":913,"context_line":"        \"\"\"List all domains associated with a given user."},{"line_number":914,"context_line":""},{"line_number":915,"context_line":"        :param user_id: the user in question"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_cf8a931a","line":912,"in_reply_to":"1abeadc6_1edcbf45","updated":"2014-08-20 22:55:17.000000000","message":"++ other assignment methods don\u0027t have hints either -- they\u0027re not really exposed to api query strings\n\ngroup_ids should be removed from this method in favor of using list_domains_for_groups below","commit_id":"eb25fc6424b7e5106352a286e3a49db44bc85428"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9a475844df569f1edbec1072949945e90890f622","unresolved":false,"context_lines":[{"line_number":925,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":926,"context_line":""},{"line_number":927,"context_line":"    @abc.abstractmethod"},{"line_number":928,"context_line":"    def list_domains_for_groups(self, group_ids):"},{"line_number":929,"context_line":"        \"\"\"List domains accessible to specified groups."},{"line_number":930,"context_line":""},{"line_number":931,"context_line":"        :param group_ids: List of group ids."}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_6f25ff07","line":928,"updated":"2014-08-20 22:55:17.000000000","message":"^^","commit_id":"eb25fc6424b7e5106352a286e3a49db44bc85428"}],"keystone/auth/controllers.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9a475844df569f1edbec1072949945e90890f622","unresolved":false,"context_lines":[{"line_number":593,"context_line":"            grp_refs \u003d self.assignment_api.list_domains_for_groups(group_ids)"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"        refs \u003d self._combine_lists_uniquely(user_refs, grp_refs)"},{"line_number":596,"context_line":"        return assignment_controllers.DomainV3.wrap_collection(context, refs)"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"    @controller.protected()"},{"line_number":599,"context_line":"    def get_auth_catalog(self, context):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_cf97f3ea","line":596,"updated":"2014-08-20 22:55:17.000000000","message":"same","commit_id":"eb25fc6424b7e5106352a286e3a49db44bc85428"}],"keystone/tests/test_backend_sql.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"841c9d311f470556f93b87c98c59d9cb3eaf70b0","unresolved":false,"context_lines":[{"line_number":322,"context_line":"        test_domain2 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":323,"context_line":"        self.assignment_api.create_domain(test_domain2[\u0027id\u0027], test_domain2)"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        user1 \u003d self.identity_api.create_user(user1)"},{"line_number":326,"context_line":"        user_domains \u003d self.assignment_api.list_domains_for_user(user1[\u0027id\u0027])"},{"line_number":327,"context_line":"        self.assertEqual(0, len(user_domains))"},{"line_number":328,"context_line":"        self.assignment_api.create_grant(user_id\u003duser1[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_15c239e9","line":325,"updated":"2014-08-19 01:21:15.000000000","message":"there\u0027s only 1 user so this should just be called user not user1.","commit_id":"eb67e8df12e145bbc545926986cf0a3c9cbb856b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"841c9d311f470556f93b87c98c59d9cb3eaf70b0","unresolved":false,"context_lines":[{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        user1 \u003d self.identity_api.create_user(user1)"},{"line_number":326,"context_line":"        user_domains \u003d self.assignment_api.list_domains_for_user(user1[\u0027id\u0027])"},{"line_number":327,"context_line":"        self.assertEqual(0, len(user_domains))"},{"line_number":328,"context_line":"        self.assignment_api.create_grant(user_id\u003duser1[\u0027id\u0027],"},{"line_number":329,"context_line":"                                         domain_id\u003dtest_domain1[\u0027id\u0027],"},{"line_number":330,"context_line":"                                         role_id\u003dself.role_member[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_d5f9a14e","line":327,"updated":"2014-08-19 01:21:15.000000000","message":"testtools provides a HasLength matcher that should provide a better message if this fails.","commit_id":"eb67e8df12e145bbc545926986cf0a3c9cbb856b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"841c9d311f470556f93b87c98c59d9cb3eaf70b0","unresolved":false,"context_lines":[{"line_number":332,"context_line":"                                         domain_id\u003dtest_domain2[\u0027id\u0027],"},{"line_number":333,"context_line":"                                         role_id\u003dself.role_member[\u0027id\u0027])"},{"line_number":334,"context_line":"        user_domains \u003d self.assignment_api.list_domains_for_user(user1[\u0027id\u0027])"},{"line_number":335,"context_line":"        self.assertEqual(2, len(user_domains))"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"    def test_list_domains_for_user_with_grants(self):"},{"line_number":338,"context_line":"        # Create two groups each with a role on a different domain, and"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_f595bde4","line":335,"updated":"2014-08-19 01:21:15.000000000","message":"testtools provides a HasLength matcher that should provide a better message if this fails.","commit_id":"eb67e8df12e145bbc545926986cf0a3c9cbb856b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"841c9d311f470556f93b87c98c59d9cb3eaf70b0","unresolved":false,"context_lines":[{"line_number":342,"context_line":"        self.assignment_api.create_domain(domain[\u0027id\u0027], domain)"},{"line_number":343,"context_line":"        user1 \u003d {\u0027name\u0027: uuid.uuid4().hex, \u0027password\u0027: uuid.uuid4().hex,"},{"line_number":344,"context_line":"                 \u0027domain_id\u0027: domain[\u0027id\u0027], \u0027enabled\u0027: True}"},{"line_number":345,"context_line":"        user1 \u003d self.identity_api.create_user(user1)"},{"line_number":346,"context_line":"        group1 \u003d {\u0027name\u0027: uuid.uuid4().hex, \u0027domain_id\u0027: domain[\u0027id\u0027]}"},{"line_number":347,"context_line":"        group1 \u003d self.identity_api.create_group(group1)"},{"line_number":348,"context_line":"        group2 \u003d {\u0027name\u0027: uuid.uuid4().hex, \u0027domain_id\u0027: domain[\u0027id\u0027]}"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_75b0cd8b","line":345,"updated":"2014-08-19 01:21:15.000000000","message":"there\u0027s only 1 user so this should just be called user not user1.","commit_id":"eb67e8df12e145bbc545926986cf0a3c9cbb856b"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9a475844df569f1edbec1072949945e90890f622","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        self.assignment_api.create_domain(test_domain2[\u0027id\u0027], test_domain2)"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        user \u003d self.identity_api.create_user(user)"},{"line_number":326,"context_line":"        user_domains \u003d self.assignment_api.list_domains_for_user(user[\u0027id\u0027])"},{"line_number":327,"context_line":"        self.assertEqual(0, len(user_domains))"},{"line_number":328,"context_line":"        self.assignment_api.create_grant(user_id\u003duser[\u0027id\u0027],"},{"line_number":329,"context_line":"                                         domain_id\u003dtest_domain1[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_8fab3b74","line":326,"updated":"2014-08-20 22:55:17.000000000","message":"i\u0027m super confused because this isn\u0027t the method signature that you implemented","commit_id":"eb25fc6424b7e5106352a286e3a49db44bc85428"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4f2979da9feff1ee20b75421e6fa655c258f23b8","unresolved":false,"context_lines":[{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        user \u003d self.identity_api.create_user(user)"},{"line_number":326,"context_line":"        user_domains \u003d self.assignment_api.list_domains_for_user(user[\u0027id\u0027])"},{"line_number":327,"context_line":"        self.assertEqual(0, len(user_domains))"},{"line_number":328,"context_line":"        self.assignment_api.create_grant(user_id\u003duser[\u0027id\u0027],"},{"line_number":329,"context_line":"                                         domain_id\u003dtest_domain1[\u0027id\u0027],"},{"line_number":330,"context_line":"                                         role_id\u003dself.role_member[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_beecabf4","line":327,"updated":"2014-08-20 21:11:50.000000000","message":"testtools provides a HasLength matcher that should provide a better message if this fails.","commit_id":"eb25fc6424b7e5106352a286e3a49db44bc85428"}],"keystone/tests/test_v3_federation.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"841c9d311f470556f93b87c98c59d9cb3eaf70b0","unresolved":false,"context_lines":[{"line_number":1040,"context_line":"                r \u003d self.get(url, token\u003dtoken)"},{"line_number":1041,"context_line":"                projects_resp \u003d r.result[\u0027projects\u0027]"},{"line_number":1042,"context_line":"                projects \u003d set(p[\u0027id\u0027] for p in projects_resp)"},{"line_number":1043,"context_line":"                self.assertEqual(projects, projects_ref)"},{"line_number":1044,"context_line":""},{"line_number":1045,"context_line":"    def test_list_domains(self):"},{"line_number":1046,"context_line":"        urls \u003d (\u0027/OS-FEDERATION/domains\u0027, \u0027/auth/domains\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_353c95e2","line":1043,"updated":"2014-08-19 01:21:15.000000000","message":"the error for this should include the url so that we know which one was the problem.","commit_id":"eb67e8df12e145bbc545926986cf0a3c9cbb856b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"841c9d311f470556f93b87c98c59d9cb3eaf70b0","unresolved":false,"context_lines":[{"line_number":1061,"context_line":"                r \u003d self.get(url, token\u003dtoken)"},{"line_number":1062,"context_line":"                domains_resp \u003d r.result[\u0027domains\u0027]"},{"line_number":1063,"context_line":"                domains \u003d set(p[\u0027id\u0027] for p in domains_resp)"},{"line_number":1064,"context_line":"                self.assertEqual(domains, domains_ref)"},{"line_number":1065,"context_line":""},{"line_number":1066,"context_line":"    def test_full_workflow(self):"},{"line_number":1067,"context_line":"        \"\"\"Test \u0027standard\u0027 workflow for granting access tokens."}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_55411159","line":1064,"updated":"2014-08-19 01:21:15.000000000","message":"the error for this should include the url so that we know which one was the problem.","commit_id":"eb67e8df12e145bbc545926986cf0a3c9cbb856b"}]}
