-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathjson_parse.py
More file actions
28 lines (21 loc) · 817 Bytes
/
json_parse.py
File metadata and controls
28 lines (21 loc) · 817 Bytes
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
from pathlib import Path
from typing import Callable
import ijson
from rpm_package import Package, PackageSet
def load_compose_json_file(
filepath: Path, prefix: str, get_pkg: Callable
) -> PackageSet:
"""Load and parse packages from a JSON compose file.
Args:
filepath: Path to the JSON file containing package information
prefix: JSON prefix to locate package data within the file
get_pkg: Callable that converts raw package data into Package objects
Returns:
PackageSet containing all parsed Package objects from the file
"""
payloads: PackageSet[Package] = PackageSet()
with open(filepath, mode="rb") as f:
pkgs = ijson.kvitems(f, prefix, use_float=True)
for k, v in pkgs:
payloads.add(get_pkg(k))
return payloads