From f66bbe62ccc76f0ceac9740337b96c2e61108dab Mon Sep 17 00:00:00 2001 From: ZhangYifan Date: Mon, 3 Aug 2020 20:02:33 +0800 Subject: [PATCH 1/7] =?UTF-8?q?README=E5=A2=9E=E5=8A=A0=E5=91=BD=E4=BB=A4?= =?UTF-8?q?=E8=A1=8C=E5=B7=A5=E5=85=B7=E5=88=A0=E9=99=A4=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E6=8C=87=E5=AF=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- patch-tracking/README.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/patch-tracking/README.md b/patch-tracking/README.md index 63ecffbd..6fb10f62 100644 --- a/patch-tracking/README.md +++ b/patch-tracking/README.md @@ -261,7 +261,21 @@ patch-tracking-cli query --server --table issue patch-tracking-cli query --server 127.0.0.1:5001 --table issue ``` -### 4.4 码云查看 issue 及 PR +### 4.4 删除 Tracking 跟踪项数据 + +```shell script +patch-tracking-cli delete --server SERVER --user USER --password PWD --table TABLE --repo REPO [--branch BRANCH] +``` + +可以删除指定repo和branch的单条数据;也可直接删除指定repo下所有branch的数据。 + + +例如: +```shell script +patch-tracking-cli delete --server 127.0.0.1:5001 --user admin --password Test@123 --repo testPatchTrack/testPatch1 --branch master +``` + +### 4.5 码云查看 issue 及 PR 登录Gitee上进行跟踪的软件项目,在该项目的Issues和Pull Requests页签下,可以查看到名为`[patch tracking] TIME`,例如` [patch tracking] 20200713101548`的条目。 -- Gitee From 95939c54297e9e5f933e03ef547169a4e26450e0 Mon Sep 17 00:00:00 2001 From: ZhangYifan Date: Tue, 4 Aug 2020 14:37:59 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E6=96=B0=E5=A2=9Etracking=E9=A1=B9?= =?UTF-8?q?=E7=9A=84=E5=8F=82=E6=95=B0=E9=9C=80=E8=A6=81=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../patch_tracking/cli/patch_tracking_cli.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/patch-tracking/patch_tracking/cli/patch_tracking_cli.py b/patch-tracking/patch_tracking/cli/patch_tracking_cli.py index 2a8ca019..de23d107 100755 --- a/patch-tracking/patch_tracking/cli/patch_tracking_cli.py +++ b/patch-tracking/patch_tracking/cli/patch_tracking_cli.py @@ -119,6 +119,9 @@ def params_input_track(params, file_path=None): """ load tracking from command line arguments """ + if not check_add_param(params): + return 'error', 'Check input params error' + if add_param_check_url(params, file_path) == 'error': return 'error', 'Check input params error.' @@ -156,6 +159,19 @@ def params_input_track(params, file_path=None): return 'error', 'Unexpected Error.' +def check_add_param(params): + success = True + required_params = ["repo", "branch", "scm_repo", "scm_branch", "version_control", "enabled"] + miss_params = list() + for param in required_params: + if param not in params or not params[param]: + miss_params.append(param) + success = False + if not success: + print("patch_tracking_cli add: error: the following arguments are required: --{}".format(", --".join(miss_params))) + return success + + def add(args): """ add tracking -- Gitee From 995d5693e55f1a7c4362fd29a2d3e7242412e0fb Mon Sep 17 00:00:00 2001 From: ZhangYifan Date: Tue, 4 Aug 2020 15:14:42 +0800 Subject: [PATCH 3/7] =?UTF-8?q?I1Q01E=20=E5=8F=82=E6=95=B0=E7=BC=A9?= =?UTF-8?q?=E5=86=99=E7=A6=81=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- patch-tracking/patch_tracking/cli/patch_tracking_cli.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/patch-tracking/patch_tracking/cli/patch_tracking_cli.py b/patch-tracking/patch_tracking/cli/patch_tracking_cli.py index de23d107..159fba5d 100755 --- a/patch-tracking/patch_tracking/cli/patch_tracking_cli.py +++ b/patch-tracking/patch_tracking/cli/patch_tracking_cli.py @@ -320,7 +320,7 @@ add_usage = """ %(prog)s --server SERVER --user USER --password PASSWORD --file FILE %(prog)s --server SERVER --user USER --password PASSWORD --dir DIR""" parser_add = subparsers.add_parser( - 'add', parents=[common_parser, authentication_parser], help="add tracking", usage=add_usage + 'add', parents=[common_parser, authentication_parser], help="add tracking", usage=add_usage, allow_abbrev=False ) parser_add.set_defaults(func=add) parser_add.add_argument("--version_control", choices=['github'], help="upstream version control system") @@ -335,7 +335,7 @@ parser_add.add_argument('--dir', help='import patch tracking from files in direc # delete del_usage = """ %(prog)s --server SERVER --table TABLE --repo REPO [--branch BRANCH]""" -parser_delete = subparsers.add_parser('delete', parents=[common_parser, authentication_parser], help="delete tracking") +parser_delete = subparsers.add_parser('delete', parents=[common_parser, authentication_parser], help="delete tracking", allow_abbrev=False) parser_delete.set_defaults(func=delete) parser_delete.add_argument("--repo", required=True, help="source package repository") parser_delete.add_argument("--branch", help="source package branch") @@ -343,7 +343,7 @@ parser_delete.add_argument("--branch", help="source package branch") # query query_usage = """ %(prog)s --server SERVER --table {tracking,issue} [--repo REPO] [--branch BRANCH]""" -parser_query = subparsers.add_parser('query', parents=[common_parser], help="query tracking/issue") +parser_query = subparsers.add_parser('query', parents=[common_parser], help="query tracking/issue", allow_abbrev=False) parser_query.set_defaults(func=query) parser_query.add_argument("--table", required=True, choices=["tracking", "issue"], help="query tracking or issue") parser_query.add_argument("--repo", help="source package repository") -- Gitee From 8eb142b72a79c5d946a58024218dc2a44b3571ad Mon Sep 17 00:00:00 2001 From: ZhangYifan Date: Sat, 8 Aug 2020 18:37:35 +0800 Subject: [PATCH 4/7] =?UTF-8?q?!3=20=E5=91=BD=E4=BB=A4=E8=A1=8C=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E4=BF=AE=E6=94=B9=20Merge=20pull=20request=20!3=20fro?= =?UTF-8?q?m=20ZhangYifan/cli=5Ftool?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../patch_tracking/cli/patch_tracking_cli.py | 37 ++++++++----------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/patch-tracking/patch_tracking/cli/patch_tracking_cli.py b/patch-tracking/patch_tracking/cli/patch_tracking_cli.py index 159fba5d..ed3b4ab3 100755 --- a/patch-tracking/patch_tracking/cli/patch_tracking_cli.py +++ b/patch-tracking/patch_tracking/cli/patch_tracking_cli.py @@ -21,10 +21,7 @@ def query_table(args): if args.table == "tracking": url = '/'.join(['https:/', server, 'tracking']) - if args.branch and args.repo: - params = {'repo': args.repo, 'branch': args.branch} - else: - params = {'repo': args.repo} + params = {'repo': args.repo, 'branch': args.branch} try: ret = requests.get(url, params=params, verify=False) if ret.status_code == 200 and ret.json()['code'] == '2001': @@ -229,19 +226,15 @@ def delete(args): print('Tracking delete successfully.') return - print("Tracking delete failed. Error: %s", ret) + print("Tracking delete failed. Error: {}".format(ret.text)) except Exception as exception: - print('Error: Connect server error: %s', str(exception)) + print('Connect server error: ' + str(exception)) def query(args): """ - query table data - """ - if args.branch and not args.repo: - print(query_usage) - return - + query table data + """ status, ret = query_table(args) if status == "success": df = pandas.DataFrame.from_dict(ret.json()["data"], orient="columns") @@ -282,16 +275,16 @@ def dir_input_track(dir_path, args): load tracking from dir """ if os.path.exists(dir_path) and os.path.isdir(dir_path): - for root, _, files in os.walk(dir_path): - if not files: - print('error: dir path empty') - return - for file in files: - if os.path.splitext(file)[-1] == ".yaml": - file_path = os.path.join(root, file) - file_input_track(file_path, args) - else: - print('Please input yaml file. Error in {}'.format(file)) + dir_files = os.listdir(dir_path) + if not dir_files: + print('error: dir path empty') + return + for file in dir_files: + if os.path.isfile(os.path.join(dir_path, file)) and os.path.splitext(file)[-1] == ".yaml": + file_path = os.path.join(dir_path, file) + file_input_track(file_path, args) + else: + print('Please input yaml file. Error in {}'.format(file)) else: print('error: dir path error. Params error in {}'.format(dir_path)) -- Gitee From 0951703d631995af09aa7bcefaca04922eea5160 Mon Sep 17 00:00:00 2001 From: ZhangYifan Date: Mon, 10 Aug 2020 16:20:28 +0800 Subject: [PATCH 5/7] =?UTF-8?q?!5=20=E4=BF=AE=E5=A4=8D=E5=8E=9F=E6=9C=89?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B=E4=BB=A3=E7=A0=81=E5=B9=B6?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=88=A0=E9=99=A4=E7=94=A8=E4=BE=8B=20*=20cl?= =?UTF-8?q?i=20show=20waring=20when=20delete=20tracking=20if=20it=20does?= =?UTF-8?q?=20not=20exist=20*=20add=20delete=20test=20case?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- patch-tracking/patch_tracking/api/constant.py | 4 ++- patch-tracking/patch_tracking/api/tracking.py | 13 +++++-- patch-tracking/patch_tracking/app.py | 4 ++- .../patch_tracking/cli/patch_tracking_cli.py | 3 ++ .../patch_tracking/tests/settings.conf | 17 +++++++++ .../patch_tracking/tests/tracking_test.py | 36 +++++++++++++++++-- 6 files changed, 70 insertions(+), 7 deletions(-) create mode 100644 patch-tracking/patch_tracking/tests/settings.conf diff --git a/patch-tracking/patch_tracking/api/constant.py b/patch-tracking/patch_tracking/api/constant.py index 0056a092..118a7052 100644 --- a/patch-tracking/patch_tracking/api/constant.py +++ b/patch-tracking/patch_tracking/api/constant.py @@ -24,6 +24,7 @@ class ResponseCode: DELETE_DB_ERROR = "6001" CONFIGFILE_PATH_EMPTY = "6002" DIS_CONNECTION_DB = "6003" + DELETE_DB_NOT_FOUND = "6005" CODE_MSG_MAP = { SUCCESS: "Successful Operation!", @@ -36,7 +37,8 @@ class ResponseCode: GITEE_CONNECTION_ERROR: "Unable to connect to the gitee", DELETE_DB_ERROR: "Failed to delete database", CONFIGFILE_PATH_EMPTY: "Initialization profile does not exist or cannot be found", - DIS_CONNECTION_DB: "Unable to connect to the database, check the database configuration" + DIS_CONNECTION_DB: "Unable to connect to the database, check the database configuration", + DELETE_DB_NOT_FOUND: "The tracking you want to delete is not exist" } @classmethod diff --git a/patch-tracking/patch_tracking/api/tracking.py b/patch-tracking/patch_tracking/api/tracking.py index 85db948c..a06a9c30 100644 --- a/patch-tracking/patch_tracking/api/tracking.py +++ b/patch-tracking/patch_tracking/api/tracking.py @@ -30,14 +30,21 @@ def delete(): try: if "branch" in keys: - if Tracking.query.filter(Tracking.repo == input_params['repo'], Tracking.branch == input_params['branch']): + if Tracking.query.filter(Tracking.repo == input_params['repo'], Tracking.branch == input_params['branch']).first(): delete_tracking(input_params['repo'], input_params['branch']) logger.info('Delete tracking repo: %s, branch: %s', input_params['repo'], input_params['branch']) + return ResponseCode.ret_message(code=ResponseCode.SUCCESS) + else: + logger.info('Delete tracking repo: %s, branch: %s not found.', input_params['repo'], input_params['branch']) + return ResponseCode.ret_message(code=ResponseCode.DELETE_DB_NOT_FOUND) else: - if Tracking.query.filter(Tracking.repo == input_params['repo']): + if Tracking.query.filter(Tracking.repo == input_params['repo']).first(): delete_tracking(input_params['repo']) logger.info('Delete tracking repo: %s', input_params['repo']) - return ResponseCode.ret_message(code=ResponseCode.SUCCESS) + return ResponseCode.ret_message(code=ResponseCode.SUCCESS) + else: + logger.info('Delete tracking repo: %s not found.', input_params['repo']) + return ResponseCode.ret_message(code=ResponseCode.DELETE_DB_NOT_FOUND) except SQLAlchemyError as err: return ResponseCode.ret_message(code=ResponseCode.DELETE_DB_ERROR, data=err) diff --git a/patch-tracking/patch_tracking/app.py b/patch-tracking/patch_tracking/app.py index 442fd3ee..294149c5 100644 --- a/patch-tracking/patch_tracking/app.py +++ b/patch-tracking/patch_tracking/app.py @@ -2,6 +2,7 @@ flask app """ import logging.config +import os import sys from flask import Flask from patch_tracking.api.issue import issue @@ -33,7 +34,8 @@ def check_settings_conf(): sys.exit() -app.config.from_pyfile("settings.conf") +settings_file = os.path.join(os.path.abspath(os.curdir), "settings.conf") +app.config.from_pyfile(settings_file) check_settings_conf() GITHUB_ACCESS_TOKEN = app.config['GITHUB_ACCESS_TOKEN'] diff --git a/patch-tracking/patch_tracking/cli/patch_tracking_cli.py b/patch-tracking/patch_tracking/cli/patch_tracking_cli.py index ed3b4ab3..9802788c 100755 --- a/patch-tracking/patch_tracking/cli/patch_tracking_cli.py +++ b/patch-tracking/patch_tracking/cli/patch_tracking_cli.py @@ -225,6 +225,9 @@ def delete(args): if ret.status_code == 200 and ret.json()['code'] == '2001': print('Tracking delete successfully.') return + elif ret.status_code == 200 and ret.json()['code'] == '6005': + print('Delete Nothing. Tracking not exist.') + return print("Tracking delete failed. Error: {}".format(ret.text)) except Exception as exception: diff --git a/patch-tracking/patch_tracking/tests/settings.conf b/patch-tracking/patch_tracking/tests/settings.conf new file mode 100644 index 00000000..960c2d2e --- /dev/null +++ b/patch-tracking/patch_tracking/tests/settings.conf @@ -0,0 +1,17 @@ +# server settings +LISTEN = "127.0.0.1:5001" + +# GitHub API settings +GITHUB_ACCESS_TOKEN = "" + +# Gitee API settings +GITEE_ACCESS_TOKEN = "" + +# Time interval +SCAN_DB_INTERVAL = 3600 + +# username +USER = "" + +# password +PASSWORD = "" diff --git a/patch-tracking/patch_tracking/tests/tracking_test.py b/patch-tracking/patch_tracking/tests/tracking_test.py index cb7cf185..79c1962c 100644 --- a/patch-tracking/patch_tracking/tests/tracking_test.py +++ b/patch-tracking/patch_tracking/tests/tracking_test.py @@ -167,12 +167,12 @@ class TestTracking(unittest.TestCase): resp_dict = json.loads(resp.data) self.assertIn("code", resp_dict, msg="Error in data format return") self.assertEqual( - ResponseCode.INPUT_PARAMETERS_ERROR, resp_dict.get("code"), msg="Error in status code return" + ResponseCode.SUCCESS, resp_dict.get("code"), msg="Error in status code return" ) self.assertIn("msg", resp_dict, msg="Error in data format return") self.assertEqual( - ResponseCode.CODE_MSG_MAP.get(ResponseCode.INPUT_PARAMETERS_ERROR), + ResponseCode.CODE_MSG_MAP.get(ResponseCode.SUCCESS), resp_dict.get("msg"), msg="Error in status code return" ) @@ -395,6 +395,38 @@ class TestTracking(unittest.TestCase): self.assertIn("data", resp_dict, msg="Error in data format return") self.assertEqual(resp_dict.get("data"), None, msg="Error in data information return") + def test_delete_data(self): + """ + The POST interface inserts data + :return: + """ + data = { + "version_control": "github", + "scm_repo": "test_delete", + "scm_branch": "test_delete", + "scm_commit": "test_delete", + "repo": "test_delete1", + "branch": "test_delete1", + "enabled": 0 + } + + self.client.post("/tracking", json=data, content_type="application/json", headers=self.auth) + + resp = self.client.delete("/tracking?repo=test_delete1&branch=test_delete1", content_type="application/json", headers=self.auth) + resp_dict = json.loads(resp.data) + self.assertIn("code", resp_dict, msg="Error in data format return") + self.assertEqual(ResponseCode.SUCCESS, resp_dict.get("code"), msg="Error in status code return") + + def test_delete_not_found(self): + """ + The POST interface inserts data + :return: + """ + resp = self.client.delete("/tracking?repo=not_found1&branch=not_found1", content_type="application/json", headers=self.auth) + resp_dict = json.loads(resp.data) + self.assertIn("code", resp_dict, msg="Error in data format return") + self.assertEqual(ResponseCode.DELETE_DB_NOT_FOUND, resp_dict.get("code"), msg="Error in status code return") + if __name__ == '__main__': unittest.main() -- Gitee From 53630f80dd214081f78c2bc1d883cfe714922ed6 Mon Sep 17 00:00:00 2001 From: Zhangyifan Date: Mon, 10 Aug 2020 17:35:39 +0800 Subject: [PATCH 6/7] fix pylint --- patch-tracking/patch_tracking/api/tracking.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/patch-tracking/patch_tracking/api/tracking.py b/patch-tracking/patch_tracking/api/tracking.py index a06a9c30..8ecd27f2 100644 --- a/patch-tracking/patch_tracking/api/tracking.py +++ b/patch-tracking/patch_tracking/api/tracking.py @@ -30,12 +30,14 @@ def delete(): try: if "branch" in keys: - if Tracking.query.filter(Tracking.repo == input_params['repo'], Tracking.branch == input_params['branch']).first(): + if Tracking.query.filter(Tracking.repo == input_params['repo'], + Tracking.branch == input_params['branch']).first(): delete_tracking(input_params['repo'], input_params['branch']) logger.info('Delete tracking repo: %s, branch: %s', input_params['repo'], input_params['branch']) return ResponseCode.ret_message(code=ResponseCode.SUCCESS) else: - logger.info('Delete tracking repo: %s, branch: %s not found.', input_params['repo'], input_params['branch']) + logger.info('Delete tracking repo: %s, branch: %s not found.', input_params['repo'], + input_params['branch']) return ResponseCode.ret_message(code=ResponseCode.DELETE_DB_NOT_FOUND) else: if Tracking.query.filter(Tracking.repo == input_params['repo']).first(): -- Gitee From 6553740a27aa7f95d1c9e869ffbe74016676de27 Mon Sep 17 00:00:00 2001 From: chenyanpanHW Date: Mon, 10 Aug 2020 17:55:09 +0800 Subject: [PATCH 7/7] fixed typo --- patch-tracking/patch_tracking/api/constant.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/patch-tracking/patch_tracking/api/constant.py b/patch-tracking/patch_tracking/api/constant.py index 118a7052..c2de1446 100644 --- a/patch-tracking/patch_tracking/api/constant.py +++ b/patch-tracking/patch_tracking/api/constant.py @@ -38,7 +38,7 @@ class ResponseCode: DELETE_DB_ERROR: "Failed to delete database", CONFIGFILE_PATH_EMPTY: "Initialization profile does not exist or cannot be found", DIS_CONNECTION_DB: "Unable to connect to the database, check the database configuration", - DELETE_DB_NOT_FOUND: "The tracking you want to delete is not exist" + DELETE_DB_NOT_FOUND: "The tracking you want to delete does not exist" } @classmethod -- Gitee