python-security/pyt

View on GitHub
pyt/formatters/json.py

Summary

Maintainability
A
0 mins
Test Coverage
"""This formatter outputs the issues in JSON."""
import json
from datetime import datetime

from ..vulnerabilities.vulnerability_helper import SanitisedVulnerability


def report(
    vulnerabilities,
    fileobj,
    print_sanitised,
):
    """
    Prints issues in JSON format.
    Args:
        vulnerabilities: list of vulnerabilities to report
        fileobj: The output file object, which may be sys.stdout
    """
    TZ_AGNOSTIC_FORMAT = "%Y-%m-%dT%H:%M:%SZ"
    time_string = datetime.utcnow().strftime(TZ_AGNOSTIC_FORMAT)

    machine_output = {
        'generated_at': time_string,
        'vulnerabilities': [
            vuln.as_dict() for vuln in vulnerabilities
            if print_sanitised or not isinstance(vuln, SanitisedVulnerability)
        ]
    }

    result = json.dumps(
        machine_output,
        indent=4
    )

    with fileobj:
        fileobj.write(result)