in tools/incremental_test/specification.py [0:0]
def from_json(input_json: Dict[str, Any]) -> "RepositoryState":
try:
kind = input_json["kind"]
if kind == "hg":
return HgRepositoryState(
repository=Path(input_json["repository"]),
commit_hash=input_json["commit_hash"],
)
elif kind == "file":
files = input_json["files"]
if not isinstance(files, dict):
raise InvalidSpecificationException(
"File repository must be specified as dicts"
)
return FileRepositoryState(files)
elif kind == "updated":
base = input_json["base"]
updates = input_json["updates"]
if not isinstance(updates, list):
raise InvalidSpecificationException(
"Updates must be specified as lists"
)
return UpdatedRepositoryState(
RepositoryState.from_json(base),
[RepositoryUpdate.from_json(update) for update in updates],
)
else:
raise InvalidSpecificationException(
"Cannot create RepositoryState due to unrecognized kind"
)
except KeyError as key:
raise InvalidSpecificationException(
f"Cannot create RespositoryState due to missing field '{key}'"
)
except TypeError as error:
raise InvalidSpecificationException(
f"Cannot create RespositoryState due to invalid path: {error}"
)