MCPcopy Create free account
hub / github.com/pytest-dev/pytest / iter_plugins

Function iter_plugins

scripts/update-plugin-list.py:51–100  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

49
50
51def iter_plugins():
52 regex = r">([\d\w-]*)</a>"
53 response = requests.get("https://pypi.org/simple")
54
55 matches = list(
56 match
57 for match in re.finditer(regex, response.text)
58 if match.groups()[0].startswith("pytest-")
59 )
60
61 for match in tqdm(matches, smoothing=0):
62 name = match.groups()[0]
63 response = requests.get(f"https://pypi.org/pypi/{name}/json")
64 if response.status_code == 404:
65 # Some packages, like pytest-azurepipelines42, are included in https://pypi.org/simple but
66 # return 404 on the JSON API. Skip.
67 continue
68 response.raise_for_status()
69 info = response.json()["info"]
70 if "Development Status :: 7 - Inactive" in info["classifiers"]:
71 continue
72 for classifier in DEVELOPMENT_STATUS_CLASSIFIERS:
73 if classifier in info["classifiers"]:
74 status = classifier[22:]
75 break
76 else:
77 status = "N/A"
78 requires = "N/A"
79 if info["requires_dist"]:
80 for requirement in info["requires_dist"]:
81 if requirement == "pytest" or "pytest " in requirement:
82 requires = requirement
83 break
84 releases = response.json()["releases"]
85 for release in sorted(releases, key=packaging.version.parse, reverse=True):
86 if releases[release]:
87 release_date = datetime.date.fromisoformat(
88 releases[release][-1]["upload_time_iso_8601"].split("T")[0]
89 )
90 last_release = release_date.strftime("%b %d, %Y")
91 break
92 name = f':pypi:`{info["name"]}`'
93 summary = escape_rst(info["summary"].replace("\n", ""))
94 yield {
95 "name": name,
96 "summary": summary.strip(),
97 "last release": last_release,
98 "status": status,
99 "requires": requires,
100 }
101
102
103def plugin_definitions(plugins):

Callers 1

mainFunction · 0.85

Calls 3

escape_rstFunction · 0.85
stripMethod · 0.80
getMethod · 0.45

Tested by

no test coverage detected