Showing
3 changed files
with
60 additions
and
14 deletions
| ... | @@ -24,6 +24,7 @@ def get_diff_from_project(): | ... | @@ -24,6 +24,7 @@ def get_diff_from_project(): |
| 24 | proc = subprocess.Popen(["git", "diff", "--cached"], stdout=subprocess.PIPE) | 24 | proc = subprocess.Popen(["git", "diff", "--cached"], stdout=subprocess.PIPE) |
| 25 | staged_files = proc.stdout.readlines() | 25 | staged_files = proc.stdout.readlines() |
| 26 | staged_files = [f.decode("utf-8") for f in staged_files] | 26 | staged_files = [f.decode("utf-8") for f in staged_files] |
| 27 | + assert staged_files, "You have to update the file via `git add` to change not staged for commit." | ||
| 27 | return staged_files | 28 | return staged_files |
| 28 | 29 | ||
| 29 | def commit_message_parser(messages): | 30 | def commit_message_parser(messages): |
| ... | @@ -33,16 +34,23 @@ def commit_message_parser(messages): | ... | @@ -33,16 +34,23 @@ def commit_message_parser(messages): |
| 33 | result.append(" ".join(commit["message"])) | 34 | result.append(" ".join(commit["message"])) |
| 34 | return result | 35 | return result |
| 35 | 36 | ||
| 36 | -def tokenizing(code): | 37 | +def healthcheck(endpoint): |
| 38 | + response = requests.get( | ||
| 39 | + f"{endpoint}/", | ||
| 40 | + headers={'Content-Type': 'application/json; charset=utf-8'} | ||
| 41 | + ) | ||
| 42 | + assert response.status_code == 200, f"{endpoint} is not running." | ||
| 43 | + | ||
| 44 | +def tokenizing(code, endpoint): | ||
| 37 | data = {"code": code } | 45 | data = {"code": code } |
| 38 | res = requests.post( | 46 | res = requests.post( |
| 39 | - 'http://127.0.0.1:5000/tokenizer', | 47 | + f'{endpoint}/tokenizer', |
| 40 | data=json.dumps(data), | 48 | data=json.dumps(data), |
| 41 | headers={'Content-Type': 'application/json; charset=utf-8'} | 49 | headers={'Content-Type': 'application/json; charset=utf-8'} |
| 42 | ) | 50 | ) |
| 43 | return json.loads(res.text)["tokens"] | 51 | return json.loads(res.text)["tokens"] |
| 44 | 52 | ||
| 45 | -def commit_autosuggestions(diffs): | 53 | +def commit_autosuggestions(diffs, endpoint): |
| 46 | commit_message = {} | 54 | commit_message = {} |
| 47 | for idx, example in enumerate(whatthepatch.parse_patch(diffs)): | 55 | for idx, example in enumerate(whatthepatch.parse_patch(diffs)): |
| 48 | if not example.changes: | 56 | if not example.changes: |
| ... | @@ -52,16 +60,16 @@ def commit_autosuggestions(diffs): | ... | @@ -52,16 +60,16 @@ def commit_autosuggestions(diffs): |
| 52 | added, deleted = [], [] | 60 | added, deleted = [], [] |
| 53 | for change in example.changes: | 61 | for change in example.changes: |
| 54 | if change.old == None and change.new != None: | 62 | if change.old == None and change.new != None: |
| 55 | - added.extend(tokenizing(change.line)) | 63 | + added.extend(tokenizing(change.line, endpoint=endpoint)) |
| 56 | isadded = True | 64 | isadded = True |
| 57 | elif change.old != None and change.new == None: | 65 | elif change.old != None and change.new == None: |
| 58 | - deleted.extend(tokenizing(change.line)) | 66 | + deleted.extend(tokenizing(change.line, endpoint=endpoint)) |
| 59 | isdeleted = True | 67 | isdeleted = True |
| 60 | 68 | ||
| 61 | if isadded and isdeleted and example.header.new_path: | 69 | if isadded and isdeleted and example.header.new_path: |
| 62 | data = {"idx": idx, "added" : added, "deleted" : deleted} | 70 | data = {"idx": idx, "added" : added, "deleted" : deleted} |
| 63 | res = requests.post( | 71 | res = requests.post( |
| 64 | - 'http://127.0.0.1:5000/diff', | 72 | + f'{endpoint}/diff', |
| 65 | data=json.dumps(data), | 73 | data=json.dumps(data), |
| 66 | headers={'Content-Type': 'application/json; charset=utf-8'} | 74 | headers={'Content-Type': 'application/json; charset=utf-8'} |
| 67 | ) | 75 | ) |
| ... | @@ -70,7 +78,7 @@ def commit_autosuggestions(diffs): | ... | @@ -70,7 +78,7 @@ def commit_autosuggestions(diffs): |
| 70 | else: | 78 | else: |
| 71 | data = {"idx": idx, "added": added, "deleted": deleted} | 79 | data = {"idx": idx, "added": added, "deleted": deleted} |
| 72 | res = requests.post( | 80 | res = requests.post( |
| 73 | - 'http://127.0.0.1:5000/added', | 81 | + f'{endpoint}/added', |
| 74 | data=json.dumps(data), | 82 | data=json.dumps(data), |
| 75 | headers={'Content-Type': 'application/json; charset=utf-8'} | 83 | headers={'Content-Type': 'application/json; charset=utf-8'} |
| 76 | ) | 84 | ) |
| ... | @@ -86,6 +94,8 @@ def commit(messages): | ... | @@ -86,6 +94,8 @@ def commit(messages): |
| 86 | 94 | ||
| 87 | @click.group(invoke_without_command=True) | 95 | @click.group(invoke_without_command=True) |
| 88 | @click.pass_context | 96 | @click.pass_context |
| 97 | +@click.option('--profile', default='default', type=str, | ||
| 98 | + help='unique name for managing each independent settings') | ||
| 89 | @click.option('--file', '-f', type=click.File('r'), | 99 | @click.option('--file', '-f', type=click.File('r'), |
| 90 | help='patch file containing git diff ' | 100 | help='patch file containing git diff ' |
| 91 | '(e.g. file created by `git add` and `git diff --cached > test.diff`)') | 101 | '(e.g. file created by `git add` and `git diff --cached > test.diff`)') |
| ... | @@ -93,13 +103,26 @@ def commit(messages): | ... | @@ -93,13 +103,26 @@ def commit(messages): |
| 93 | help='print suggested commit message more detail.') | 103 | help='print suggested commit message more detail.') |
| 94 | @click.option('--autocommit', '-a', is_flag=True, | 104 | @click.option('--autocommit', '-a', is_flag=True, |
| 95 | help='automatically commit without asking if you want to commit') | 105 | help='automatically commit without asking if you want to commit') |
| 96 | -def cli(ctx, file, verbose, autocommit): | 106 | +def cli(ctx, profile, file, verbose, autocommit): |
| 97 | if not ctx.invoked_subcommand: | 107 | if not ctx.invoked_subcommand: |
| 108 | + profile = profile.upper() | ||
| 109 | + path = join(expanduser("~"), '.commit-autosuggestions.ini') | ||
| 110 | + config = configparser.ConfigParser() | ||
| 111 | + if not exists(path): | ||
| 112 | + raise FileNotFoundError("The configuration file for commit-autosuggestions could not be found. " | ||
| 113 | + "Enter the `commit configure --help` command.") | ||
| 114 | + config.read(path) | ||
| 115 | + if profile.upper() not in list(config.keys()): | ||
| 116 | + raise KeyError(f"That profile({profile}) cannot be found in the configuration file. Check the {path}.") | ||
| 117 | + | ||
| 118 | + endpoint = config[profile]['endpoint'] | ||
| 119 | + healthcheck(endpoint=endpoint) | ||
| 120 | + | ||
| 98 | staged_files = file if file else get_diff_from_project() | 121 | staged_files = file if file else get_diff_from_project() |
| 99 | staged_files = [f.strip() for f in staged_files] | 122 | staged_files = [f.strip() for f in staged_files] |
| 100 | diffs = "\n".join(staged_files) | 123 | diffs = "\n".join(staged_files) |
| 101 | 124 | ||
| 102 | - result = commit_autosuggestions(diffs=diffs) | 125 | + result = commit_autosuggestions(diffs=diffs, endpoint=endpoint) |
| 103 | if verbose: | 126 | if verbose: |
| 104 | click.echo( | 127 | click.echo( |
| 105 | json.dumps(result, indent=4, sort_keys=True) + "\n" | 128 | json.dumps(result, indent=4, sort_keys=True) + "\n" |
| ... | @@ -115,22 +138,26 @@ def cli(ctx, file, verbose, autocommit): | ... | @@ -115,22 +138,26 @@ def cli(ctx, file, verbose, autocommit): |
| 115 | @cli.command() | 138 | @cli.command() |
| 116 | @click.option('--profile', default='default', type=str, | 139 | @click.option('--profile', default='default', type=str, |
| 117 | help='unique name for managing each independent settings') | 140 | help='unique name for managing each independent settings') |
| 118 | -@click.option('--endpoint', default='http://127.0.0.1:5000/', type=str, | 141 | +@click.option('--endpoint', required=True, type=str, |
| 119 | - help='endpoint address accessible to the server (example:http://127.0.0.1:5000/)') | 142 | + help='endpoint address accessible to the server (example : http://127.0.0.1:5000/)') |
| 120 | - | ||
| 121 | def configure(profile, endpoint): | 143 | def configure(profile, endpoint): |
| 144 | + profile = profile.upper() | ||
| 122 | path = join(expanduser("~"), '.commit-autosuggestions.ini') | 145 | path = join(expanduser("~"), '.commit-autosuggestions.ini') |
| 123 | config = configparser.ConfigParser() | 146 | config = configparser.ConfigParser() |
| 124 | if exists(path): | 147 | if exists(path): |
| 125 | config.read(path) | 148 | config.read(path) |
| 126 | - if profile not in config: | 149 | + if profile not in list(config.keys()): |
| 127 | config[profile] = {} | 150 | config[profile] = {} |
| 128 | if endpoint: | 151 | if endpoint: |
| 129 | config[profile]['endpoint'] = endpoint | 152 | config[profile]['endpoint'] = endpoint |
| 130 | 153 | ||
| 131 | click.echo(f"configure of commit-autosuggestions is setted up in {path}.") | 154 | click.echo(f"configure of commit-autosuggestions is setted up in {path}.") |
| 155 | + with open(path, 'w') as configfile: | ||
| 156 | + config.write(configfile) | ||
| 132 | for key in config[profile]: | 157 | for key in config[profile]: |
| 133 | - click.echo(click.style(key, fg='green') + config[profile][key]) | 158 | + click.echo("[" + click.style('username', fg='blue') + "] : " + profile) |
| 159 | + click.echo("[" + click.style(key, fg='green') + "] : " + config[profile][key]) | ||
| 160 | + click.echo() | ||
| 134 | 161 | ||
| 135 | if __name__ == '__main__': | 162 | if __name__ == '__main__': |
| 136 | cli() | 163 | cli() |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
scripts/get_ngrok.sh
0 → 100644
-
Please register or login to post a comment