)]}'
{"keystone/catalog/controllers.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"02a290677c20fa700c4c5cd61aa09fe38bcc8ed8","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                self.catalog_api.get_region(endpoint[\u0027region\u0027])"},{"line_number":106,"context_line":"            except exception.RegionNotFound:"},{"line_number":107,"context_line":"                region \u003d dict(id\u003dendpoint[\u0027region\u0027])"},{"line_number":108,"context_line":"                self.catalog_api.create_region(region, context)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        legacy_endpoint_ref \u003d endpoint.copy()"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba7be1f8_71ad5131","line":108,"updated":"2015-02-22 02:24:44.000000000","message":"stylistically these should be named kwargs for \"context\"\n\ninitiator\u003dcontext - this can be done as a follow up patch. This applies to all new passing of context down...\n\nHowever, we worked hard to aoid passing the context down to the drivers in the past. Ideally we should extract what we need from the context at the controller level. Passing context down has other ramifications (such as, the driver could opt to modify the context).","commit_id":"0a8f03b3602ab14796e0da7d988b694d291c476a"}],"keystone/catalog/core.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"823d0757d3dc3622af107c7417e5e6839f7b18d2","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        # set it to an empty string."},{"line_number":111,"context_line":"        region_ref.setdefault(\u0027description\u0027, \u0027\u0027)"},{"line_number":112,"context_line":"        try:"},{"line_number":113,"context_line":"            ret \u003d self.driver.create_region(region_ref)"},{"line_number":114,"context_line":"        except exception.NotFound:"},{"line_number":115,"context_line":"            parent_region_id \u003d region_ref.get(\u0027parent_region_id\u0027)"},{"line_number":116,"context_line":"            raise exception.RegionNotFound(region_id\u003dparent_region_id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_57f16869","line":113,"updated":"2015-02-26 15:04:45.000000000","message":"Should this be set to \u0027ref\u0027 to be consistent with the rest?","commit_id":"f8d12d4e3daedeeafbdecf14a272d0629fc19497"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"823d0757d3dc3622af107c7417e5e6839f7b18d2","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def delete_region(self, region_id, initiator\u003dNone):"},{"line_number":136,"context_line":"        try:"},{"line_number":137,"context_line":"            ret \u003d self.driver.delete_region(region_id)"},{"line_number":138,"context_line":"            notifications.Audit.deleted(self._REGION, region_id, initiator)"},{"line_number":139,"context_line":"            self.get_region.invalidate(self, region_id)"},{"line_number":140,"context_line":"            return ret"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_17fb7047","line":137,"updated":"2015-02-26 15:04:45.000000000","message":"weird, this one is \u0027ret\u0027 too, \u0027ref\u0027 seems to make more sense though.","commit_id":"f8d12d4e3daedeeafbdecf14a272d0629fc19497"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"823d0757d3dc3622af107c7417e5e6839f7b18d2","unresolved":false,"context_lines":[{"line_number":168,"context_line":"    def delete_service(self, service_id, initiator\u003dNone):"},{"line_number":169,"context_line":"        try:"},{"line_number":170,"context_line":"            endpoints \u003d self.list_endpoints()"},{"line_number":171,"context_line":"            ret \u003d self.driver.delete_service(service_id)"},{"line_number":172,"context_line":"            notifications.Audit.deleted(self._SERVICE, service_id, initiator)"},{"line_number":173,"context_line":"            self.get_service.invalidate(self, service_id)"},{"line_number":174,"context_line":"            for endpoint in endpoints:"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_b7a1c447","line":171,"updated":"2015-02-26 15:04:45.000000000","message":"and here.","commit_id":"f8d12d4e3daedeeafbdecf14a272d0629fc19497"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"eb4147abbea27df66af815dffd3b515e168adb02","unresolved":false,"context_lines":[{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def update_endpoint(self, endpoint_id, endpoint_ref, initiator\u003dNone):"},{"line_number":199,"context_line":"        ref \u003d self.driver.update_endpoint(endpoint_id, endpoint_ref)"},{"line_number":200,"context_line":"        notifications.Audit.updated(self._ENDPOINT, endpoint_id, initiator)"},{"line_number":201,"context_line":"        self.get_endpoint.invalidate(self, endpoint_id)"},{"line_number":202,"context_line":"        return ref"},{"line_number":203,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_55d572b7","line":200,"updated":"2015-03-02 10:28:42.000000000","message":"wondering if it\u0027s okay here to emit notification right after the endpoint was updated but before calling get_endpoint.invalidate() which i assume might blow in some rare cases....","commit_id":"daf2d584437e75e0655f4eb9e05f76fbfc3ae4c7"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"468bba3e6e867db78428a99166cdd54ad55d9804","unresolved":false,"context_lines":[{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def update_endpoint(self, endpoint_id, endpoint_ref, initiator\u003dNone):"},{"line_number":199,"context_line":"        ref \u003d self.driver.update_endpoint(endpoint_id, endpoint_ref)"},{"line_number":200,"context_line":"        notifications.Audit.updated(self._ENDPOINT, endpoint_id, initiator)"},{"line_number":201,"context_line":"        self.get_endpoint.invalidate(self, endpoint_id)"},{"line_number":202,"context_line":"        return ref"},{"line_number":203,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_243fe4d7","line":200,"in_reply_to":"ba7be1f8_55d572b7","updated":"2015-03-02 15:34:13.000000000","message":"ok, looks like we should not depend on cache invalidation.","commit_id":"daf2d584437e75e0655f4eb9e05f76fbfc3ae4c7"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"eb4147abbea27df66af815dffd3b515e168adb02","unresolved":false,"context_lines":[{"line_number":204,"context_line":"    def delete_endpoint(self, endpoint_id, initiator\u003dNone):"},{"line_number":205,"context_line":"        try:"},{"line_number":206,"context_line":"            ret \u003d self.driver.delete_endpoint(endpoint_id)"},{"line_number":207,"context_line":"            notifications.Audit.deleted(self._ENDPOINT, endpoint_id, initiator)"},{"line_number":208,"context_line":"            self.get_endpoint.invalidate(self, endpoint_id)"},{"line_number":209,"context_line":"            return ret"},{"line_number":210,"context_line":"        except exception.NotFound:"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_75db56ed","line":207,"updated":"2015-03-02 10:28:42.000000000","message":"same here.","commit_id":"daf2d584437e75e0655f4eb9e05f76fbfc3ae4c7"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"468bba3e6e867db78428a99166cdd54ad55d9804","unresolved":false,"context_lines":[{"line_number":204,"context_line":"    def delete_endpoint(self, endpoint_id, initiator\u003dNone):"},{"line_number":205,"context_line":"        try:"},{"line_number":206,"context_line":"            ret \u003d self.driver.delete_endpoint(endpoint_id)"},{"line_number":207,"context_line":"            notifications.Audit.deleted(self._ENDPOINT, endpoint_id, initiator)"},{"line_number":208,"context_line":"            self.get_endpoint.invalidate(self, endpoint_id)"},{"line_number":209,"context_line":"            return ret"},{"line_number":210,"context_line":"        except exception.NotFound:"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_6420fcb0","line":207,"in_reply_to":"ba7be1f8_75db56ed","updated":"2015-03-02 15:34:13.000000000","message":"ok, looks like we should not depend on cache invalidation.","commit_id":"daf2d584437e75e0655f4eb9e05f76fbfc3ae4c7"}],"keystone/identity/core.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2cabe145a3f10944c7f3cd8ee41a263088340e64","unresolved":false,"context_lines":[{"line_number":756,"context_line":"        self.id_mapping_api.delete_id_mapping(group_id)"},{"line_number":757,"context_line":"        self.assignment_api.delete_group(group_id)"},{"line_number":758,"context_line":""},{"line_number":759,"context_line":"        notifications._ACTIONS.deleted(self._GROUP, group_id, initiator)"},{"line_number":760,"context_line":""},{"line_number":761,"context_line":"        for uid in user_ids:"},{"line_number":762,"context_line":"            self.emit_invalidate_user_token_persistence(uid)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba7be1f8_089e6e56","line":759,"updated":"2015-02-24 09:14:40.000000000","message":"typo here: notifications.Audit.deleted","commit_id":"7f0f49fff88480979febbdac23c5e49c2d7c6862"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"823d0757d3dc3622af107c7417e5e6839f7b18d2","unresolved":false,"context_lines":[{"line_number":596,"context_line":"        # that particular driver type."},{"line_number":597,"context_line":"        user[\u0027id\u0027] \u003d uuid.uuid4().hex"},{"line_number":598,"context_line":"        ref \u003d driver.create_user(user[\u0027id\u0027], user)"},{"line_number":599,"context_line":"        notifications.Audit.created(self._USER, user[\u0027id\u0027], initiator)"},{"line_number":600,"context_line":"        return self._set_domain_id_and_mapping("},{"line_number":601,"context_line":"            ref, domain_id, driver, mapping.EntityType.USER)"},{"line_number":602,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_1757f026","line":599,"updated":"2015-02-26 15:04:45.000000000","message":"same comment here","commit_id":"f8d12d4e3daedeeafbdecf14a272d0629fc19497"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"823d0757d3dc3622af107c7417e5e6839f7b18d2","unresolved":false,"context_lines":[{"line_number":689,"context_line":"        self.assignment_api.delete_user(user_id)"},{"line_number":690,"context_line":"        self.credential_api.delete_credentials_for_user(user_id)"},{"line_number":691,"context_line":"        self.id_mapping_api.delete_id_mapping(user_id)"},{"line_number":692,"context_line":"        notifications.Audit.deleted(self._USER, user_id, initiator)"},{"line_number":693,"context_line":""},{"line_number":694,"context_line":"    @domains_configured"},{"line_number":695,"context_line":"    @exception_translated(\u0027group\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_d760f802","line":692,"updated":"2015-02-26 15:04:45.000000000","message":"add a space above this line to be consistent","commit_id":"f8d12d4e3daedeeafbdecf14a272d0629fc19497"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"eb4147abbea27df66af815dffd3b515e168adb02","unresolved":false,"context_lines":[{"line_number":741,"context_line":"        group \u003d self._clear_domain_id_if_domain_unaware(driver, group)"},{"line_number":742,"context_line":"        ref \u003d driver.update_group(entity_id, group)"},{"line_number":743,"context_line":""},{"line_number":744,"context_line":"        notifications.Audit.updated(self._GROUP, group_id, initiator)"},{"line_number":745,"context_line":""},{"line_number":746,"context_line":"        return self._set_domain_id_and_mapping("},{"line_number":747,"context_line":"            ref, domain_id, driver, mapping.EntityType.GROUP)"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_60e1d6fd","line":744,"updated":"2015-03-02 10:28:42.000000000","message":"we good iting that group was updated and _set_domain_id_and_mapping may blow for instance by raising ValueError ? \nThis applies to all functions that emit notifications and are not the last operation in the function.","commit_id":"daf2d584437e75e0655f4eb9e05f76fbfc3ae4c7"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"502f688a55800ab451db97d8ca6a2713a427077c","unresolved":false,"context_lines":[{"line_number":741,"context_line":"        group \u003d self._clear_domain_id_if_domain_unaware(driver, group)"},{"line_number":742,"context_line":"        ref \u003d driver.update_group(entity_id, group)"},{"line_number":743,"context_line":""},{"line_number":744,"context_line":"        notifications.Audit.updated(self._GROUP, group_id, initiator)"},{"line_number":745,"context_line":""},{"line_number":746,"context_line":"        return self._set_domain_id_and_mapping("},{"line_number":747,"context_line":"            ref, domain_id, driver, mapping.EntityType.GROUP)"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_f901ea6a","line":744,"in_reply_to":"ba7be1f8_4835c6d9","updated":"2015-03-02 18:10:52.000000000","message":"ok, makes sense.","commit_id":"daf2d584437e75e0655f4eb9e05f76fbfc3ae4c7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"abea6ca0d00465a3ffee96728f8f1fd08b9fa484","unresolved":false,"context_lines":[{"line_number":741,"context_line":"        group \u003d self._clear_domain_id_if_domain_unaware(driver, group)"},{"line_number":742,"context_line":"        ref \u003d driver.update_group(entity_id, group)"},{"line_number":743,"context_line":""},{"line_number":744,"context_line":"        notifications.Audit.updated(self._GROUP, group_id, initiator)"},{"line_number":745,"context_line":""},{"line_number":746,"context_line":"        return self._set_domain_id_and_mapping("},{"line_number":747,"context_line":"            ref, domain_id, driver, mapping.EntityType.GROUP)"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_4835c6d9","line":744,"in_reply_to":"ba7be1f8_60e1d6fd","updated":"2015-03-02 17:16:53.000000000","message":"I think this is fine....we have definitely updated/created the group at this point.  If for some reason setting the domain_id/mapping blows up....it would get recreated next time anyone read this user/group","commit_id":"daf2d584437e75e0655f4eb9e05f76fbfc3ae4c7"}],"keystone/policy/core.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"217c305b9421e001960b8471b2ebe04851fb3ef1","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            raise exception.PolicyNotFound(policy_id\u003dpolicy_id)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        notifications.Audit.updated(self._POLICY, policy_id, initiator)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        return ref"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    @manager.response_truncated"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba7be1f8_6bab8b89","line":64,"updated":"2015-03-01 10:53:32.000000000","message":"(nit): not quite sure if the extra blank line is adding much here","commit_id":"65ef926018ee3f6d7bee1c455ffb83a762205a4c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"217c305b9421e001960b8471b2ebe04851fb3ef1","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            raise exception.PolicyNotFound(policy_id\u003dpolicy_id)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        notifications.Audit.deleted(self._POLICY, policy_id, initiator)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        return ret"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba7be1f8_8baeff96","line":81,"updated":"2015-03-01 10:53:32.000000000","message":"ditto","commit_id":"65ef926018ee3f6d7bee1c455ffb83a762205a4c"}],"keystone/resource/controllers.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"217c305b9421e001960b8471b2ebe04851fb3ef1","unresolved":false,"context_lines":[{"line_number":158,"context_line":"    def create_project(self, context, project):"},{"line_number":159,"context_line":"        ref \u003d self._assign_unique_id(self._normalize_dict(project))"},{"line_number":160,"context_line":"        ref \u003d self._normalize_domain_id(context, ref)"},{"line_number":161,"context_line":"        ref \u003d self.resource_api.create_project(ref[\u0027id\u0027], ref, context)"},{"line_number":162,"context_line":"        return ProjectV3.wrap_member(context, ref)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    @controller.filterprotected(\u0027domain_id\u0027, \u0027enabled\u0027, \u0027name\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba7be1f8_8b851f09","line":161,"updated":"2015-03-01 10:53:32.000000000","message":"did you mean to leave this is the full context?","commit_id":"65ef926018ee3f6d7bee1c455ffb83a762205a4c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"217c305b9421e001960b8471b2ebe04851fb3ef1","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        self._require_matching_id(project_id, project)"},{"line_number":225,"context_line":"        self._require_matching_domain_id("},{"line_number":226,"context_line":"            project_id, project, self.resource_api.get_project)"},{"line_number":227,"context_line":"        ref \u003d self.resource_api.update_project(project_id, project, context)"},{"line_number":228,"context_line":"        return ProjectV3.wrap_member(context, ref)"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    @controller.protected()"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba7be1f8_cb76373f","line":227,"updated":"2015-03-01 10:53:32.000000000","message":"did you mean to leave this is the full context?","commit_id":"65ef926018ee3f6d7bee1c455ffb83a762205a4c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"217c305b9421e001960b8471b2ebe04851fb3ef1","unresolved":false,"context_lines":[{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    @controller.protected()"},{"line_number":231,"context_line":"    def delete_project(self, context, project_id):"},{"line_number":232,"context_line":"        return self.resource_api.delete_project(project_id, context)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba7be1f8_eb75bb32","line":232,"updated":"2015-03-01 10:53:32.000000000","message":"did you mean to leave this is the full context?","commit_id":"65ef926018ee3f6d7bee1c455ffb83a762205a4c"}]}
