From 768aa24eeb1c9606fa214bf0aa57315814c04f5e Mon Sep 17 00:00:00 2001 From: Melody Horn Date: Mon, 29 Mar 2021 19:24:55 -0600 Subject: homebrew time --- repos/homebrew.py | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 repos/homebrew.py (limited to 'repos/homebrew.py') diff --git a/repos/homebrew.py b/repos/homebrew.py new file mode 100644 index 0000000..77dc05b --- /dev/null +++ b/repos/homebrew.py @@ -0,0 +1,51 @@ +import json +from pathlib import Path +from typing import Mapping + +from .base import Repository, Version + +__all__ = [ + 'core', + 'linux', + 'cask', +] + +def parse_cached(cached: Path) -> Mapping[str, Version]: + with cached.open('r') as json_file: + formulae = json.load(json_file) + result = dict() + for formula in formulae: + if 'full_name' in formula: + name = formula['full_name'] + elif 'full_token' in formula: + name = formula['full_token'] + else: + print('no name', formula) + raise ValueError() + if 'version' in formula: + version = formula['version'] + elif 'versions' in formula: + versions = formula['versions'] + if 'stable' in versions: + version = versions['stable'] + else: + print('no stable versions', versions) + raise ValueError() + else: + print('no versions??', formula) + raise ValueError() + result[name] = Version(version, version) + return result + +def build_repo(name: str, url: str) -> Repository: + url = f'https://formulae.brew.sh/api/{url}.json' + return Repository( + family='Homebrew', + repo=name, + index_url=url, + parse=parse_cached, + ) + +core = build_repo('Core', 'formula') +linux = build_repo('Linux', 'formula-linux') +cask = build_repo('Cask', 'cask') -- cgit v1.2.3