)]}'
{"keystone/catalog/backends/sql.py":[{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"d016826e5ac8a5871bba8da7f8d5109af4cbe61a","unresolved":false,"context_lines":[{"line_number":721,"context_line":"    endpoint_id \u003d sql.Column(sql.String(64),"},{"line_number":722,"context_line":"                             primary_key\u003dTrue,"},{"line_number":723,"context_line":"                             nullable\u003dFalse)"},{"line_number":724,"context_line":""},{"line_number":725,"context_line":"    project_id \u003d sql.Column(sql.String(64),"},{"line_number":726,"context_line":"                            primary_key\u003dTrue,"},{"line_number":727,"context_line":"                            nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":15,"id":"dae33548_7c7dbd1b","line":724,"updated":"2016-02-16 02:54:37.000000000","message":"pls revert this change.","commit_id":"4e6367c24629f04b2c1d0f44d02f4e64b6e1b3e2"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"d016826e5ac8a5871bba8da7f8d5109af4cbe61a","unresolved":false,"context_lines":[{"line_number":769,"context_line":""},{"line_number":770,"context_line":""},{"line_number":771,"context_line":"class ServiceProvidersGroup(sql.ModelBase, sql.ModelDictMixin):"},{"line_number":772,"context_line":"    \"\"\"Service providers group  table.\"\"\""},{"line_number":773,"context_line":""},{"line_number":774,"context_line":"    __tablename__ \u003d \u0027service_providers_group\u0027"},{"line_number":775,"context_line":"    attributes \u003d [\u0027id\u0027, \u0027name\u0027, \u0027description\u0027]"}],"source_content_type":"text/x-python","patch_set":15,"id":"dae33548_fc126db3","line":772,"range":{"start_line":772,"start_character":30,"end_line":772,"end_character":32},"updated":"2016-02-16 02:54:37.000000000","message":"double space here.","commit_id":"4e6367c24629f04b2c1d0f44d02f4e64b6e1b3e2"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"d016826e5ac8a5871bba8da7f8d5109af4cbe61a","unresolved":false,"context_lines":[{"line_number":771,"context_line":"class ServiceProvidersGroup(sql.ModelBase, sql.ModelDictMixin):"},{"line_number":772,"context_line":"    \"\"\"Service providers group  table.\"\"\""},{"line_number":773,"context_line":""},{"line_number":774,"context_line":"    __tablename__ \u003d \u0027service_providers_group\u0027"},{"line_number":775,"context_line":"    attributes \u003d [\u0027id\u0027, \u0027name\u0027, \u0027description\u0027]"},{"line_number":776,"context_line":""},{"line_number":777,"context_line":"    id \u003d sql.Column(sql.String(64), primary_key\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":15,"id":"dae33548_3f6fa7c6","line":774,"range":{"start_line":774,"start_character":21,"end_line":774,"end_character":44},"updated":"2016-02-16 02:54:37.000000000","message":"I am lost here, what\u0027s this table could be used for?","commit_id":"4e6367c24629f04b2c1d0f44d02f4e64b6e1b3e2"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"d016826e5ac8a5871bba8da7f8d5109af4cbe61a","unresolved":false,"context_lines":[{"line_number":780,"context_line":""},{"line_number":781,"context_line":""},{"line_number":782,"context_line":"class ServiceProvidersGroupMembership(sql.ModelBase, sql.ModelDictMixin):"},{"line_number":783,"context_line":"    __tablename__ \u003d \u0027service_providers_group_members\u0027"},{"line_number":784,"context_line":"    attributes \u003d [\u0027service_providers_group_id\u0027, \u0027service_provider_id\u0027]"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"    service_providers_group_id \u003d sql.Column("}],"source_content_type":"text/x-python","patch_set":15,"id":"dae33548_9c736115","line":783,"updated":"2016-02-16 02:54:37.000000000","message":"add docstring for this class to consistent with others.","commit_id":"4e6367c24629f04b2c1d0f44d02f4e64b6e1b3e2"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"d016826e5ac8a5871bba8da7f8d5109af4cbe61a","unresolved":false,"context_lines":[{"line_number":781,"context_line":""},{"line_number":782,"context_line":"class ServiceProvidersGroupMembership(sql.ModelBase, sql.ModelDictMixin):"},{"line_number":783,"context_line":"    __tablename__ \u003d \u0027service_providers_group_members\u0027"},{"line_number":784,"context_line":"    attributes \u003d [\u0027service_providers_group_id\u0027, \u0027service_provider_id\u0027]"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"    service_providers_group_id \u003d sql.Column("},{"line_number":787,"context_line":"        sql.String(64), sql.ForeignKey(\u0027service_providers_group.id\u0027),"}],"source_content_type":"text/x-python","patch_set":15,"id":"dae33548_7f692fbe","line":784,"range":{"start_line":784,"start_character":49,"end_line":784,"end_character":68},"updated":"2016-02-16 02:54:37.000000000","message":"shouldn\u0027t this \"project id\"?","commit_id":"4e6367c24629f04b2c1d0f44d02f4e64b6e1b3e2"}],"keystone/catalog/controllers.py":[{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"b0247efd64f1e179083bd2c2a55937bdd59bdc39","unresolved":false,"context_lines":[{"line_number":687,"context_line":"@dependency.requires(\u0027catalog_api\u0027, \u0027federation_api\u0027, \u0027resource_api\u0027)"},{"line_number":688,"context_line":"class ServiceProvidersGroup(controller.V3Controller):"},{"line_number":689,"context_line":""},{"line_number":690,"context_line":"    @controller.protected()"},{"line_number":691,"context_line":"    def create_service_providers_group(self):"},{"line_number":692,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_6019f987","line":692,"range":{"start_line":690,"start_character":4,"end_line":692,"end_character":12},"updated":"2016-01-29 09:33:49.000000000","message":"still WIP?","commit_id":"18ec0f99257ee4d11c9936a66f09d31d235d051a"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"d016826e5ac8a5871bba8da7f8d5109af4cbe61a","unresolved":false,"context_lines":[{"line_number":684,"context_line":"            context, projects)"},{"line_number":685,"context_line":""},{"line_number":686,"context_line":""},{"line_number":687,"context_line":"@dependency.requires(\u0027catalog_api\u0027, \u0027federation_api\u0027, \u0027resource_api\u0027)"},{"line_number":688,"context_line":"class ServiceProvidersGroup(controller.V3Controller):"},{"line_number":689,"context_line":""},{"line_number":690,"context_line":"    member_name \u003d \"service_providers_group\""}],"source_content_type":"text/x-python","patch_set":15,"id":"dae33548_9f8cf380","line":687,"range":{"start_line":687,"start_character":36,"end_line":687,"end_character":68},"updated":"2016-02-16 02:54:37.000000000","message":"remove these dependencies, they are not used anywhere.","commit_id":"4e6367c24629f04b2c1d0f44d02f4e64b6e1b3e2"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"d016826e5ac8a5871bba8da7f8d5109af4cbe61a","unresolved":false,"context_lines":[{"line_number":691,"context_line":"    collection_name \u003d \"service_providers_groups\""},{"line_number":692,"context_line":""},{"line_number":693,"context_line":"    @controller.protected()"},{"line_number":694,"context_line":"    def create_service_providers_group(self, context, service_providers_group):"},{"line_number":695,"context_line":"        \"\"\"Creates an Service Providers Group.\"\"\""},{"line_number":696,"context_line":"        ref \u003d self._assign_unique_id(self._normalize_dict("},{"line_number":697,"context_line":"            service_providers_group))"}],"source_content_type":"text/x-python","patch_set":15,"id":"dae33548_ff37ffad","line":694,"range":{"start_line":694,"start_character":4,"end_line":694,"end_character":79},"updated":"2016-02-16 02:54:37.000000000","message":"we can define json schema for create/update API, this could be done in another review.","commit_id":"4e6367c24629f04b2c1d0f44d02f4e64b6e1b3e2"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"d016826e5ac8a5871bba8da7f8d5109af4cbe61a","unresolved":false,"context_lines":[{"line_number":696,"context_line":"        ref \u003d self._assign_unique_id(self._normalize_dict("},{"line_number":697,"context_line":"            service_providers_group))"},{"line_number":698,"context_line":"        ref \u003d self.catalog_api.create_service_providers_group(ref[\u0027id\u0027], ref)"},{"line_number":699,"context_line":"        return ServiceProvidersGroup.wrap_member("},{"line_number":700,"context_line":"            context, ref)"},{"line_number":701,"context_line":""},{"line_number":702,"context_line":"    @controller.protected()"},{"line_number":703,"context_line":"    def get_service_providers_group(self, context, service_providers_group_id):"}],"source_content_type":"text/x-python","patch_set":15,"id":"dae33548_7fde4f6e","line":700,"range":{"start_line":699,"start_character":8,"end_line":700,"end_character":25},"updated":"2016-02-16 02:54:37.000000000","message":"wrap these code in one line.","commit_id":"4e6367c24629f04b2c1d0f44d02f4e64b6e1b3e2"}],"keystone/catalog/core.py":[{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"d016826e5ac8a5871bba8da7f8d5109af4cbe61a","unresolved":false,"context_lines":[{"line_number":1041,"context_line":"        :returns: list of projects associated with a service provider"},{"line_number":1042,"context_line":""},{"line_number":1043,"context_line":"        \"\"\""},{"line_number":1044,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":1045,"context_line":""},{"line_number":1046,"context_line":""},{"line_number":1047,"context_line":"class V9CatalogWrapperForV8Driver(CatalogDriverV9):"}],"source_content_type":"text/x-python","patch_set":15,"id":"dae33548_5fe38b05","line":1044,"updated":"2016-02-16 02:54:37.000000000","message":"and abstract methods:\n\n    def update_service_providers_group(...)\n    def delete_service_providers_group(...)\n    def create_service_providers_group(...)\n    def get... \n\nhere.","commit_id":"4e6367c24629f04b2c1d0f44d02f4e64b6e1b3e2"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"d016826e5ac8a5871bba8da7f8d5109af4cbe61a","unresolved":false,"context_lines":[{"line_number":1223,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":1224,"context_line":""},{"line_number":1225,"context_line":"    def get_service_providers_group(self, context, service_providers_group_id):"},{"line_number":1226,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":1227,"context_line":""},{"line_number":1228,"context_line":"Driver \u003d manager.create_legacy_driver(CatalogDriverV8)"}],"source_content_type":"text/x-python","patch_set":15,"id":"dae33548_9fffd3a9","line":1226,"updated":"2016-02-16 02:54:37.000000000","message":"miss:\n    def update_service_providers_group(...)\n\nand\n    def delete_service_providers_group(...)","commit_id":"4e6367c24629f04b2c1d0f44d02f4e64b6e1b3e2"}],"keystone/catalog/routers.py":[{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"d016826e5ac8a5871bba8da7f8d5109af4cbe61a","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        PATCH /OS-EP-FILTER/service_providers_groups/"},{"line_number":84,"context_line":"            {service_providers_group_id}"},{"line_number":85,"context_line":"        DELETE /OS-EP-FILTER/service_providers_groups/"},{"line_number":86,"context_line":"            service_providers_group_id}"},{"line_number":87,"context_line":"        GET /OS-EP-FILTER/service_providers_groups"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"dae33548_3f84c7d2","line":86,"range":{"start_line":86,"start_character":12,"end_line":86,"end_character":39},"updated":"2016-02-16 02:54:37.000000000","message":"miss \u0027{\u0027,\n\nchange this to \u0027{service_providers_group_id}\u0027","commit_id":"4e6367c24629f04b2c1d0f44d02f4e64b6e1b3e2"}],"keystone/common/sql/migrate_repo/versions/090_add_service_providers_groups.py":[{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"d016826e5ac8a5871bba8da7f8d5109af4cbe61a","unresolved":false,"context_lines":[{"line_number":19,"context_line":"    meta \u003d sql.MetaData()"},{"line_number":20,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":21,"context_line":"    # NOTE(marek-denis): Load \u0027service_provider\u0027 table as it\u0027s later required"},{"line_number":22,"context_line":"    # for adding ForeignKey in the service_providers_group_id table"},{"line_number":23,"context_line":"    sql.Table(\u0027service_provider\u0027, meta, autoload\u003dTrue)"},{"line_number":24,"context_line":"    service_providers_group_table \u003d sql.Table("},{"line_number":25,"context_line":"        \u0027service_providers_group\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"dae33548_1f5e2376","line":22,"range":{"start_line":22,"start_character":35,"end_line":22,"end_character":67},"updated":"2016-02-16 02:54:37.000000000","message":"*service_providers_group_members* table","commit_id":"4e6367c24629f04b2c1d0f44d02f4e64b6e1b3e2"}],"keystone/tests/unit/test_versions.py":[{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"79a1d491e1e35d831c0fdb85be5e2fd7562e7cf8","unresolved":false,"context_lines":[{"line_number":152,"context_line":""},{"line_number":153,"context_line":"SP_GROUP_ID_PARAMETER_RELATION \u003d ("},{"line_number":154,"context_line":"    json_home.build_v3_extension_parameter_relation("},{"line_number":155,"context_line":"        \u0027OS-EP-FILTER\u0027, \u00271.0\u0027, \u0027service_providers_group\u0027))"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"CONSUMER_ID_PARAMETER_RELATION \u003d ("},{"line_number":158,"context_line":"    json_home.build_v3_extension_parameter_relation("}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_ecdd1643","line":155,"range":{"start_line":155,"start_character":31,"end_line":155,"end_character":56},"updated":"2016-02-04 05:52:44.000000000","message":"this should be \u0027service_providers_group_id\u0027","commit_id":"fa64161aed6898a5e14326546bfe0721ad315c54"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"79a1d491e1e35d831c0fdb85be5e2fd7562e7cf8","unresolved":false,"context_lines":[{"line_number":532,"context_line":""},{"line_number":533,"context_line":"    _build_ep_filter_rel(resource_name\u003d\u0027service_providers_groups\u0027):"},{"line_number":534,"context_line":"    {"},{"line_number":535,"context_line":"        \u0027href-template\u0027: \u0027/OS-EP-FILTER/service_providers_group\u0027,"},{"line_number":536,"context_line":"        \u0027href-vars\u0027: {"},{"line_number":537,"context_line":"            \u0027service_providers_group_id\u0027: SP_GROUP_ID_PARAMETER_RELATION"},{"line_number":538,"context_line":"        },"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_4799aa1e","line":535,"range":{"start_line":535,"start_character":58,"end_line":535,"end_character":63},"updated":"2016-02-04 05:52:44.000000000","message":"this is `groups` instead of `group`, and should use \u0027href\u0027 instead.","commit_id":"fa64161aed6898a5e14326546bfe0721ad315c54"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"79a1d491e1e35d831c0fdb85be5e2fd7562e7cf8","unresolved":false,"context_lines":[{"line_number":534,"context_line":"    {"},{"line_number":535,"context_line":"        \u0027href-template\u0027: \u0027/OS-EP-FILTER/service_providers_group\u0027,"},{"line_number":536,"context_line":"        \u0027href-vars\u0027: {"},{"line_number":537,"context_line":"            \u0027service_providers_group_id\u0027: SP_GROUP_ID_PARAMETER_RELATION"},{"line_number":538,"context_line":"        },"},{"line_number":539,"context_line":"        \u0027hints\u0027: {\u0027status\u0027: \u0027experimental\u0027}},"},{"line_number":540,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_c7911a54","line":537,"range":{"start_line":537,"start_character":12,"end_line":537,"end_character":72},"updated":"2016-02-04 05:52:44.000000000","message":"this doesn\u0027t needed here, since there is nothing to replace in the template.","commit_id":"fa64161aed6898a5e14326546bfe0721ad315c54"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"79a1d491e1e35d831c0fdb85be5e2fd7562e7cf8","unresolved":false,"context_lines":[{"line_number":530,"context_line":""},{"line_number":531,"context_line":"    # Service providers group"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"    _build_ep_filter_rel(resource_name\u003d\u0027service_providers_groups\u0027):"},{"line_number":534,"context_line":"    {"},{"line_number":535,"context_line":"        \u0027href-template\u0027: \u0027/OS-EP-FILTER/service_providers_group\u0027,"},{"line_number":536,"context_line":"        \u0027href-vars\u0027: {"},{"line_number":537,"context_line":"            \u0027service_providers_group_id\u0027: SP_GROUP_ID_PARAMETER_RELATION"},{"line_number":538,"context_line":"        },"},{"line_number":539,"context_line":"        \u0027hints\u0027: {\u0027status\u0027: \u0027experimental\u0027}},"},{"line_number":540,"context_line":""},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    _build_ep_filter_rel("}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_87724248","line":539,"range":{"start_line":533,"start_character":3,"end_line":539,"end_character":45},"updated":"2016-02-04 05:52:44.000000000","message":"need to define another resource relation for `list_service_providers_groups` separately.","commit_id":"fa64161aed6898a5e14326546bfe0721ad315c54"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"79a1d491e1e35d831c0fdb85be5e2fd7562e7cf8","unresolved":false,"context_lines":[{"line_number":538,"context_line":"        },"},{"line_number":539,"context_line":"        \u0027hints\u0027: {\u0027status\u0027: \u0027experimental\u0027}},"},{"line_number":540,"context_line":""},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    _build_ep_filter_rel("},{"line_number":543,"context_line":"        resource_name\u003d\u0027projects_associated_with_endpoint_group\u0027):"},{"line_number":544,"context_line":"    {"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_cc0ffa2c","line":541,"updated":"2016-02-04 05:52:44.000000000","message":"needn\u0027t the extra whitespace here.","commit_id":"fa64161aed6898a5e14326546bfe0721ad315c54"}]}
