File: major_updates.py

package info (click to toggle)
python-azure 20251014%2Bgit-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 766,472 kB
  • sloc: python: 6,314,744; ansic: 804; javascript: 287; makefile: 198; sh: 198; xml: 109
file content (45 lines) | stat: -rw-r--r-- 1,510 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import ast
import requests
from packaging.requirements import Requirement
from packaging.version import Version


def fetch_dependencies_from_setup(file_path):
    with open(file_path, "r") as file:
        tree = ast.parse(file.read(), filename=file_path)

    dependencies = []
    for node in ast.walk(tree):
        if isinstance(node, ast.Call) and getattr(node.func, "id", None) == "setup":
            for keyword in node.keywords:
                if keyword.arg == "install_requires":
                    dependencies = [elt.s for elt in keyword.value.elts]
                    break
    return dependencies


def list_versions(package_name):
    url = f"https://pypi.org/pypi/{package_name}/json"
    response = requests.get(url)
    data = response.json()
    versions = data["releases"].keys()
    return sorted(versions, key=Version, reverse=True)


def is_major_update(previous, latest):
    return Version(latest).major > Version(previous).major


def check_for_major_updates():
    setup_file_path = "sdk/ml/azure-ai-ml/setup.py"
    deps_list = fetch_dependencies_from_setup(setup_file_path)
    deps = [Requirement(line) for line in deps_list if line.strip() and not line.strip().startswith("#")]

    with open("updates.txt", "w") as f:
        for dep in deps:
            all_versions = list_versions(dep.name)
            if len(all_versions) > 1 and is_major_update(all_versions[1], all_versions[0]):
                f.write(f"{dep.name} {all_versions[0]}\n")


check_for_major_updates()