diff --git a/libcflib/db.xsh b/libcflib/db.xsh index 74645d8..ed68ab1 100644 --- a/libcflib/db.xsh +++ b/libcflib/db.xsh @@ -84,13 +84,9 @@ class DB: yield data def load_packages(self): - with indir($LIBCFGRAPH_DIR + '/artifacts/'): - artifacts = g`**/*.json` - artifacts = sorted(artifacts) - groups = toolz.groupby(lambda a: a.split('/')[0], artifacts) - for package, artifact in groups.items(): - p = Package(name=package, artifact_ids=artifact) - self._packages[p.name] = p + for package in os.listdir($LIBCFGRAPH_DIR + '/artifacts/'): + p = Package(name=package) + self._packages[p.name] = p @property def packages(self): diff --git a/libcflib/harvest_pkgs.xsh b/libcflib/harvest_pkgs.xsh index e591768..090f09e 100644 --- a/libcflib/harvest_pkgs.xsh +++ b/libcflib/harvest_pkgs.xsh @@ -27,13 +27,14 @@ def create_graphs(): req.add(dep.split(' ')[0]) if pkg not in channel_graphs[channel]: channel_graphs[channel].add_node(pkg) - for k in ['versions', 'archs', 'req']: + for k in ['versions', 'archs', 'req', 'artifact_id']: if k not in channel_graphs[channel].nodes[pkg]: channel_graphs[channel].nodes[pkg][k] = set() channel_graphs[channel].nodes[pkg]['archs'].add(arch) channel_graphs[channel].nodes[pkg]['versions'].add(art['version']) channel_graphs[channel].nodes[pkg]['req'].update(req) + channel_graphs[channel].nodes[pkg]['artifact_id'].update(art_fp) for dep in channel_graphs[channel].nodes[pkg]['req']: if (dep, pkg) not in channel_graphs[channel].edges: diff --git a/libcflib/model.py b/libcflib/model.xsh similarity index 89% rename from libcflib/model.py rename to libcflib/model.xsh index 5640c19..8886c48 100644 --- a/libcflib/model.py +++ b/libcflib/model.xsh @@ -111,29 +111,24 @@ def _load(self): class Package(Model): - def __init__(self, *, name=None, artifact_ids=None, channel="conda-forge"): + def __init__(self, *, name=None): self._name = name - self._channel = "conda-forge" super().__init__() self.name = name - self.channel = channel # eager load self._load() + def __repr__(self): + return f"Package({self.name})" + + def _load(self): + with indir($LIBCFGRAPH_DIR + '/artifacts/' + self._name): + artifact_ids = g`**/*.json` + artifact_ids = sorted(artifact_ids) self.artifacts = defaultdict(lambda: defaultdict(set)) for a in artifact_ids: _, channel, arch, artifact_name = a.split("/", 3) self.artifacts[channel][arch].add(artifact_name) - - def __repr__(self): - return f"Package({self.name}" - - def _load(self): - env = builtins.__xonsh_env__ - filename = os.path.join(env.get("LIBCFGRAPH_DIR"), self._channel + ".json") - # TODO: use networkx to get the data so we have edges - with open(filename, "r") as f: - self._d.update(json.load(f).get(self._name, {})) super()._load()