Пример #1
0
def test_get_available_dates(event_types, expected_result,
                             access_token_builder, flowapi_url):
    """
    Test that queries can be run, and return the expected JSON result.
    """
    con = flowclient.Connection(
        url=flowapi_url,
        token=access_token_builder(["get_result&available_dates"]),
    )
    result = flowclient.get_available_dates(connection=con,
                                            event_types=event_types)
    assert expected_result == result
Пример #2
0
def get_available_dates(
    cdr_types: Optional[Sequence[str]] = None, ) -> List[pendulum.Date]:
    """
    Task to return a union of the dates for which data is available in FlowDB for the specified set of CDR types.

    Parameters
    ----------
    cdr_types : list of str, optional
        Subset of CDR types for which to find available dates.
        If not provided, the union of available dates for all CDR types will be returned.

    Returns
    -------
    list of pendulum.Date
        List of available dates, in chronological order
    """
    prefect.context.logger.info(
        f"Getting available dates from FlowAPI at '{prefect.config.flowapi_url}'."
    )
    conn = flowclient.connect(
        url=prefect.config.flowapi_url,
        token=environ["FLOWAPI_TOKEN"],
        ssl_certificate=getenv("SSL_CERTIFICATE_FILE"),
    )
    dates = flowclient.get_available_dates(connection=conn)
    prefect.context.logger.debug(f"Available dates: {dates}")
    if cdr_types is None:
        prefect.context.logger.debug(
            "No CDR types provided. Will return available dates for all CDR types."
        )
        cdr_types = dates.keys()
    else:
        prefect.context.logger.debug(
            f"Returning available dates for CDR types {cdr_types}.")
        unknown_cdr_types = set(cdr_types).difference(dates.keys())
        if unknown_cdr_types:
            warnings.warn(
                f"No data available for CDR types {unknown_cdr_types}.")
    dates_union = set.union(*[
        set(pendulum.parse(date, exact=True) for date in dates[cdr_type])
        for cdr_type in cdr_types if cdr_type in dates.keys()
    ])
    return sorted(list(dates_union))