|
| 1 | +def get_setup_version_and_pattern(setup_content): |
| 2 | + depend_lst, version_lst = [], [] |
| 3 | + for l in setup_content: |
| 4 | + if '==' in l: |
| 5 | + lst = l.split('[')[-1].split(']')[0].replace(' ', '').replace('"', '').replace("'", '').split(',') |
| 6 | + for dep in lst: |
| 7 | + if dep != '\n': |
| 8 | + version_lst.append(dep.split('==')[1]) |
| 9 | + depend_lst.append(dep.split('==')[0]) |
| 10 | + |
| 11 | + version_high_dict = {d: v for d, v in zip(depend_lst, version_lst)} |
| 12 | + return version_high_dict |
| 13 | + |
| 14 | + |
| 15 | +def get_env_version(env_content): |
| 16 | + read_flag = False |
| 17 | + depend_lst, version_lst = [], [] |
| 18 | + for l in env_content: |
| 19 | + if 'dependencies:' in l: |
| 20 | + read_flag = True |
| 21 | + elif read_flag: |
| 22 | + lst = l.replace('-', '').replace(' ', '').replace('\n', '').split("=") |
| 23 | + if len(lst) == 2: |
| 24 | + depend_lst.append(lst[0]) |
| 25 | + version_lst.append(lst[1]) |
| 26 | + return {d:v for d, v in zip(depend_lst, version_lst)} |
| 27 | + |
| 28 | + |
| 29 | +def update_dependencies(setup_content, version_low_dict, version_high_dict): |
| 30 | + version_combo_dict = {} |
| 31 | + for dep, ver in version_high_dict.items(): |
| 32 | + if dep in version_low_dict.keys() and version_low_dict[dep] != ver: |
| 33 | + version_combo_dict[dep] = dep + ">=" + version_low_dict[dep] + ",<=" + ver |
| 34 | + else: |
| 35 | + version_combo_dict[dep] = dep + "==" + ver |
| 36 | + |
| 37 | + setup_content_new = "" |
| 38 | + pattern_dict = {d:d + "==" + v for d, v in version_high_dict.items()} |
| 39 | + for l in setup_content: |
| 40 | + for k, v in pattern_dict.items(): |
| 41 | + if v in l: |
| 42 | + l = l.replace(v, version_combo_dict[k]) |
| 43 | + setup_content_new +=l |
| 44 | + return setup_content_new |
| 45 | + |
| 46 | + |
| 47 | +if __name__ == "__main__": |
| 48 | + with open('pyproject.toml', "r") as f: |
| 49 | + setup_content = f.readlines() |
| 50 | + |
| 51 | + with open('environment.yml', "r") as f: |
| 52 | + env_content = f.readlines() |
| 53 | + |
| 54 | + setup_content_new = update_dependencies( |
| 55 | + setup_content=setup_content[2:], |
| 56 | + version_low_dict=get_env_version(env_content=env_content), |
| 57 | + version_high_dict=get_setup_version_and_pattern(setup_content=setup_content[2:]), |
| 58 | + ) |
| 59 | + |
| 60 | + with open('pyproject.toml', "w") as f: |
| 61 | + f.writelines("".join(setup_content[:2]) + setup_content_new) |
0 commit comments