Source code for saltext.vcf.clients.vcfops_report

"""VCF Operations — report instances.

Report *definitions* live under ``/suite-api/api/reports/definitions``
but that path returns 400 without a query filter; the practical access
pattern is to list known instances (``GET /reports``) and generate new
ones (``POST /reports``).
"""

import requests

from saltext.vcf.utils import vcfops

_PATH = "/suite-api/api/reports"


def list_(opts, page=0, page_size=1000):
    return vcfops.api_get(opts, _PATH, params={"page": page, "pageSize": page_size})


def get(opts, report_id):
    return vcfops.api_get(opts, f"{_PATH}/{report_id}")


def get_or_none(opts, report_id):
    try:
        return get(opts, report_id)
    except requests.HTTPError as exc:
        if exc.response is not None and exc.response.status_code == 404:
            return None
        raise


[docs] def generate(opts, report_spec): """Trigger a report generation. *report_spec* example:: {"resourceId": "<uuid>", "reportDefinitionId": "<uuid>"} """ return vcfops.api_post(opts, _PATH, body=report_spec)
[docs] def download(opts, report_id, fmt="PDF"): """Stream a generated report. Returns raw bytes — caller writes to disk.""" session, host = vcfops._session(opts) resp = session.get( f"https://{host}{_PATH}/{report_id}/download", params={"format": fmt}, timeout=120, ) resp.raise_for_status() return resp.content
def delete(opts, report_id): return vcfops.api_delete(opts, f"{_PATH}/{report_id}")