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
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))