in sapp/analysis_output.py [0:0]
def from_directory(cls, directory: str) -> "AnalysisOutput":
metadata = {}
for file in glob(os.path.join(directory, METADATA_GLOB)):
with open(file) as f:
metadata.update(json.load(f))
filename_specs = []
filename_glob = None
if "filename_spec" in metadata:
filename_specs = [
os.path.join(directory, os.path.basename(metadata["filename_spec"]))
]
elif "filename_glob" in metadata:
filename_glob = metadata["filename_glob"]
if not filename_glob:
raise AnalysisOutputError(
f"Empty 'filename_glob' not allowed. In {METADATA_GLOB}, "
"Use either 'filename_spec' or specify something in "
"'filename_glob'."
)
else:
# Legacy
filename_specs = [
os.path.join(directory, os.path.basename(metadata["filenames"][0]))
]
repo_root = metadata.get("repo_root")
analysis_root = metadata["root"]
rules = {rule["code"]: rule for rule in metadata.get("rules", [])}
return cls(
directory=directory,
filename_specs=filename_specs,
filename_glob=filename_glob,
metadata=Metadata(
analysis_tool_version=metadata["version"],
commit_hash=metadata.get("commit"),
analysis_root=analysis_root,
repo_roots=[repo_root],
job_instance=metadata.get("job_instance"),
tool=metadata.get("tool"),
repository_name=metadata.get("repository_name"),
project=metadata.get("project"),
rules=rules,
type_intervals=cls._get_interval_dict(metadata),
),
)