Query crates.io for a crate's license.
(name: str, version: str)
| 235 | |
| 236 | |
| 237 | def lookup_cargo(name: str, version: str) -> str | None: |
| 238 | """Query crates.io for a crate's license.""" |
| 239 | data = _get_json(f"https://crates.io/api/v1/crates/{name}/{version}", "crates.io") |
| 240 | if data and "version" in data: |
| 241 | return data["version"].get("license") |
| 242 | # fallback: try crate-level |
| 243 | data = _get_json(f"https://crates.io/api/v1/crates/{name}", "crates.io") |
| 244 | if data and "crate" in data: |
| 245 | versions = data.get("versions", []) |
| 246 | for v in versions: |
| 247 | if v.get("num") == version: |
| 248 | return v.get("license") |
| 249 | # last resort: latest version license |
| 250 | if versions: |
| 251 | return versions[0].get("license") |
| 252 | return None |
| 253 | |
| 254 | |
| 255 | def lookup_npm(name: str, version: str) -> str | None: |
no test coverage detected