)]}'
{"karbor/services/protection/bank_plugins/database_bank_plugin/plugin.py":[{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"c5f1ec83ae85ba0d998a239969ed049fea9a6741","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            config, _BACKEND_MAPPING)"},{"line_number":62,"context_line":"        self.dispose_engine(self.db_wrapper_api, config)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def get_backend(self, config):"},{"line_number":65,"context_line":"        global _IMPL"},{"line_number":66,"context_line":"        if _IMPL is None:"},{"line_number":67,"context_line":"            with _LOCK:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_feee3c20","line":64,"range":{"start_line":64,"start_character":8,"end_line":64,"end_character":19},"updated":"2017-03-23 07:19:30.000000000","message":"I guess it is the internal function, so \u0027_get_backend\u0027 is a more appropriate name.","commit_id":"c8fb2b88088414bb5b9da7823443356ab1d56b43"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"b8052c84044a44cc25fe2a2aa3b6581e9154cce2","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            config, _BACKEND_MAPPING)"},{"line_number":62,"context_line":"        self.dispose_engine(self.db_wrapper_api, config)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def get_backend(self, config):"},{"line_number":65,"context_line":"        global _IMPL"},{"line_number":66,"context_line":"        if _IMPL is None:"},{"line_number":67,"context_line":"            with _LOCK:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_49d46748","line":64,"range":{"start_line":64,"start_character":8,"end_line":64,"end_character":19},"in_reply_to":"1a1ced50_feee3c20","updated":"2017-03-28 07:22:46.000000000","message":"Done","commit_id":"c8fb2b88088414bb5b9da7823443356ab1d56b43"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"c5f1ec83ae85ba0d998a239969ed049fea9a6741","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                        config.database.backend).driver"},{"line_number":72,"context_line":"        return _IMPL"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def bank_db_init(self, config, version\u003dNone, init_version\u003dINIT_VERSION,"},{"line_number":75,"context_line":"                     engine\u003dNone):"},{"line_number":76,"context_line":"        \"\"\"Init the database to `version` or the most recent version.\"\"\""},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_1ef23806","line":74,"range":{"start_line":74,"start_character":8,"end_line":74,"end_character":20},"updated":"2017-03-23 07:19:30.000000000","message":"ditto","commit_id":"c8fb2b88088414bb5b9da7823443356ab1d56b43"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"b8052c84044a44cc25fe2a2aa3b6581e9154cce2","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                        config.database.backend).driver"},{"line_number":72,"context_line":"        return _IMPL"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def bank_db_init(self, config, version\u003dNone, init_version\u003dINIT_VERSION,"},{"line_number":75,"context_line":"                     engine\u003dNone):"},{"line_number":76,"context_line":"        \"\"\"Init the database to `version` or the most recent version.\"\"\""},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_89526fdd","line":74,"range":{"start_line":74,"start_character":8,"end_line":74,"end_character":20},"in_reply_to":"1a1ced50_1ef23806","updated":"2017-03-28 07:22:46.000000000","message":"This method may be called by other module when we want to introduce a manage cmd about bank db init.","commit_id":"c8fb2b88088414bb5b9da7823443356ab1d56b43"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"c5f1ec83ae85ba0d998a239969ed049fea9a6741","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            engine\u003dengine, abs_path\u003dMIGRATE_REPO_PATH,"},{"line_number":82,"context_line":"            version\u003dversion, init_version\u003dinit_version)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def dispose_engine(self, db_wrapper_api, config):"},{"line_number":85,"context_line":"        \"\"\"Force the engine to establish new connections.\"\"\""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        if \u0027sqlite\u0027 not in db_wrapper_api.get_engine(config).name:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_3ef534ec","line":84,"range":{"start_line":84,"start_character":8,"end_line":84,"end_character":22},"updated":"2017-03-23 07:19:30.000000000","message":"ditto","commit_id":"c8fb2b88088414bb5b9da7823443356ab1d56b43"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"b8052c84044a44cc25fe2a2aa3b6581e9154cce2","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            engine\u003dengine, abs_path\u003dMIGRATE_REPO_PATH,"},{"line_number":82,"context_line":"            version\u003dversion, init_version\u003dinit_version)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def dispose_engine(self, db_wrapper_api, config):"},{"line_number":85,"context_line":"        \"\"\"Force the engine to establish new connections.\"\"\""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        if \u0027sqlite\u0027 not in db_wrapper_api.get_engine(config).name:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_694f2b34","line":84,"range":{"start_line":84,"start_character":8,"end_line":84,"end_character":22},"in_reply_to":"1a1ced50_3ef534ec","updated":"2017-03-28 07:22:46.000000000","message":"Done","commit_id":"c8fb2b88088414bb5b9da7823443356ab1d56b43"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"2fbaf96ad7a93292590a858eb2f5b0351b9fece8","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def update_object(self, key, value):"},{"line_number":95,"context_line":"        LOG.debug(\"DatabaseBank: update_object. key: %s\", key)"},{"line_number":96,"context_line":"        fields \u003d key.split(\"/\")"},{"line_number":97,"context_line":"        fields_len \u003d len(fields)"},{"line_number":98,"context_line":"        section_name \u003d fields[1]"},{"line_number":99,"context_line":"        if section_name \u003d\u003d \"checkpoints\":"},{"line_number":100,"context_line":"            checkpoint_id \u003d fields[2]"},{"line_number":101,"context_line":"            if fields_len \u003d\u003d 4 and fields[3] \u003d\u003d \"index.json\":"},{"line_number":102,"context_line":"                # Create or update a checkpoint"},{"line_number":103,"context_line":"                if self.db_wrapper_api.checkpoint_get("},{"line_number":104,"context_line":"                        self._context, self._config, checkpoint_id):"},{"line_number":105,"context_line":"                    self.db_wrapper_api.checkpoint_update("},{"line_number":106,"context_line":"                        self._context, self._config, checkpoint_id, value)"},{"line_number":107,"context_line":"                else:"},{"line_number":108,"context_line":"                    self.db_wrapper_api.checkpoint_create("},{"line_number":109,"context_line":"                        self._context, self._config, value)"},{"line_number":110,"context_line":"            elif (fields_len \u003d\u003d 6 and fields[3] \u003d\u003d \"resource-data\" and"},{"line_number":111,"context_line":"                    fields[5] in [\"status\", \"metadata\"]):"},{"line_number":112,"context_line":"                #  Create or update a checkpoint_item"},{"line_number":113,"context_line":"                resource_id \u003d fields[4]"},{"line_number":114,"context_line":"                key_name \u003d fields[5]"},{"line_number":115,"context_line":"                checkpoint_item \u003d ("},{"line_number":116,"context_line":"                    self.db_wrapper_api.checkpoint_item_get_by_resource_id("},{"line_number":117,"context_line":"                        self._context, self._config, checkpoint_id,"},{"line_number":118,"context_line":"                        resource_id))"},{"line_number":119,"context_line":"                if checkpoint_item:"},{"line_number":120,"context_line":"                    if key_name \u003d\u003d \"status\":"},{"line_number":121,"context_line":"                        checkpoint_item[\"status\"] \u003d value"},{"line_number":122,"context_line":"                    elif key_name \u003d\u003d \"metadata\":"},{"line_number":123,"context_line":"                        if value and type(value) \u003d\u003d dict:"},{"line_number":124,"context_line":"                            value \u003d jsonutils.dumps(value)"},{"line_number":125,"context_line":"                        checkpoint_item[\"extra_info\"] \u003d value"},{"line_number":126,"context_line":"                    self.db_wrapper_api.checkpoint_item_update("},{"line_number":127,"context_line":"                        self._context, self._config,"},{"line_number":128,"context_line":"                        checkpoint_item[\"id\"], checkpoint_item)"},{"line_number":129,"context_line":"                    if key_name \u003d\u003d \"status\" and value \u003d\u003d \"deleted\":"},{"line_number":130,"context_line":"                        self.db_wrapper_api.checkpoint_item_delete("},{"line_number":131,"context_line":"                            self._context, self._config, checkpoint_item[\"id\"])"},{"line_number":132,"context_line":"                else:"},{"line_number":133,"context_line":"                    create_value \u003d dict()"},{"line_number":134,"context_line":"                    create_value[\"checkpoint_id\"] \u003d checkpoint_id"},{"line_number":135,"context_line":"                    create_value[\"resource_id\"] \u003d resource_id"},{"line_number":136,"context_line":"                    if key_name \u003d\u003d \"status\":"},{"line_number":137,"context_line":"                        create_value[\"status\"] \u003d value"},{"line_number":138,"context_line":"                    elif key_name \u003d\u003d \"metadata\":"},{"line_number":139,"context_line":"                        if value and type(value) \u003d\u003d dict:"},{"line_number":140,"context_line":"                            value \u003d jsonutils.dumps(value)"},{"line_number":141,"context_line":"                        create_value[\"extra_info\"] \u003d value"},{"line_number":142,"context_line":"                    self.db_wrapper_api.checkpoint_item_create("},{"line_number":143,"context_line":"                        self._context, self._config, create_value)"},{"line_number":144,"context_line":"            elif (fields_len \u003d\u003d 6 and fields[3] \u003d\u003d \"resource-data\" and"},{"line_number":145,"context_line":"                    fields[5].startswith(\"data_\")):"},{"line_number":146,"context_line":"                #  Create a checkpoint_item_data"},{"line_number":147,"context_line":"                resource_id \u003d fields[4]"},{"line_number":148,"context_line":"                checkpoint_item \u003d ("},{"line_number":149,"context_line":"                    self.db_wrapper_api.checkpoint_item_get_by_resource_id("},{"line_number":150,"context_line":"                        self._context, self._config, checkpoint_id,"},{"line_number":151,"context_line":"                        resource_id))"},{"line_number":152,"context_line":"                create_value \u003d dict()"},{"line_number":153,"context_line":"                create_value[\"checkpoint_item_id\"] \u003d checkpoint_item[\"id\"]"},{"line_number":154,"context_line":"                create_value[\"data_name\"] \u003d key"},{"line_number":155,"context_line":"                create_value[\"backup_data\"] \u003d value"},{"line_number":156,"context_line":"                self.db_wrapper_api.checkpoint_item_data_create("},{"line_number":157,"context_line":"                    self._context, self._config, create_value)"},{"line_number":158,"context_line":"            else:"},{"line_number":159,"context_line":"                LOG.warning(\u0027The key of the object can not be \u0027"},{"line_number":160,"context_line":"                            \u0027parsed. %s\u0027, key)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def delete_object(self, key):"},{"line_number":163,"context_line":"        LOG.debug(\"DatabaseBank: delete_object. key: %s\", key)"}],"source_content_type":"text/x-python","patch_set":17,"id":"df140735_df2281a4","line":160,"range":{"start_line":96,"start_character":0,"end_line":160,"end_character":46},"updated":"2017-06-01 12:08:12.000000000","message":"No.\nBank is an abstraction, and Checkpoints are built on that abstraction. Bank can not assume ANYTHING about the data being put inside. Consider it opaque.","commit_id":"7914177c9d4da44481e9f3e3f87e5906a69b1de2"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"46e9abd72963cb7b888be974c04d542dcd9a222e","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def update_object(self, key, value):"},{"line_number":95,"context_line":"        LOG.debug(\"DatabaseBank: update_object. key: %s\", key)"},{"line_number":96,"context_line":"        fields \u003d key.split(\"/\")"},{"line_number":97,"context_line":"        fields_len \u003d len(fields)"},{"line_number":98,"context_line":"        section_name \u003d fields[1]"},{"line_number":99,"context_line":"        if section_name \u003d\u003d \"checkpoints\":"},{"line_number":100,"context_line":"            checkpoint_id \u003d fields[2]"},{"line_number":101,"context_line":"            if fields_len \u003d\u003d 4 and fields[3] \u003d\u003d \"index.json\":"},{"line_number":102,"context_line":"                # Create or update a checkpoint"},{"line_number":103,"context_line":"                if self.db_wrapper_api.checkpoint_get("},{"line_number":104,"context_line":"                        self._context, self._config, checkpoint_id):"},{"line_number":105,"context_line":"                    self.db_wrapper_api.checkpoint_update("},{"line_number":106,"context_line":"                        self._context, self._config, checkpoint_id, value)"},{"line_number":107,"context_line":"                else:"},{"line_number":108,"context_line":"                    self.db_wrapper_api.checkpoint_create("},{"line_number":109,"context_line":"                        self._context, self._config, value)"},{"line_number":110,"context_line":"            elif (fields_len \u003d\u003d 6 and fields[3] \u003d\u003d \"resource-data\" and"},{"line_number":111,"context_line":"                    fields[5] in [\"status\", \"metadata\"]):"},{"line_number":112,"context_line":"                #  Create or update a checkpoint_item"},{"line_number":113,"context_line":"                resource_id \u003d fields[4]"},{"line_number":114,"context_line":"                key_name \u003d fields[5]"},{"line_number":115,"context_line":"                checkpoint_item \u003d ("},{"line_number":116,"context_line":"                    self.db_wrapper_api.checkpoint_item_get_by_resource_id("},{"line_number":117,"context_line":"                        self._context, self._config, checkpoint_id,"},{"line_number":118,"context_line":"                        resource_id))"},{"line_number":119,"context_line":"                if checkpoint_item:"},{"line_number":120,"context_line":"                    if key_name \u003d\u003d \"status\":"},{"line_number":121,"context_line":"                        checkpoint_item[\"status\"] \u003d value"},{"line_number":122,"context_line":"                    elif key_name \u003d\u003d \"metadata\":"},{"line_number":123,"context_line":"                        if value and type(value) \u003d\u003d dict:"},{"line_number":124,"context_line":"                            value \u003d jsonutils.dumps(value)"},{"line_number":125,"context_line":"                        checkpoint_item[\"extra_info\"] \u003d value"},{"line_number":126,"context_line":"                    self.db_wrapper_api.checkpoint_item_update("},{"line_number":127,"context_line":"                        self._context, self._config,"},{"line_number":128,"context_line":"                        checkpoint_item[\"id\"], checkpoint_item)"},{"line_number":129,"context_line":"                    if key_name \u003d\u003d \"status\" and value \u003d\u003d \"deleted\":"},{"line_number":130,"context_line":"                        self.db_wrapper_api.checkpoint_item_delete("},{"line_number":131,"context_line":"                            self._context, self._config, checkpoint_item[\"id\"])"},{"line_number":132,"context_line":"                else:"},{"line_number":133,"context_line":"                    create_value \u003d dict()"},{"line_number":134,"context_line":"                    create_value[\"checkpoint_id\"] \u003d checkpoint_id"},{"line_number":135,"context_line":"                    create_value[\"resource_id\"] \u003d resource_id"},{"line_number":136,"context_line":"                    if key_name \u003d\u003d \"status\":"},{"line_number":137,"context_line":"                        create_value[\"status\"] \u003d value"},{"line_number":138,"context_line":"                    elif key_name \u003d\u003d \"metadata\":"},{"line_number":139,"context_line":"                        if value and type(value) \u003d\u003d dict:"},{"line_number":140,"context_line":"                            value \u003d jsonutils.dumps(value)"},{"line_number":141,"context_line":"                        create_value[\"extra_info\"] \u003d value"},{"line_number":142,"context_line":"                    self.db_wrapper_api.checkpoint_item_create("},{"line_number":143,"context_line":"                        self._context, self._config, create_value)"},{"line_number":144,"context_line":"            elif (fields_len \u003d\u003d 6 and fields[3] \u003d\u003d \"resource-data\" and"},{"line_number":145,"context_line":"                    fields[5].startswith(\"data_\")):"},{"line_number":146,"context_line":"                #  Create a checkpoint_item_data"},{"line_number":147,"context_line":"                resource_id \u003d fields[4]"},{"line_number":148,"context_line":"                checkpoint_item \u003d ("},{"line_number":149,"context_line":"                    self.db_wrapper_api.checkpoint_item_get_by_resource_id("},{"line_number":150,"context_line":"                        self._context, self._config, checkpoint_id,"},{"line_number":151,"context_line":"                        resource_id))"},{"line_number":152,"context_line":"                create_value \u003d dict()"},{"line_number":153,"context_line":"                create_value[\"checkpoint_item_id\"] \u003d checkpoint_item[\"id\"]"},{"line_number":154,"context_line":"                create_value[\"data_name\"] \u003d key"},{"line_number":155,"context_line":"                create_value[\"backup_data\"] \u003d value"},{"line_number":156,"context_line":"                self.db_wrapper_api.checkpoint_item_data_create("},{"line_number":157,"context_line":"                    self._context, self._config, create_value)"},{"line_number":158,"context_line":"            else:"},{"line_number":159,"context_line":"                LOG.warning(\u0027The key of the object can not be \u0027"},{"line_number":160,"context_line":"                            \u0027parsed. %s\u0027, key)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def delete_object(self, key):"},{"line_number":163,"context_line":"        LOG.debug(\"DatabaseBank: delete_object. key: %s\", key)"}],"source_content_type":"text/x-python","patch_set":17,"id":"df140735_ba2b5b2e","line":160,"range":{"start_line":96,"start_character":0,"end_line":160,"end_character":46},"in_reply_to":"df140735_df2281a4","updated":"2017-06-01 12:47:53.000000000","message":"I have described the usecase and data module about database bank plugins in the spec. why introduce a database plugisn. The user don\u0027t want to swift bank, it too abstract for them. They just want to save the checkpoint metadata to exact relational database table. If database module is opaque. It mean that it is not what they want.","commit_id":"7914177c9d4da44481e9f3e3f87e5906a69b1de2"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"2fbaf96ad7a93292590a858eb2f5b0351b9fece8","unresolved":false,"context_lines":[{"line_number":160,"context_line":"                            \u0027parsed. %s\u0027, key)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def delete_object(self, key):"},{"line_number":163,"context_line":"        LOG.debug(\"DatabaseBank: delete_object. key: %s\", key)"},{"line_number":164,"context_line":"        fields \u003d key.split(\"/\")"},{"line_number":165,"context_line":"        fields_len \u003d len(fields)"},{"line_number":166,"context_line":"        section_name \u003d fields[1]"},{"line_number":167,"context_line":"        if section_name \u003d\u003d \"checkpoints\":"},{"line_number":168,"context_line":"            checkpoint_id \u003d fields[2]"},{"line_number":169,"context_line":"            if fields_len \u003d\u003d 4 and fields[3] \u003d\u003d \"index.json\":"},{"line_number":170,"context_line":"                # delete a checkpoint"},{"line_number":171,"context_line":"                self.db_wrapper_api.checkpoint_delete("},{"line_number":172,"context_line":"                    self._context, self._config, checkpoint_id)"},{"line_number":173,"context_line":"            elif (fields_len \u003d\u003d 6 and fields[3] \u003d\u003d \"resource-data\" and"},{"line_number":174,"context_line":"                    fields[5] in [\"status\", \"metadata\"]):"},{"line_number":175,"context_line":"                #  delete a checkpoint_item"},{"line_number":176,"context_line":"                resource_id \u003d fields[4]"},{"line_number":177,"context_line":"                key_name \u003d fields[5]"},{"line_number":178,"context_line":"                checkpoint_item \u003d ("},{"line_number":179,"context_line":"                    self.db_wrapper_api.checkpoint_item_get_by_resource_id("},{"line_number":180,"context_line":"                        self._context, self._config, checkpoint_id,"},{"line_number":181,"context_line":"                        resource_id))"},{"line_number":182,"context_line":"                if checkpoint_item:"},{"line_number":183,"context_line":"                    if key_name \u003d\u003d \"status\" or key_name \u003d\u003d \"metadata\":"},{"line_number":184,"context_line":"                        self.db_wrapper_api.checkpoint_item_delete("},{"line_number":185,"context_line":"                            self._context, self._config, checkpoint_item[\"id\"])"},{"line_number":186,"context_line":"            elif (fields_len \u003d\u003d 6 and fields[3] \u003d\u003d \"resource-data\" and"},{"line_number":187,"context_line":"                    fields[5].startswith(\"data_\")):"},{"line_number":188,"context_line":"                resource_id \u003d fields[4]"},{"line_number":189,"context_line":"                checkpoint_item \u003d ("},{"line_number":190,"context_line":"                    self.db_wrapper_api.checkpoint_item_get_by_resource_id("},{"line_number":191,"context_line":"                        self._context, self._config, checkpoint_id,"},{"line_number":192,"context_line":"                        resource_id))"},{"line_number":193,"context_line":"                checkpoint_item_data \u003d ("},{"line_number":194,"context_line":"                    self.db_wrapper_api.checkpoint_item_data_get_by_data_name("},{"line_number":195,"context_line":"                        self._context, self._config,"},{"line_number":196,"context_line":"                        checkpoint_item[\"id\"], key))"},{"line_number":197,"context_line":"                self.db_wrapper_api.checkpoint_item_data_delete("},{"line_number":198,"context_line":"                    self._context, self._config, checkpoint_item_data[\"id\"])"},{"line_number":199,"context_line":"            else:"},{"line_number":200,"context_line":"                LOG.warning(\u0027The key of the object can not be \u0027"},{"line_number":201,"context_line":"                            \u0027parsed. %s\u0027, key)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    def get_object(self, key):"},{"line_number":204,"context_line":"        LOG.debug(\"DatabaseBank: get_object. key: %s\", key)"}],"source_content_type":"text/x-python","patch_set":17,"id":"df140735_9f3c09c9","line":201,"range":{"start_line":163,"start_character":0,"end_line":201,"end_character":46},"updated":"2017-06-01 12:08:12.000000000","message":"ditto","commit_id":"7914177c9d4da44481e9f3e3f87e5906a69b1de2"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"2fbaf96ad7a93292590a858eb2f5b0351b9fece8","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        fields \u003d key.split(\"/\")"},{"line_number":206,"context_line":"        fields_len \u003d len(fields)"},{"line_number":207,"context_line":"        section_name \u003d fields[1]"},{"line_number":208,"context_line":"        if section_name \u003d\u003d \"checkpoints\":"},{"line_number":209,"context_line":"            checkpoint_id \u003d fields[2]"},{"line_number":210,"context_line":"            if fields_len \u003d\u003d 4 and fields[3] \u003d\u003d \"index.json\":"},{"line_number":211,"context_line":"                # get a checkpoint"},{"line_number":212,"context_line":"                checkpoint \u003d self.db_wrapper_api.checkpoint_get("},{"line_number":213,"context_line":"                    self._context, self._config, checkpoint_id)"},{"line_number":214,"context_line":"                if checkpoint:"},{"line_number":215,"context_line":"                    return checkpoint.to_dict()"},{"line_number":216,"context_line":"            elif (fields_len \u003d\u003d 6 and fields[3] \u003d\u003d \"resource-data\" and"},{"line_number":217,"context_line":"                    fields[5] in [\"status\", \"metadata\"]):"},{"line_number":218,"context_line":"                #  Create or update a checkpoint_item"},{"line_number":219,"context_line":"                resource_id \u003d fields[4]"},{"line_number":220,"context_line":"                key_name \u003d fields[5]"},{"line_number":221,"context_line":"                checkpoint_item \u003d ("},{"line_number":222,"context_line":"                    self.db_wrapper_api.checkpoint_item_get_by_resource_id("},{"line_number":223,"context_line":"                        self._context, self._config, checkpoint_id,"},{"line_number":224,"context_line":"                        resource_id))"},{"line_number":225,"context_line":"                if checkpoint_item:"},{"line_number":226,"context_line":"                    if key_name \u003d\u003d \"status\":"},{"line_number":227,"context_line":"                        return checkpoint_item[\"status\"]"},{"line_number":228,"context_line":"                    elif key_name \u003d\u003d \"metadata\":"},{"line_number":229,"context_line":"                        return jsonutils.loads(checkpoint_item[\"extra_info\"])"},{"line_number":230,"context_line":"            elif (fields_len \u003d\u003d 6 and fields[3] \u003d\u003d \"resource-data\" and"},{"line_number":231,"context_line":"                    fields[5].startswith(\"data_\")):"},{"line_number":232,"context_line":"                #  Get a checkpoint_item_data"},{"line_number":233,"context_line":"                resource_id \u003d fields[4]"},{"line_number":234,"context_line":"                checkpoint_item \u003d ("},{"line_number":235,"context_line":"                    self.db_wrapper_api.checkpoint_item_get_by_resource_id("},{"line_number":236,"context_line":"                        self._context, self._config, checkpoint_id,"},{"line_number":237,"context_line":"                        resource_id))"},{"line_number":238,"context_line":"                checkpoint_item_data \u003d ("},{"line_number":239,"context_line":"                    self.db_wrapper_api.checkpoint_item_data_get_by_data_name("},{"line_number":240,"context_line":"                        self._context, self._config,"},{"line_number":241,"context_line":"                        checkpoint_item[\"id\"], key))"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"                return checkpoint_item_data[\"backup_data\"]"},{"line_number":244,"context_line":"            else:"},{"line_number":245,"context_line":"                LOG.warning(\u0027The key of the object can not be \u0027"},{"line_number":246,"context_line":"                            \u0027parsed. %s\u0027, key)"},{"line_number":247,"context_line":"        return None"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def list_objects(self, prefix\u003dNone, limit\u003dNone, marker\u003dNone,"},{"line_number":250,"context_line":"                     sort_dir\u003dNone):"}],"source_content_type":"text/x-python","patch_set":17,"id":"df140735_7f37f5e4","line":247,"range":{"start_line":208,"start_character":0,"end_line":247,"end_character":19},"updated":"2017-06-01 12:08:12.000000000","message":"ditto","commit_id":"7914177c9d4da44481e9f3e3f87e5906a69b1de2"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"2fbaf96ad7a93292590a858eb2f5b0351b9fece8","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def list_objects(self, prefix\u003dNone, limit\u003dNone, marker\u003dNone,"},{"line_number":250,"context_line":"                     sort_dir\u003dNone):"},{"line_number":251,"context_line":"        LOG.debug(\"DatabaseBank: list_objects. key: %s\", prefix)"},{"line_number":252,"context_line":"        fields \u003d prefix.split(\"/\")"},{"line_number":253,"context_line":"        section_name \u003d fields[1]"},{"line_number":254,"context_line":"        if section_name \u003d\u003d \"indices\":"},{"line_number":255,"context_line":"            filter_key \u003d fields[2]"},{"line_number":256,"context_line":"            filter_value \u003d fields[3]"},{"line_number":257,"context_line":"            if filter_key \u003d\u003d \"by-provider\":"},{"line_number":258,"context_line":"                filters \u003d {"},{"line_number":259,"context_line":"                    \"provider_id\": filter_value"},{"line_number":260,"context_line":"                }"},{"line_number":261,"context_line":"                checkpoints \u003d self.db_wrapper_api.checkpoint_get_all("},{"line_number":262,"context_line":"                    self._context, self._config, marker, limit,"},{"line_number":263,"context_line":"                    filters\u003dfilters)"},{"line_number":264,"context_line":"                list_ids \u003d [\"/by-provider/%s/%s@%s\" % (checkpoint.provider_id,"},{"line_number":265,"context_line":"                                                       checkpoint.timestamp,"},{"line_number":266,"context_line":"                                                       checkpoint.id)"},{"line_number":267,"context_line":"                            for checkpoint in checkpoints"},{"line_number":268,"context_line":"                            if checkpoint.status !\u003d \"deleted\"]"},{"line_number":269,"context_line":"                return list_ids"},{"line_number":270,"context_line":"            if filter_key \u003d\u003d \"by-plan\":"},{"line_number":271,"context_line":"                filters \u003d {"},{"line_number":272,"context_line":"                    \"plan_id\": filter_value"},{"line_number":273,"context_line":"                }"},{"line_number":274,"context_line":"                checkpoints \u003d self.db_wrapper_api.checkpoint_get_all("},{"line_number":275,"context_line":"                    self._context, self._config, marker, limit,"},{"line_number":276,"context_line":"                    filters\u003dfilters)"},{"line_number":277,"context_line":"                list_ids \u003d [\"/by-plan/%s/%s/%s@%s\" % (checkpoint.plan_id,"},{"line_number":278,"context_line":"                                                      checkpoint.created_at,"},{"line_number":279,"context_line":"                                                      checkpoint.timestamp,"},{"line_number":280,"context_line":"                                                      checkpoint.id)"},{"line_number":281,"context_line":"                            for checkpoint in checkpoints]"},{"line_number":282,"context_line":"                return list_ids"},{"line_number":283,"context_line":"            if filter_key \u003d\u003d \"by-date\":"},{"line_number":284,"context_line":"                filters \u003d {"},{"line_number":285,"context_line":"                    \"created_at\": filter_value"},{"line_number":286,"context_line":"                }"},{"line_number":287,"context_line":"                checkpoints \u003d self.db_wrapper_api.checkpoint_get_all("},{"line_number":288,"context_line":"                    self._context, self._config, marker, limit,"},{"line_number":289,"context_line":"                    filters\u003dfilters)"},{"line_number":290,"context_line":"                list_ids \u003d [\"/by-date/%s/%s@%s\" % (checkpoint.created_at,"},{"line_number":291,"context_line":"                                                   checkpoint.timestamp,"},{"line_number":292,"context_line":"                                                   checkpoint.id)"},{"line_number":293,"context_line":"                            for checkpoint in checkpoints]"},{"line_number":294,"context_line":"                return list_ids"},{"line_number":295,"context_line":"        elif section_name \u003d\u003d \"checkpoints\":"},{"line_number":296,"context_line":"            checkpoint_id \u003d fields[2]"},{"line_number":297,"context_line":"            if len(fields) \u003d\u003d 6 and fields[3] \u003d\u003d \"resource-data\":"},{"line_number":298,"context_line":"                #  list by a checkpoint_item"},{"line_number":299,"context_line":"                resource_id \u003d fields[4]"},{"line_number":300,"context_line":"                checkpoint_item \u003d ("},{"line_number":301,"context_line":"                    self.db_wrapper_api.checkpoint_item_get_by_resource_id("},{"line_number":302,"context_line":"                        self._context, self._config, checkpoint_id,"},{"line_number":303,"context_line":"                        resource_id))"},{"line_number":304,"context_line":"                if checkpoint_item:"},{"line_number":305,"context_line":"                    filters \u003d {"},{"line_number":306,"context_line":"                        \"checkpoint_item_id\": checkpoint_item[\"id\"]"},{"line_number":307,"context_line":"                    }"},{"line_number":308,"context_line":"                    checkpoint_item_datas \u003d ("},{"line_number":309,"context_line":"                        self.db_wrapper_api.checkpoint_item_data_get_all("},{"line_number":310,"context_line":"                            self._context, self._config, marker,"},{"line_number":311,"context_line":"                            limit, filters\u003dfilters))"},{"line_number":312,"context_line":"                    return [obj.data_name for obj in checkpoint_item_datas]"},{"line_number":313,"context_line":"        else:"},{"line_number":314,"context_line":"            LOG.warning(\u0027The prefix of the object can not be \u0027"},{"line_number":315,"context_line":"                        \u0027parsed. %s\u0027, prefix)"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":17,"id":"df140735_5f3671e8","line":317,"range":{"start_line":251,"start_character":0,"end_line":317,"end_character":19},"updated":"2017-06-01 12:08:12.000000000","message":"ditto","commit_id":"7914177c9d4da44481e9f3e3f87e5906a69b1de2"}]}
