diff --git a/airflow/dags/download_parse_and_validate_gtfs.py b/airflow/dags/download_parse_and_validate_gtfs.py index b3844c164c..4992b3eeb5 100644 --- a/airflow/dags/download_parse_and_validate_gtfs.py +++ b/airflow/dags/download_parse_and_validate_gtfs.py @@ -17,29 +17,29 @@ from airflow.utils.trigger_rule import TriggerRule GTFS_SCHEDULE_FILENAMES = { - "agency": "agency.txt", - "areas": "areas.txt", - "attributions": "attributions.txt", - "calendar_dates": "calendar_dates.txt", - "calendar": "calendar.txt", - "fare_attributes": "fare_attributes.txt", - "fare_leg_rules": "fare_leg_rules.txt", - "fare_media": "fare_media.txt", - "fare_products": "fare_products.txt", - "fare_rules": "fare_rules.txt", - "fare_transfer_rules": "fare_transfer_rules.txt", - "feed_info": "feed_info.txt", - "frequencies": "frequencies.txt", - "levels": "levels.txt", - "pathways": "pathways.txt", - "routes": "routes.txt", - "shapes": "shapes.txt", - "stop_areas": "stop_areas.txt", - "stop_times": "stop_times.txt", - "stops": "stops.txt", - "transfers": "transfers.txt", - "translations": "translations.txt", - "trips": "trips.txt", + "agency.txt": "agency", + "areas.txt": "areas", + "attributions.txt": "attributions", + "calendar_dates.txt": "calendar_dates", + "calendar.txt": "calendar", + "fare_attributes.txt": "fare_attributes", + "fare_leg_rules.txt": "fare_leg_rules", + "fare_media.txt": "fare_media", + "fare_products.txt": "fare_products", + "fare_rules.txt": "fare_rules", + "fare_transfer_rules.txt": "fare_transfer_rules", + "feed_info.txt": "feed_info", + "frequencies.txt": "frequencies", + "levels.txt": "levels", + "pathways.txt": "pathways", + "routes.txt": "routes", + "shapes.txt": "shapes", + "stop_areas.txt": "stop_areas", + "stop_times.txt": "stop_times", + "stops.txt": "stops", + "transfers.txt": "transfers", + "translations.txt": "translations", + "trips.txt": "trips", } @@ -50,11 +50,13 @@ start_date=datetime(2025, 11, 1), catchup=False, tags=["gtfs"], + user_defined_macros={"basename": os.path.basename}, ): latest_only = LatestOnlyOperator(task_id="latest_only", depends_on_past=False) download_config = BigQueryToDownloadConfigOperator( task_id="bigquery_to_download_config", + retries=1, dataset_name="staging", table_name="int_transit_database__gtfs_datasets_dim", destination_bucket=os.getenv("CALITP_BUCKET__GTFS_DOWNLOAD_CONFIG"), @@ -63,6 +65,8 @@ schedule_download_configs = GCSDownloadConfigFilterOperator( task_id="download_config_filter", + limit=None, + retries=1, feed_type="schedule", source_bucket=os.getenv("CALITP_BUCKET__GTFS_DOWNLOAD_CONFIG"), source_path="gtfs_download_configs/dt={{ ds }}/ts={{ ts }}/configs.jsonl.gz", @@ -70,6 +74,7 @@ downloads = DownloadConfigToGCSOperator.partial( task_id="download_config_to_gcs", + retries=1, destination_bucket=os.getenv("CALITP_BUCKET__GTFS_SCHEDULE_RAW"), destination_path="schedule/dt={{ ds }}/ts={{ ts }}", results_path="download_schedule_feed_results/dt={{ ds }}/ts={{ ts }}", @@ -98,75 +103,61 @@ def create_validate_kwargs(download): ValidateGTFSToGCSOperator.partial( task_id="validate_gtfs_to_gcs", + retries=1, destination_bucket=os.getenv("CALITP_BUCKET__GTFS_SCHEDULE_VALIDATION_HOURLY"), source_bucket=os.getenv("CALITP_BUCKET__GTFS_SCHEDULE_RAW"), + map_index_template="{{ task.download_schedule_feed_results['config']['name'] }}", trigger_rule=TriggerRule.ALL_DONE, ).expand_kwargs(XComArg(downloads).map(create_validate_kwargs)) - for schedule_file_type, schedule_filename in GTFS_SCHEDULE_FILENAMES.items(): + def unzip_files_kwargs(download): + return { + "download_schedule_feed_results": download[ + "download_schedule_feed_results" + ], + "source_path": download["schedule_feed_path"], + "base64_url": download["base64_url"], + } - def create_unzip_kwargs(download): - return { - "download_schedule_feed_results": download[ - "download_schedule_feed_results" - ], - "source_path": download["schedule_feed_path"], - "base64_url": download["base64_url"], - "destination_path": os.path.join( - schedule_filename, - "dt={{ ds }}", - "ts={{ ts }}", - f"base64_url={download['base64_url']}", - schedule_filename, - ), - "results_path": os.path.join( - "unzipping_results", - "dt={{ ds }}", - "ts={{ ts }}", - f"{download['base64_url']}_{schedule_filename}.jsonl", - ), - } + unzipped_files = UnzipGTFSToGCSOperator.partial( + task_id="unzip_to_gcs", + retries=1, + filenames=list(GTFS_SCHEDULE_FILENAMES.keys()), + source_bucket=os.getenv("CALITP_BUCKET__GTFS_SCHEDULE_RAW"), + destination_bucket=os.getenv("CALITP_BUCKET__GTFS_SCHEDULE_UNZIPPED_HOURLY"), + destination_path_fragment="dt={{ ds }}/ts={{ ts }}/base64_url={{ task.base64_url }}", + results_path="unzipping_results/dt={{ ds }}/ts={{ ts }}/{{ task.base64_url }}.jsonl", + map_index_template="{{ task.download_schedule_feed_results['config']['name'] }}", + trigger_rule=TriggerRule.ALL_DONE, + ).expand_kwargs(downloads.output.map(unzip_files_kwargs)) - unzipped_files = UnzipGTFSToGCSOperator.partial( - task_id=f"unzip_{schedule_file_type}_to_gcs", - filename=schedule_filename, - source_bucket=os.getenv("CALITP_BUCKET__GTFS_SCHEDULE_RAW"), - destination_bucket=os.getenv( - "CALITP_BUCKET__GTFS_SCHEDULE_UNZIPPED_HOURLY" + def list_unzipped_files(unzipped_file): + return { + "unzip_results": unzipped_file["unzip_results"], + "source_path_fragment": os.path.join( + "dt={{ ds }}", + "ts={{ ts }}", + f"base64_url={unzipped_file['base64_url']}", ), - trigger_rule=TriggerRule.ALL_DONE, - ).expand_kwargs(XComArg(downloads).map(create_unzip_kwargs)) - - def create_parse_kwargs(unzipped_file): - return { - "unzip_results": unzipped_file["unzip_results"], - "source_path": os.path.join( - schedule_filename, - "dt={{ ds }}", - "ts={{ ts }}", - f"base64_url={unzipped_file['base64_url']}", - schedule_filename, - ), - "results_path": os.path.join( - f"{schedule_filename}_parsing_results", - "dt={{ ds }}", - "ts={{ ts }}", - f"{unzipped_file['base64_url']}_{schedule_filename}.jsonl", - ), - "destination_path": os.path.join( - schedule_file_type, - "dt={{ ds }}", - "ts={{ ts }}", - f"base64_url={unzipped_file['base64_url']}", - f"{schedule_file_type}.jsonl.gz", - ), - } + "results_path_fragment": os.path.join( + "dt={{ ds }}", + "ts={{ ts }}", + f"{unzipped_file['base64_url']}.jsonl", + ), + "destination_path_fragment": os.path.join( + "dt={{ ds }}", + "ts={{ ts }}", + f"base64_url={unzipped_file['base64_url']}", + ), + } - GTFSCSVToJSONLOperator.partial( - task_id=f"convert_{schedule_file_type}_to_jsonl", - source_bucket=os.getenv("CALITP_BUCKET__GTFS_SCHEDULE_UNZIPPED_HOURLY"), - destination_bucket=os.getenv("CALITP_BUCKET__GTFS_SCHEDULE_PARSED_HOURLY"), - trigger_rule=TriggerRule.ALL_DONE, - ).expand_kwargs(XComArg(unzipped_files).map(create_parse_kwargs)) + GTFSCSVToJSONLOperator.partial( + task_id="convert_to_jsonl", + retries=1, + source_bucket=os.getenv("CALITP_BUCKET__GTFS_SCHEDULE_UNZIPPED_HOURLY"), + destination_bucket=os.getenv("CALITP_BUCKET__GTFS_SCHEDULE_PARSED_HOURLY"), + map_index_template="{{ task.unzip_results['extract']['config']['name'] }}", + trigger_rule=TriggerRule.ALL_DONE, + ).expand_kwargs(XComArg(unzipped_files).map(list_unzipped_files)) latest_only >> download_config >> schedule_download_configs diff --git a/airflow/plugins/hooks/gtfs_unzip_hook.py b/airflow/plugins/hooks/gtfs_unzip_hook.py index 9fc4fdcbeb..2702e9e182 100644 --- a/airflow/plugins/hooks/gtfs_unzip_hook.py +++ b/airflow/plugins/hooks/gtfs_unzip_hook.py @@ -7,6 +7,30 @@ from airflow.hooks.base import BaseHook +class GTFSExtractedFile: + def __init__( + self, + current_date: pendulum.DateTime, + config: dict[str, str], + filename: str, + original_filename: str, + content: bytes, + ) -> None: + self.filename = filename + self.original_filename = original_filename + self.content = content + self.current_date = current_date + self.config = config + + def metadata(self) -> dict[str, str]: + return { + "filename": self.filename, + "original_filename": self.original_filename, + "ts": self.current_date.isoformat(), + "extract_config": self.config, + } + + class GTFSUnzipResult: def __init__( self, @@ -19,9 +43,7 @@ def __init__( self._md5hash = hashlib.md5() self._files = [] self._directories = [] - self._content_name = None - self._content_original_name = None - self._content = None + self._extracted_files = [] def valid(self) -> bool: if not self._directories: @@ -56,10 +78,16 @@ def add_directory(self, directory) -> None: def add_hash(self, content: bytes) -> None: self._md5hash.update(content) - def add_content(self, name: str, original_name: str, content: bytes) -> None: - self._content_name = name - self._content_original_name = original_name - self._content = content + def add_content(self, name: str, original_filename: str, content: bytes) -> None: + self._extracted_files.append( + GTFSExtractedFile( + filename=name, + original_filename=original_filename, + content=content, + config=self.extract_config(), + current_date=self.current_date, + ) + ) def files(self) -> list[str]: return sorted(self._files) @@ -67,23 +95,11 @@ def files(self) -> list[str]: def directories(self) -> list[str]: return sorted(self._directories) - def content(self) -> bytes: - return self._content - def md5hash(self) -> str: return self._md5hash.hexdigest() - def extracted_files(self) -> list[str]: - if self._content_name is None: - return [] - return [ - { - "filename": self._content_name, - "original_filename": self._content_original_name, - "ts": self.current_date.isoformat(), - "extract_config": self.extract_config(), - } - ] + def extracted_files(self) -> list[GTFSExtractedFile]: + return self._extracted_files def results(self) -> dict: return { @@ -93,7 +109,7 @@ def results(self) -> dict: "zipfile_extract_md5hash": self.md5hash(), "zipfile_files": self.files(), "zipfile_dirs": self.directories(), - "extracted_files": self.extracted_files(), + "extracted_files": [ef.metadata() for ef in self.extracted_files()], } @@ -105,7 +121,7 @@ class GTFSZip: def __init__(self, filename: str) -> None: self.filename = filename - def extract(self, path_to_extract: str, result: GTFSUnzipResult) -> None: + def extract(self, filenames: str, result: GTFSUnzipResult) -> None: with zipfile.ZipFile(self.filename, "r") as zip_file: for name in zip_file.namelist(): if name.startswith("__MACOSX"): @@ -119,24 +135,22 @@ def extract(self, path_to_extract: str, result: GTFSUnzipResult) -> None: with zip_file.open(file_path) as child_file: content = child_file.read() result.add_hash(content) - if ( - result.valid() - and os.path.basename(file_path) == path_to_extract - ): + filename = os.path.basename(file_path) + if result.valid() and filename in filenames: result.add_content( - name=path_to_extract, - original_name=file_path, + name=filename, + original_filename=file_path, content=content, ) class GTFSUnzipHook(BaseHook): - filename: str + filenames: list[str] current_date: pendulum.DateTime - def __init__(self, filename: str, current_date: pendulum.DateTime): + def __init__(self, filenames: list[str], current_date: pendulum.DateTime): super().__init__() - self.filename = filename + self.filenames = filenames self.current_date = current_date def run( @@ -149,7 +163,7 @@ def run( try: GTFSZip(filename=zipfile_path).extract( - path_to_extract=self.filename, result=result + filenames=self.filenames, result=result ) if not result.valid(): raise ValueError( diff --git a/airflow/plugins/hooks/gtfs_validator_hook.py b/airflow/plugins/hooks/gtfs_validator_hook.py index 0805ff8f8e..5dd571abc5 100644 --- a/airflow/plugins/hooks/gtfs_validator_hook.py +++ b/airflow/plugins/hooks/gtfs_validator_hook.py @@ -41,7 +41,9 @@ def metadata(self) -> dict: } def notices(self) -> list: - return [{"metadata": self.metadata(), **n} for n in self.report.get("notices")] + return [ + {"metadata": self.metadata(), **n} for n in self.report.get("notices", []) + ] def set_exception(self, exception: Exception) -> None: self._exception = exception diff --git a/airflow/plugins/operators/bigquery_to_download_config_operator.py b/airflow/plugins/operators/bigquery_to_download_config_operator.py index 24e4ba529c..246891b226 100644 --- a/airflow/plugins/operators/bigquery_to_download_config_operator.py +++ b/airflow/plugins/operators/bigquery_to_download_config_operator.py @@ -55,6 +55,19 @@ def resolve( } +class ActiveRowQuery: + def __init__(self, rows: list[dict], current_time: pendulum.DateTime): + self.rows = rows + self.current_time = current_time + + def resolve(self) -> list[dict]: + resolved = [] + for row in self.rows: + if row["_is_current"] and row["deprecated_date"] is None: + resolved.append(row) + return resolved + + class BigQueryToDownloadConfigOperator(BaseOperator): template_fields: Sequence[str] = ( "dataset_name", @@ -96,9 +109,9 @@ def download_config_rows(self, current_time: pendulum.DateTime) -> list: response = self.bigquery_hook().list_rows( dataset_id=self.dataset_name, table_id=self.table_name ) - active_rows = [ - r for r in response if r["_is_current"] and r["deprecated_date"] is None - ] + active_rows = ActiveRowQuery( + rows=list(response), current_time=current_time + ).resolve() mapped_rows = {row["key"]: row for row in active_rows} return [ DownloadConfigRow(row).resolve(current_time, mapped_rows) diff --git a/airflow/plugins/operators/download_config_to_gcs_operator.py b/airflow/plugins/operators/download_config_to_gcs_operator.py index e3e0a1bdb6..779fb2d14e 100644 --- a/airflow/plugins/operators/download_config_to_gcs_operator.py +++ b/airflow/plugins/operators/download_config_to_gcs_operator.py @@ -1,6 +1,7 @@ import json import logging from base64 import urlsafe_b64encode +from email.message import Message from typing import Sequence import pendulum @@ -54,11 +55,13 @@ def mime_type(self) -> str: return self.response_headers().get("Content-Type", "application/octet-stream") def filename(self) -> str: - return ( - self.response_headers() - .get("Content-Disposition", "filename=gtfs.zip") - .split("filename=")[1] + content_disposition = self.response_headers().get( + "Content-Disposition", "attachment" ) + msg = Message() + msg["content-disposition"] = content_disposition + filename = msg.get_filename() + return filename if filename else "gtfs.zip" def extract(self, current_time: pendulum.DateTime) -> dict: return { diff --git a/airflow/plugins/operators/gtfs_csv_to_jsonl_operator.py b/airflow/plugins/operators/gtfs_csv_to_jsonl_operator.py index 48507b90e9..e28c4163f9 100644 --- a/airflow/plugins/operators/gtfs_csv_to_jsonl_operator.py +++ b/airflow/plugins/operators/gtfs_csv_to_jsonl_operator.py @@ -12,12 +12,25 @@ class GTFSCSVResults: - def __init__(self, fieldnames: list[str], dialect: str) -> None: + def __init__( + self, + current_date: pendulum.DateTime, + unzip_results: dict, + filename: str, + fieldnames: list[str], + dialect: str, + ) -> None: + self.current_date = current_date + self.filename = filename self.fieldnames = fieldnames self.dialect = dialect + self.unzip_results = unzip_results self.lines = [] self._exception = None + def filetype(self) -> str: + return os.path.splitext(self.filename)[0] + def set_exception(self, exception: Exception) -> None: self._exception = exception @@ -32,35 +45,37 @@ def jsonl(self) -> list[str]: [json.dumps(line, separators=(",", ":")) for line in self.lines] ) + def valid(self) -> bool: + return len(self.lines) > 0 + def success(self) -> bool: return self._exception is None - def report( - self, - filename: str, - filetype: str, - unzip_results: dict, - current_date: pendulum.DateTime, - ) -> dict: + def report(self) -> dict: return { "exception": self.exception(), - "feed_file": unzip_results.get("extracted_files")[0], + "feed_file": self.unzip_results.get("extracted_files")[0], "fields": self.fieldnames, - "parsed_file": { - "csv_dialect": self.dialect, - "extract_config": unzip_results.get("extract").get("config"), - "filename": filename, - "gtfs_filename": filetype, - "num_lines": len(self.lines), - "ts": current_date.isoformat(), - }, + "parsed_file": self.metadata(), "success": self.success(), } + def metadata(self) -> dict: + return { + "csv_dialect": self.dialect, + "extract_config": self.unzip_results.get("extract").get("config"), + "filename": f"{self.filetype()}.jsonl.gz", + "gtfs_filename": self.filetype(), + "num_lines": len(self.lines), + "ts": self.current_date.isoformat(), + } + class GTFSCSVConverter: - def __init__(self, csv_data: bytes) -> None: + def __init__(self, filename: str, csv_data: bytes, unzip_results: dict) -> None: + self.filename = filename self.csv_data = csv_data + self.unzip_results = unzip_results def reader(self) -> csv.DictReader: comma_reader = csv.DictReader( @@ -75,9 +90,15 @@ def reader(self) -> csv.DictReader: return tab_reader return comma_reader - def convert(self) -> GTFSCSVResults: + def convert(self, current_date: pendulum.DateTime) -> GTFSCSVResults: reader = self.reader() - results = GTFSCSVResults(fieldnames=reader.fieldnames, dialect=reader.dialect) + results = GTFSCSVResults( + current_date=current_date, + filename=self.filename, + fieldnames=reader.fieldnames, + dialect=reader.dialect, + unzip_results=self.unzip_results, + ) try: for row in reader: results.append(row) @@ -90,10 +111,10 @@ class GTFSCSVToJSONLOperator(BaseOperator): template_fields: Sequence[str] = ( "unzip_results", "source_bucket", - "source_path", + "source_path_fragment", "destination_bucket", - "results_path", - "destination_path", + "results_path_fragment", + "destination_path_fragment", "gcp_conn_id", ) @@ -101,10 +122,10 @@ def __init__( self, unzip_results: dict, source_bucket: str, - source_path: str, + source_path_fragment: str, destination_bucket: str, - destination_path: str, - results_path: str, + destination_path_fragment: str, + results_path_fragment: str, gcp_conn_id: str = "google_cloud_default", **kwargs, ) -> None: @@ -113,10 +134,10 @@ def __init__( self._gcs_hook = None self.unzip_results = unzip_results self.source_bucket = source_bucket - self.source_path = source_path + self.source_path_fragment = source_path_fragment self.destination_bucket = destination_bucket - self.results_path = results_path - self.destination_path = destination_path + self.results_path_fragment = results_path_fragment + self.destination_path_fragment = destination_path_fragment self.gcp_conn_id = gcp_conn_id def gcs_hook(self) -> GCSHook: @@ -131,52 +152,77 @@ def source_name(self) -> str: def source_filename(self) -> str: return os.path.basename(self.source_path) - def source(self) -> bytes: - return self.gcs_hook().download( - bucket_name=self.source_name(), - object_name=self.source_path, - ) - - def converter(self) -> GTFSCSVConverter: - return GTFSCSVConverter(csv_data=self.source().decode()) + def converters(self) -> list[GTFSCSVConverter]: + output = [] + for extracted_file in self.unzip_results["extracted_files"]: + source = self.gcs_hook().download( + bucket_name=self.source_name(), + object_name=os.path.join( + extracted_file["filename"], + self.source_path_fragment, + extracted_file["filename"], + ), + ) + output.append( + GTFSCSVConverter( + filename=extracted_file["filename"], + csv_data=source.decode(), + unzip_results=self.unzip_results, + ) + ) + return output def execute(self, context: Context) -> str: dag_run: DagRun = context["dag_run"] - result = self.converter().convert() - report = result.report( - filename=os.path.basename(self.destination_path), - filetype=self.destination_path.split("/")[0], - unzip_results=self.unzip_results, - current_date=dag_run.logical_date, - ) - self.gcs_hook().upload( - bucket_name=self.destination_name(), - object_name=self.destination_path, - data=result.jsonl(), - mime_type="application/jsonl", - gzip=True, - metadata={ - "PARTITIONED_ARTIFACT_METADATA": json.dumps(report["parsed_file"]) - }, - ) - self.gcs_hook().upload( - bucket_name=self.destination_name(), - object_name=self.results_path, - data=json.dumps(report, separators=(",", ":")), - mime_type="application/jsonl", - gzip=False, - metadata={ - "PARTITIONED_ARTIFACT_METADATA": json.dumps( - { - "filename": "results.jsonl", - "ts": dag_run.logical_date.isoformat(), - } + output = [] + for converter in self.converters(): + results = converter.convert(current_date=dag_run.logical_date) + if results.valid(): + self.gcs_hook().upload( + bucket_name=self.destination_name(), + object_name=os.path.join( + results.filetype(), + self.destination_path_fragment, + f"{results.filetype()}.jsonl.gz", + ), + data=results.jsonl(), + mime_type="application/jsonl", + gzip=True, + metadata={ + "PARTITIONED_ARTIFACT_METADATA": json.dumps(results.metadata()) + }, ) - }, - ) - return { - "destination_path": os.path.join( - self.destination_bucket, self.destination_path - ), - "results_path": os.path.join(self.destination_bucket, self.results_path), - } + + self.gcs_hook().upload( + bucket_name=self.destination_name(), + object_name=os.path.join( + f"{results.filename}_parsing_results", self.results_path_fragment + ), + data=json.dumps(results.report(), separators=(",", ":")), + mime_type="application/jsonl", + gzip=False, + metadata={ + "PARTITIONED_ARTIFACT_METADATA": json.dumps( + { + "filename": "results.jsonl", + "ts": dag_run.logical_date.isoformat(), + } + ) + }, + ) + + output.append( + { + "destination_path": os.path.join( + results.filetype(), + self.destination_path_fragment, + f"{results.filetype()}.jsonl.gz", + ), + "results_path": os.path.join( + f"{results.filename}_parsing_results", + self.results_path_fragment, + ), + } + ) + + return output diff --git a/airflow/plugins/operators/unzip_gtfs_to_gcs_operator.py b/airflow/plugins/operators/unzip_gtfs_to_gcs_operator.py index 181a97635d..ca2b6fd19f 100644 --- a/airflow/plugins/operators/unzip_gtfs_to_gcs_operator.py +++ b/airflow/plugins/operators/unzip_gtfs_to_gcs_operator.py @@ -6,7 +6,6 @@ import pendulum from hooks.gtfs_unzip_hook import GTFSUnzipHook -from airflow.exceptions import AirflowSkipException from airflow.models import BaseOperator, DagRun from airflow.models.taskinstance import Context from airflow.providers.google.cloud.hooks.gcs import GCSHook @@ -15,12 +14,12 @@ class UnzipGTFSToGCSOperator(BaseOperator): template_fields: Sequence[str] = ( "download_schedule_feed_results", - "filename", + "filenames", "base64_url", "source_bucket", "source_path", "destination_bucket", - "destination_path", + "destination_path_fragment", "results_path", "gcp_conn_id", ) @@ -28,12 +27,12 @@ class UnzipGTFSToGCSOperator(BaseOperator): def __init__( self, download_schedule_feed_results: dict, - filename: str, + filenames: str, base64_url: str, source_bucket: str, source_path: str, destination_bucket: str, - destination_path: str, + destination_path_fragment: str, results_path: str, gcp_conn_id: str = "google_cloud_default", **kwargs, @@ -42,12 +41,12 @@ def __init__( self._gcs_hook = None self.download_schedule_feed_results = download_schedule_feed_results - self.filename = filename + self.filenames = filenames self.base64_url = base64_url self.source_bucket = source_bucket self.source_path = source_path self.destination_bucket = destination_bucket - self.destination_path = destination_path + self.destination_path_fragment = destination_path_fragment self.results_path = results_path self.gcp_conn_id = gcp_conn_id @@ -60,39 +59,49 @@ def destination_name(self) -> str: def source_name(self) -> str: return self.source_bucket.replace("gs://", "") - def unzip_hook(self, date: pendulum.DateTime) -> GTFSUnzipHook: - return GTFSUnzipHook(filename=self.filename, current_date=date) + def unzip_hook( + self, filenames: list[str], date: pendulum.DateTime + ) -> GTFSUnzipHook: + return GTFSUnzipHook(filenames=filenames, current_date=date) def source_filename(self) -> str: return os.path.basename(self.source_path) def execute(self, context: Context) -> str: dag_run: DagRun = context["dag_run"] + with tempfile.TemporaryDirectory() as tmp_dir: local_source_path = self.gcs_hook().download( bucket_name=self.source_name(), object_name=self.source_path, filename=os.path.join(tmp_dir, self.source_filename()), ) - validator_result = self.unzip_hook(date=dag_run.logical_date).run( + + validator_result = self.unzip_hook( + filenames=self.filenames, date=dag_run.logical_date + ).run( zipfile_path=local_source_path, download_schedule_feed_results=self.download_schedule_feed_results, ) - if validator_result.content() is None: - raise AirflowSkipException + + for file in validator_result.extracted_files(): + self.gcs_hook().upload( + bucket_name=self.destination_name(), + object_name=os.path.join( + file.filename, + self.destination_path_fragment, + file.filename, + ), + data=file.content, + mime_type="text/csv", + gzip=False, + metadata={ + "PARTITIONED_ARTIFACT_METADATA": json.dumps(file.metadata()) + }, + ) + report = validator_result.results() - self.gcs_hook().upload( - bucket_name=self.destination_name(), - object_name=self.destination_path, - data=validator_result.content(), - mime_type="text/csv", - gzip=False, - metadata={ - "PARTITIONED_ARTIFACT_METADATA": json.dumps( - validator_result.extracted_files()[0] - ) - }, - ) + self.gcs_hook().upload( bucket_name=self.destination_name(), object_name=self.results_path, @@ -108,11 +117,9 @@ def execute(self, context: Context) -> str: ) }, ) + return { "base64_url": self.base64_url, - "destination_path": os.path.join( - self.destination_bucket, self.destination_path - ), - "results_path": os.path.join(self.destination_bucket, self.results_path), + "results_path": self.results_path, "unzip_results": report, } diff --git a/airflow/plugins/operators/validate_gtfs_to_gcs_operator.py b/airflow/plugins/operators/validate_gtfs_to_gcs_operator.py index 2937c3aae2..f966950470 100644 --- a/airflow/plugins/operators/validate_gtfs_to_gcs_operator.py +++ b/airflow/plugins/operators/validate_gtfs_to_gcs_operator.py @@ -76,23 +76,26 @@ def execute(self, context: Context) -> str: full_destination_path = ( f"{self.destination_path}/{validator_result.filename()}" ) - self.gcs_hook().upload( - bucket_name=self.destination_name(), - object_name=full_destination_path, - data="\n".join( - [ - json.dumps(n, separators=(",", ":")) - for n in validator_result.notices() - ] - ), - mime_type="application/jsonl", - gzip=True, - metadata={ - "PARTITIONED_ARTIFACT_METADATA": json.dumps( - validator_result.validation() - ) - }, - ) + + if validator_result.notices(): + self.gcs_hook().upload( + bucket_name=self.destination_name(), + object_name=full_destination_path, + data="\n".join( + [ + json.dumps(n, separators=(",", ":")) + for n in validator_result.notices() + ] + ), + mime_type="application/jsonl", + gzip=True, + metadata={ + "PARTITIONED_ARTIFACT_METADATA": json.dumps( + validator_result.validation() + ) + }, + ) + self.gcs_hook().upload( bucket_name=self.destination_name(), object_name=self.results_path, @@ -108,6 +111,7 @@ def execute(self, context: Context) -> str: ) }, ) + return { "destination_path": os.path.join( self.destination_bucket, full_destination_path diff --git a/airflow/tests/fixtures/bad-gtfs.zip b/airflow/tests/fixtures/bad-gtfs.zip new file mode 100644 index 0000000000..e69de29bb2 diff --git a/airflow/tests/fixtures/schedule-27.zip b/airflow/tests/fixtures/schedule-27.zip new file mode 100644 index 0000000000..cf784e62ea Binary files /dev/null and b/airflow/tests/fixtures/schedule-27.zip differ diff --git a/airflow/tests/hooks/test_gtfs_unzip_hook.py b/airflow/tests/hooks/test_gtfs_unzip_hook.py index 33056f9dc0..a3b502ad38 100644 --- a/airflow/tests/hooks/test_gtfs_unzip_hook.py +++ b/airflow/tests/hooks/test_gtfs_unzip_hook.py @@ -94,7 +94,13 @@ def failing_schedule_path(self) -> str: @pytest.fixture def hook(self, date: pendulum.DateTime) -> GTFSUnzipHook: - return GTFSUnzipHook(filename="agency.txt", current_date=date) + return GTFSUnzipHook( + filenames=["agency.txt", "calendar.txt"], current_date=date + ) + + @pytest.fixture + def areas_hook(self, date: pendulum.DateTime) -> GTFSUnzipHook: + return GTFSUnzipHook(filenames=["areas.txt"], current_date=date) def test_run( self, @@ -144,7 +150,22 @@ def test_run( "auth_headers": {}, "computed": False, }, - } + }, + { + "ts": "2025-11-15T00:00:00+00:00", + "filename": "calendar.txt", + "original_filename": "calendar.txt", + "extract_config": { + "extracted_at": "2025-06-01T00:00:00+00:00", + "name": "Santa Ynez Mecatran Schedule", + "url": "http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0", + "feed_type": "schedule", + "schedule_url_for_validation": None, + "auth_query_params": {}, + "auth_headers": {}, + "computed": False, + }, + }, ], "zipfile_dirs": [], "zipfile_extract_md5hash": "4f72c84bd3f053ddb929289fa2de7879", @@ -212,7 +233,22 @@ def test_success_macos_directory( "auth_headers": {}, "computed": False, }, - } + }, + { + "ts": "2025-11-15T00:00:00+00:00", + "filename": "calendar.txt", + "original_filename": "calendar.txt", + "extract_config": { + "extracted_at": "2025-06-01T00:00:00+00:00", + "name": "Santa Ynez Mecatran Schedule", + "url": "http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0", + "feed_type": "schedule", + "schedule_url_for_validation": None, + "auth_query_params": {}, + "auth_headers": {}, + "computed": False, + }, + }, ], "zipfile_dirs": [], "zipfile_extract_md5hash": "1c528b720355ce5ae47bacbc2d7783b6", @@ -277,7 +313,22 @@ def test_nested_macos_directory( "auth_headers": {}, "computed": False, }, - } + }, + { + "ts": "2025-11-15T00:00:00+00:00", + "filename": "calendar.txt", + "original_filename": "HumboldtTransitAuthorityDialARideFlex/calendar.txt", + "extract_config": { + "extracted_at": "2025-06-01T00:00:00+00:00", + "name": "Santa Ynez Mecatran Schedule", + "url": "http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0", + "feed_type": "schedule", + "schedule_url_for_validation": None, + "auth_query_params": {}, + "auth_headers": {}, + "computed": False, + }, + }, ], "zipfile_dirs": ["HumboldtTransitAuthorityDialARideFlex/"], "zipfile_extract_md5hash": "3153abcb9b63490c5b712657e1860607", @@ -382,3 +433,55 @@ def test_failing_directory( "nested/README.md", ], } + + def test_no_txt_file( + self, + areas_hook: GTFSUnzipHook, + fixture_schedule_path: str, + download_schedule_feed_results: dict, + ): + result = areas_hook.run( + zipfile_path=fixture_schedule_path, + download_schedule_feed_results=download_schedule_feed_results, + ) + assert result.results() == { + "success": True, + "exception": None, + "extract": { + "filename": "gtfs.zip", + "ts": "2025-06-03T00:00:00+00:00", + "config": { + "extracted_at": "2025-06-01T00:00:00+00:00", + "name": "Santa Ynez Mecatran Schedule", + "url": "http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0", + "feed_type": "schedule", + "schedule_url_for_validation": None, + "auth_query_params": {}, + "auth_headers": {}, + "computed": False, + }, + "response_code": 200, + "response_headers": { + "Content-Type": "application/zip", + "Content-Disposition": "attachment; filename=gtfs.zip", + }, + "reconstructed": False, + }, + "extracted_files": [], + "zipfile_dirs": [], + "zipfile_extract_md5hash": "4f72c84bd3f053ddb929289fa2de7879", + "zipfile_files": [ + "agency.txt", + "calendar.txt", + "calendar_dates.txt", + "fare_attributes.txt", + "feed_info.txt", + "route_directions.txt", + "routes.txt", + "shapes.txt", + "stop_times.txt", + "stops.txt", + "transfers.txt", + "trips.txt", + ], + } diff --git a/airflow/tests/hooks/test_gtfs_validator_hook.py b/airflow/tests/hooks/test_gtfs_validator_hook.py index 3db4ec2665..a261a473cd 100644 --- a/airflow/tests/hooks/test_gtfs_validator_hook.py +++ b/airflow/tests/hooks/test_gtfs_validator_hook.py @@ -6,44 +6,6 @@ class TestGTFSValidatorHook: - @pytest.fixture - def download_schedule_feed_results(self) -> dict: - return { - "backfilled": False, - "config": { - "auth_headers": {}, - "auth_query_params": {}, - "computed": False, - "extracted_at": "2025-11-14T02:00:00+00:00", - "feed_type": "schedule", - "name": "Santa Ynez Mecatran Schedule", - "schedule_url_for_validation": None, - "url": "http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0", - }, - "exception": None, - "extract": { - "filename": "gtfs.zip", - "ts": "2025-06-03T00:00:00+00:00", - "config": { - "auth_headers": {}, - "auth_query_params": {}, - "computed": False, - "feed_type": "schedule", - "name": "Santa Ynez Mecatran Schedule", - "schedule_url_for_validation": None, - "url": "http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0", - "extracted_at": "2025-06-01T00:00:00+00:00", - }, - "response_code": 200, - "response_headers": { - "Content-Type": "application/zip", - "Content-Disposition": "attachment; filename=gtfs.zip", - }, - "reconstructed": False, - }, - "success": True, - } - @pytest.fixture def date(self) -> pendulum.DateTime: return pendulum.datetime(2025, 11, 15) @@ -61,14 +23,6 @@ def jar_path(self) -> str: ) ) - @pytest.fixture - def fixture_schedule_path(self) -> str: - return os.path.normpath( - os.path.join( - os.path.dirname(os.path.realpath(__file__)), "../fixtures/schedule.zip" - ) - ) - def test_validator_5_0_0(self): assert ( GTFSValidatorHook(date=pendulum.datetime(2025, 11, 15)).version().number @@ -110,12 +64,51 @@ def test_validator_path(self, hook: GTFSValidatorHook, jar_path: str): jar_path, "gtfs-validator-5.0.0-cli.jar" ) - def test_run( + def test_run_with_unknown_file( self, hook: GTFSValidatorHook, - fixture_schedule_path: str, - download_schedule_feed_results: dict, ): + fixture_schedule_path = os.path.normpath( + os.path.join( + os.path.dirname(os.path.realpath(__file__)), "../fixtures/schedule.zip" + ) + ) + download_schedule_feed_results = { + "backfilled": False, + "config": { + "auth_headers": {}, + "auth_query_params": {}, + "computed": False, + "extracted_at": "2025-11-14T02:00:00+00:00", + "feed_type": "schedule", + "name": "Santa Ynez Mecatran Schedule", + "schedule_url_for_validation": None, + "url": "http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0", + }, + "exception": None, + "extract": { + "filename": "gtfs.zip", + "ts": "2025-06-03T00:00:00+00:00", + "config": { + "auth_headers": {}, + "auth_query_params": {}, + "computed": False, + "feed_type": "schedule", + "name": "Santa Ynez Mecatran Schedule", + "schedule_url_for_validation": None, + "url": "http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0", + "extracted_at": "2025-06-01T00:00:00+00:00", + }, + "response_code": 200, + "response_headers": { + "Content-Type": "application/zip", + "Content-Disposition": "attachment; filename=gtfs.zip", + }, + "reconstructed": False, + }, + "success": True, + } + result = hook.run( filename=fixture_schedule_path, download_schedule_feed_results=download_schedule_feed_results, @@ -180,3 +173,190 @@ def test_run( "validator_version": "v5.0.0", }, } + + def test_run_with_one_empty_file( + self, + hook: GTFSValidatorHook, + ): + fixture_schedule_path = os.path.normpath( + os.path.join( + os.path.dirname(os.path.realpath(__file__)), + "../fixtures/schedule-27.zip", + ) + ) + download_schedule_feed_results = { + "backfilled": False, + "config": { + "auth_headers": {}, + "auth_query_params": {}, + "computed": False, + "extracted_at": "2025-11-12T02:00:00+00:00", + "feed_type": "schedule", + "name": "Fric and Frac Schedule", + "schedule_url_for_validation": None, + "url": "https://www.ips-systems.com/GTFS/Schedule/27", + }, + "exception": None, + "extract": { + "filename": "schedule-27.zip", + "ts": "2025-11-13T03:02:04.189504+00:00", + "config": { + "auth_headers": {}, + "auth_query_params": {}, + "computed": False, + "extracted_at": "2025-11-12T02:00:00+00:00", + "feed_type": "schedule", + "name": "Fric and Frac Schedule", + "schedule_url_for_validation": None, + "url": "https://www.ips-systems.com/GTFS/Schedule/27", + }, + "response_code": 200, + "response_headers": { + "Content-Type": "application/zip", + "Content-Disposition": "attachment; filename=schedule-27.zip", + }, + "reconstructed": False, + }, + "success": True, + } + + result = hook.run( + filename=fixture_schedule_path, + download_schedule_feed_results=download_schedule_feed_results, + ) + assert len(result.notices()) == 0 + assert result.results() == { + "success": True, + "exception": None, + "extract": { + "filename": "schedule-27.zip", + "ts": "2025-11-13T03:02:04.189504+00:00", + "config": { + "auth_headers": {}, + "auth_query_params": {}, + "computed": False, + "extracted_at": "2025-11-12T02:00:00+00:00", + "feed_type": "schedule", + "name": "Fric and Frac Schedule", + "schedule_url_for_validation": None, + "url": "https://www.ips-systems.com/GTFS/Schedule/27", + }, + "response_code": 200, + "response_headers": { + "Content-Type": "application/zip", + "Content-Disposition": "attachment; filename=schedule-27.zip", + }, + "reconstructed": False, + }, + "validation": { + "filename": "validation_notices_v5-0-0.jsonl.gz", + "ts": "2025-11-15T00:00:00+00:00", + "extract_config": { + "auth_headers": {}, + "auth_query_params": {}, + "computed": False, + "extracted_at": "2025-11-12T02:00:00+00:00", + "feed_type": "schedule", + "name": "Fric and Frac Schedule", + "schedule_url_for_validation": None, + "url": "https://www.ips-systems.com/GTFS/Schedule/27", + }, + "system_errors": {"notices": []}, + "validator_version": "v5.0.0", + }, + } + + def test_run_unsupported_file( + self, + hook: GTFSValidatorHook, + ): + fixture_schedule_path = os.path.normpath( + os.path.join( + os.path.dirname(os.path.realpath(__file__)), + "../fixtures/bad-gtfs.zip", + ) + ) + + download_schedule_feed_results = { + "backfilled": False, + "config": { + "auth_headers": {}, + "auth_query_params": {}, + "computed": False, + "extracted_at": "2025-12-07T00:00:00+00:00", + "feed_type": "schedule", + "name": "San Joaquin Schedule", + "schedule_url_for_validation": None, + "url": "http://sanjoaquinrtd.com/RTD-GTFS/RTD-GTFS.zip", + }, + "exception": None, + "extract": { + "config": { + "auth_headers": {}, + "auth_query_params": {}, + "computed": False, + "extracted_at": "2025-12-07T00:00:00+00:00", + "feed_type": "schedule", + "name": "San Joaquin Schedule", + "schedule_url_for_validation": None, + "url": "http://sanjoaquinrtd.com/RTD-GTFS/RTD-GTFS.zip", + }, + "filename": "gtfs.zip", + "reconstructed": False, + "response_code": 200, + "response_headers": { + "Content-Type": "application/zip", + "Content-Disposition": "attachment; filename=gtfs.zip", + }, + "ts": "2025-12-07T00:00:00+00:00", + }, + "success": True, + } + + result = hook.run( + filename=fixture_schedule_path, + download_schedule_feed_results=download_schedule_feed_results, + ) + assert len(result.notices()) == 0 + assert "returned non-zero exit status 255" in result.results()["exception"] + + partial_results = { + "success": False, + "extract": { + "filename": "gtfs.zip", + "ts": "2025-12-07T00:00:00+00:00", + "config": { + "auth_headers": {}, + "auth_query_params": {}, + "computed": False, + "extracted_at": "2025-12-07T00:00:00+00:00", + "feed_type": "schedule", + "name": "San Joaquin Schedule", + "schedule_url_for_validation": None, + "url": "http://sanjoaquinrtd.com/RTD-GTFS/RTD-GTFS.zip", + }, + "response_code": 200, + "response_headers": { + "Content-Type": "application/zip", + "Content-Disposition": "attachment; filename=gtfs.zip", + }, + "reconstructed": False, + }, + "validation": { + "filename": "validation_notices_v5-0-0.jsonl.gz", + "ts": "2025-11-15T00:00:00+00:00", + "extract_config": { + "auth_headers": {}, + "auth_query_params": {}, + "computed": False, + "extracted_at": "2025-12-07T00:00:00+00:00", + "feed_type": "schedule", + "name": "San Joaquin Schedule", + "schedule_url_for_validation": None, + "url": "http://sanjoaquinrtd.com/RTD-GTFS/RTD-GTFS.zip", + }, + "system_errors": {}, + "validator_version": "v5.0.0", + }, + } + assert partial_results.items() <= result.results().items() diff --git a/airflow/tests/operators/cassettes/test_gtfs_csv_to_jsonl_operator/TestGTFSCSVToJSONLOperator.test_execute.yaml b/airflow/tests/operators/cassettes/test_gtfs_csv_to_jsonl_operator/TestGTFSCSVToJSONLOperator.test_execute.yaml index 1396747771..3c3b3148e4 100644 --- a/airflow/tests/operators/cassettes/test_gtfs_csv_to_jsonl_operator/TestGTFSCSVToJSONLOperator.test_execute.yaml +++ b/airflow/tests/operators/cassettes/test_gtfs_csv_to_jsonl_operator/TestGTFSCSVToJSONLOperator.test_execute.yaml @@ -9,10 +9,10 @@ interactions: Connection: - keep-alive User-Agent: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 X-Goog-API-Client: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 - gccl-invocation-id/784bae7b-ab8c-405a-9a63-c3713d682d5d + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/6bf83dbc-abd8-4800-9fbf-2f7be2da6518 accept-encoding: - gzip content-type: @@ -39,13 +39,13 @@ interactions: Content-Type: - text/csv Date: - - Tue, 25 Nov 2025 18:39:19 GMT + - Sat, 06 Dec 2025 00:19:23 GMT ETag: - - CNy0vpDxjZEDEAE= + - CIebxanQp5EDEAE= Expires: - Mon, 01 Jan 1990 00:00:00 GMT Last-Modified: - - Tue, 25 Nov 2025 18:01:35 GMT + - Fri, 05 Dec 2025 23:44:02 GMT Pragma: - no-cache Server: @@ -54,9 +54,9 @@ interactions: - Origin - X-Origin X-GUploader-UploadID: - - AOCedOEIeRH5bAAU32ucm8hf288yTm-Qm_-bOrchPMG9zPxl2Hs_NwevN3jNghgg1faloZmjew9yvg + - AOCedOENyWDPqGlDGcPZ9NszoEFwQRcUlxGxNYxzZudgPJlk5Oofosv66gDI_pISU2uIxeIZfz6UJpcfUn-v X-Goog-Generation: - - '1764093695335004' + - '1764978242702727' X-Goog-Hash: - crc32c=e6O0zg==,md5=aqpn1jk7QQDHHuToKpUZKA== X-Goog-Metageneration: @@ -72,7 +72,7 @@ interactions: message: OK - request: body: !!binary | - LS09PT09PT09PT09PT09PT0xNDc0NjE4NTU1MjQ1MDMyNDI1PT0NCmNvbnRlbnQtdHlwZTogYXBw + LS09PT09PT09PT09PT09PT0xNzg1ODQyNDM4Mjk4MTIwOTUzPT0NCmNvbnRlbnQtdHlwZTogYXBw bGljYXRpb24vanNvbjsgY2hhcnNldD1VVEYtOA0KDQp7Im5hbWUiOiAiYWdlbmN5L2R0PTIwMjUt MDYtMDIvdHM9MjAyNS0wNi0wMlQwMDowMDowMCswMDowMC9iYXNlNjRfdXJsPWFIUjBjRG92TDJG d2NDNXRaV05oZEhKaGJpNWpiMjB2ZFhKaUwzZHpMMlpsWldRdll6SnNNRnBVTVhwbFdGb3dUekpP @@ -89,13 +89,13 @@ interactions: LCBcImF1dGhfcXVlcnlfcGFyYW1zXCI6IHt9LCBcImF1dGhfaGVhZGVyc1wiOiB7fSwgXCJjb21w dXRlZFwiOiBmYWxzZX0sIFwiZmlsZW5hbWVcIjogXCJhZ2VuY3kuanNvbmwuZ3pcIiwgXCJndGZz X2ZpbGVuYW1lXCI6IFwiYWdlbmN5XCIsIFwibnVtX2xpbmVzXCI6IDEsIFwidHNcIjogXCIyMDI1 - LTA2LTAyVDAwOjAwOjAwKzAwOjAwXCJ9In19DQotLT09PT09PT09PT09PT09PTE0NzQ2MTg1NTUy - NDUwMzI0MjU9PQ0KY29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9qc29ubA0KDQofiwgA1/claQL/ + LTA2LTAyVDAwOjAwOjAwKzAwOjAwXCJ9In19DQotLT09PT09PT09PT09PT09PTE3ODU4NDI0Mzgy + OTgxMjA5NTM9PQ0KY29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9qc29ubA0KDQofiwgAi3YzaQL/ fZDLCsIwEEV/pWRtjOlDanduXLlTBFdlrGMbSKaSpJZW/HdbBSsIbu89nDvMneVaEebUmBNalskZ gxKp6HJ1ZhmTMpTxIpLsExMYHIodkIfgSNgHB9Aau2BvgZzyE9lYPYCV91eXCdG27dx1Nz8vaiPi dCVeBj4a+NvAfwxeGexrGvfWBq0qQGxrl6+pRI1u4q7VG0oXCV+mKU/iJJxaDVQOJdIUXcDiv/ui - ZSI2A/O1gQbUyH+tWmXAduOX2OMJSPMETUgBAAANCi0tPT09PT09PT09PT09PT09MTQ3NDYxODU1 - NTI0NTAzMjQyNT09LS0= + ZSI2A/O1gQbUyH+tWmXAduOX2OMJSPMETUgBAAANCi0tPT09PT09PT09PT09PT09MTc4NTg0MjQz + ODI5ODEyMDk1Mz09LS0= headers: Accept: - application/json @@ -108,14 +108,14 @@ interactions: Content-Length: - '1325' User-Agent: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 X-Goog-API-Client: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 - gccl-invocation-id/fb4cb117-5837-449e-bb70-cda6ff715c94 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/3b758527-84db-4f92-9e07-62f6352b3f10 content-type: - !!binary | - bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT0xNDc0NjE4NTU1MjQ1 - MDMyNDI1PT0i + bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT0xNzg1ODQyNDM4Mjk4 + MTIwOTUzPT0i x-goog-user-project: - cal-itp-data-infra-staging x-upload-content-type: @@ -124,17 +124,17 @@ interactions: uri: https://storage.googleapis.com/upload/storage/v1/b/calitp-staging-pytest/o?uploadType=multipart response: body: - string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/agency/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/agency.jsonl.gz/1764095959822562\",\n + string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/agency/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/agency.jsonl.gz/1764980364572886\",\n \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/agency%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fagency.jsonl.gz\",\n - \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/agency%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fagency.jsonl.gz?generation=1764095959822562&alt=media\",\n + \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/agency%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fagency.jsonl.gz?generation=1764980364572886&alt=media\",\n \ \"name\": \"agency/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/agency.jsonl.gz\",\n - \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764095959822562\",\n + \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764980364572886\",\n \ \"metageneration\": \"1\",\n \"contentType\": \"application/jsonl\",\n - \ \"storageClass\": \"STANDARD\",\n \"size\": \"210\",\n \"md5Hash\": \"uGSbnKk4eyAMOw5hzhe74w==\",\n - \ \"crc32c\": \"0G3aLQ==\",\n \"etag\": \"COLho8j5jZEDEAE=\",\n \"timeCreated\": - \"2025-11-25T18:39:19.832Z\",\n \"updated\": \"2025-11-25T18:39:19.832Z\",\n - \ \"timeStorageClassUpdated\": \"2025-11-25T18:39:19.832Z\",\n \"timeFinalized\": - \"2025-11-25T18:39:19.832Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": + \ \"storageClass\": \"STANDARD\",\n \"size\": \"210\",\n \"md5Hash\": \"5DMGRAuvvuTWsciXd/dw4Q==\",\n + \ \"crc32c\": \"6zrU9Q==\",\n \"etag\": \"CNbxqZ3Yp5EDEAE=\",\n \"timeCreated\": + \"2025-12-06T00:19:24.580Z\",\n \"updated\": \"2025-12-06T00:19:24.580Z\",\n + \ \"timeStorageClassUpdated\": \"2025-12-06T00:19:24.580Z\",\n \"timeFinalized\": + \"2025-12-06T00:19:24.580Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"csv_dialect\\\": \\\"excel\\\", \\\"extract_config\\\": {\\\"extracted_at\\\": \\\"2025-06-01T00:00:00+00:00\\\", \\\"name\\\": \\\"Santa Ynez Mecatran Schedule\\\", \\\"url\\\": \\\"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\\\", @@ -153,9 +153,9 @@ interactions: Content-Type: - application/json; charset=UTF-8 Date: - - Tue, 25 Nov 2025 18:39:19 GMT + - Sat, 06 Dec 2025 00:19:24 GMT ETag: - - COLho8j5jZEDEAE= + - CNbxqZ3Yp5EDEAE= Expires: - Mon, 01 Jan 1990 00:00:00 GMT Pragma: @@ -166,18 +166,18 @@ interactions: - Origin - X-Origin X-GUploader-UploadID: - - AOCedOG9gnSVCGAyqyV1dtfqKodoL9ut5TQ43kXUq46XKocWHwvb0Zf838ugOITEFry7wWeuHhqHDw + - AHVrFxM_9OBH0jx6RDFYVSGhfPkS_7IM-B6ECE9TFKWIY7UYLn0MxJpL5dxCQyspp7gBMX_48wq27qk status: code: 200 message: OK - request: - body: "--===============0960797755379553657==\r\ncontent-type: application/json; - charset=UTF-8\r\n\r\n{\"name\": \"agency.txt_parsing_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/agency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\", + body: "--===============5658409021142635648==\r\ncontent-type: application/json; + charset=UTF-8\r\n\r\n{\"name\": \"agency.txt_parsing_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\", \"metadata\": {\"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"results.jsonl\\\", - \\\"ts\\\": \\\"2025-06-02T00:00:00+00:00\\\"}\"}}\r\n--===============0960797755379553657==\r\ncontent-type: + \\\"ts\\\": \\\"2025-06-02T00:00:00+00:00\\\"}\"}}\r\n--===============5658409021142635648==\r\ncontent-type: application/jsonl\r\n\r\n{\"exception\":null,\"feed_file\":{\"filename\":\"agency.txt\",\"ts\":\"2025-06-03T00:00:00+00:00\",\"extract_config\":{\"extracted_at\":\"2025-06-01T00:00:00+00:00\",\"name\":\"Santa Ynez Mecatran Schedule\",\"url\":\"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\",\"feed_type\":\"schedule\",\"schedule_url_for_validation\":null,\"auth_query_params\":{},\"auth_headers\":{},\"computed\":false},\"original_filename\":\"agency.txt\"},\"fields\":[\"agency_id\",\"agency_name\",\"agency_url\",\"agency_timezone\",\"agency_phone\",\"agency_lang\",\"agency_fare_url\",\"agency_email\",\"agency_primary\"],\"parsed_file\":{\"csv_dialect\":\"excel\",\"extract_config\":{\"extracted_at\":\"2025-06-01T00:00:00+00:00\",\"name\":\"Santa - Ynez Mecatran Schedule\",\"url\":\"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\",\"feed_type\":\"schedule\",\"schedule_url_for_validation\":null,\"auth_query_params\":{},\"auth_headers\":{},\"computed\":false},\"filename\":\"agency.jsonl.gz\",\"gtfs_filename\":\"agency\",\"num_lines\":1,\"ts\":\"2025-06-02T00:00:00+00:00\"},\"success\":true}\r\n--===============0960797755379553657==--" + Ynez Mecatran Schedule\",\"url\":\"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\",\"feed_type\":\"schedule\",\"schedule_url_for_validation\":null,\"auth_query_params\":{},\"auth_headers\":{},\"computed\":false},\"filename\":\"agency.jsonl.gz\",\"gtfs_filename\":\"agency\",\"num_lines\":1,\"ts\":\"2025-06-02T00:00:00+00:00\"},\"success\":true}\r\n--===============5658409021142635648==--" headers: Accept: - application/json @@ -188,16 +188,16 @@ interactions: Connection: - keep-alive Content-Length: - - '1799' + - '1788' User-Agent: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 X-Goog-API-Client: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 - gccl-invocation-id/82f13f87-e0c2-4d16-b7d9-5513de40efb6 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/ed8a4f13-7155-4125-a926-074cf40c7b12 content-type: - !!binary | - bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT0wOTYwNzk3NzU1Mzc5 - NTUzNjU3PT0i + bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT01NjU4NDA5MDIxMTQy + NjM1NjQ4PT0i x-goog-user-project: - cal-itp-data-infra-staging x-upload-content-type: @@ -206,17 +206,17 @@ interactions: uri: https://storage.googleapis.com/upload/storage/v1/b/calitp-staging-pytest/o?uploadType=multipart response: body: - string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/agency.txt_parsing_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/agency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl/1764095960745627\",\n - \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/agency.txt_parsing_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fagency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\",\n - \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/agency.txt_parsing_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fagency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl?generation=1764095960745627&alt=media\",\n - \ \"name\": \"agency.txt_parsing_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/agency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\",\n - \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764095960745627\",\n + string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/agency.txt_parsing_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl/1764980365470864\",\n + \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/agency.txt_parsing_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2FaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\",\n + \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/agency.txt_parsing_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2FaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl?generation=1764980365470864&alt=media\",\n + \ \"name\": \"agency.txt_parsing_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\",\n + \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764980365470864\",\n \ \"metageneration\": \"1\",\n \"contentType\": \"application/jsonl\",\n \ \"storageClass\": \"STANDARD\",\n \"size\": \"1169\",\n \"md5Hash\": \"ytvmM6rNPY1Lk8UWn68qsQ==\",\n - \ \"crc32c\": \"1Xjncw==\",\n \"etag\": \"CJuN3Mj5jZEDEAE=\",\n \"timeCreated\": - \"2025-11-25T18:39:20.755Z\",\n \"updated\": \"2025-11-25T18:39:20.755Z\",\n - \ \"timeStorageClassUpdated\": \"2025-11-25T18:39:20.755Z\",\n \"timeFinalized\": - \"2025-11-25T18:39:20.755Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": + \ \"crc32c\": \"1Xjncw==\",\n \"etag\": \"CJDZ4J3Yp5EDEAE=\",\n \"timeCreated\": + \"2025-12-06T00:19:25.478Z\",\n \"updated\": \"2025-12-06T00:19:25.478Z\",\n + \ \"timeStorageClassUpdated\": \"2025-12-06T00:19:25.478Z\",\n \"timeFinalized\": + \"2025-12-06T00:19:25.478Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"results.jsonl\\\", \\\"ts\\\": \\\"2025-06-02T00:00:00+00:00\\\"}\"\n \ }\n}\n" headers: @@ -225,13 +225,13 @@ interactions: Cache-Control: - no-cache, no-store, max-age=0, must-revalidate Content-Length: - - '2078' + - '2034' Content-Type: - application/json; charset=UTF-8 Date: - - Tue, 25 Nov 2025 18:39:20 GMT + - Sat, 06 Dec 2025 00:19:25 GMT ETag: - - CJuN3Mj5jZEDEAE= + - CJDZ4J3Yp5EDEAE= Expires: - Mon, 01 Jan 1990 00:00:00 GMT Pragma: @@ -242,7 +242,7 @@ interactions: - Origin - X-Origin X-GUploader-UploadID: - - AOCedOHNeR5AkpItWdNyuBKunOHlmuQ6dyL38VV9fbYi8hxL6PPOXBTcL51DxbBbQ6PgYVY1R0IVmQ + - AOCedOGZP6bmDVAjll_DD4B3w4l1f9GsWoKnn1HQn8jB0CHSKjC4GGM82dOr92K3WSPvyGCv83LIBBd2PsxT status: code: 200 message: OK @@ -256,10 +256,10 @@ interactions: Connection: - keep-alive User-Agent: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 X-Goog-API-Client: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 - gccl-invocation-id/1ae48745-9b0a-474a-bf5b-c505df1829fd + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/7ea342c5-c355-4306-8503-4621166dd4c8 accept-encoding: - gzip content-type: @@ -286,13 +286,13 @@ interactions: Content-Type: - text/csv Date: - - Tue, 25 Nov 2025 18:39:21 GMT + - Sat, 06 Dec 2025 00:19:26 GMT ETag: - - CNy0vpDxjZEDEAE= + - CIebxanQp5EDEAE= Expires: - Mon, 01 Jan 1990 00:00:00 GMT Last-Modified: - - Tue, 25 Nov 2025 18:01:35 GMT + - Fri, 05 Dec 2025 23:44:02 GMT Pragma: - no-cache Server: @@ -301,9 +301,9 @@ interactions: - Origin - X-Origin X-GUploader-UploadID: - - AOCedOH7d2Vug6hRTcUGuUjs5z1sl0LQ4np3rPFbiclrVqFTROBnjbA3sxG8R5-L1uxzBJ2xmlkp1g + - AOCedOEdjFIpwvQCcxRX4f56B3-2WAIx6VCSxB_AEaEJdm4bde93yVQsJfaQT7ZwSwkuBCw6VDDengA X-Goog-Generation: - - '1764093695335004' + - '1764978242702727' X-Goog-Hash: - crc32c=e6O0zg==,md5=aqpn1jk7QQDHHuToKpUZKA== X-Goog-Metageneration: @@ -319,7 +319,7 @@ interactions: message: OK - request: body: !!binary | - LS09PT09PT09PT09PT09PT0yODYxNjY0NDc4MDk0NjU3NTE2PT0NCmNvbnRlbnQtdHlwZTogYXBw + LS09PT09PT09PT09PT09PT01Mjk1ODE3MTUxMjY3MTkzMTI2PT0NCmNvbnRlbnQtdHlwZTogYXBw bGljYXRpb24vanNvbjsgY2hhcnNldD1VVEYtOA0KDQp7Im5hbWUiOiAiYWdlbmN5L2R0PTIwMjUt MDYtMDIvdHM9MjAyNS0wNi0wMlQwMDowMDowMCswMDowMC9iYXNlNjRfdXJsPWFIUjBjRG92TDJG d2NDNXRaV05oZEhKaGJpNWpiMjB2ZFhKaUwzZHpMMlpsWldRdll6SnNNRnBVTVhwbFdGb3dUekpP @@ -336,13 +336,13 @@ interactions: LCBcImF1dGhfcXVlcnlfcGFyYW1zXCI6IHt9LCBcImF1dGhfaGVhZGVyc1wiOiB7fSwgXCJjb21w dXRlZFwiOiBmYWxzZX0sIFwiZmlsZW5hbWVcIjogXCJhZ2VuY3kuanNvbmwuZ3pcIiwgXCJndGZz X2ZpbGVuYW1lXCI6IFwiYWdlbmN5XCIsIFwibnVtX2xpbmVzXCI6IDEsIFwidHNcIjogXCIyMDI1 - LTA2LTAzVDAwOjAwOjAwKzAwOjAwXCJ9In19DQotLT09PT09PT09PT09PT09PTI4NjE2NjQ0Nzgw - OTQ2NTc1MTY9PQ0KY29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9qc29ubA0KDQofiwgA2fclaQL/ + LTA2LTAzVDAwOjAwOjAwKzAwOjAwXCJ9In19DQotLT09PT09PT09PT09PT09PTUyOTU4MTcxNTEy + NjcxOTMxMjY9PQ0KY29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9qc29ubA0KDQofiwgAj3YzaQL/ fZDLCsIwEEV/pWRtjOlDanduXLlTBFdlrGMbSKaSpJZW/HdbBSsIbu89nDvMneVaEebUmBNalskZ gxKp6HJ1ZhmTMpTxIpLsExMYHIodkIfgSNgHB9Aau2BvgZzyE9lYPYCV91eXCdG27dx1Nz8vaiPi dCVeBj4a+NvAfwxeGexrGvfWBq0qQGxrl6+pRI1u4q7VG0oXCV+mKU/iJJxaDVQOJdIUXcDiv/ui - ZSI2A/O1gQbUyH+tWmXAduOX2OMJSPMETUgBAAANCi0tPT09PT09PT09PT09PT09Mjg2MTY2NDQ3 - ODA5NDY1NzUxNj09LS0= + ZSI2A/O1gQbUyH+tWmXAduOX2OMJSPMETUgBAAANCi0tPT09PT09PT09PT09PT09NTI5NTgxNzE1 + MTI2NzE5MzEyNj09LS0= headers: Accept: - application/json @@ -355,14 +355,14 @@ interactions: Content-Length: - '1325' User-Agent: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 X-Goog-API-Client: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 - gccl-invocation-id/3951f003-5574-455e-b995-2e629e42519a + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/4735602c-2701-4c38-b926-6b0b3fda8e48 content-type: - !!binary | - bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT0yODYxNjY0NDc4MDk0 - NjU3NTE2PT0i + bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT01Mjk1ODE3MTUxMjY3 + MTkzMTI2PT0i x-goog-user-project: - cal-itp-data-infra-staging x-upload-content-type: @@ -371,17 +371,17 @@ interactions: uri: https://storage.googleapis.com/upload/storage/v1/b/calitp-staging-pytest/o?uploadType=multipart response: body: - string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/agency/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/agency.jsonl.gz/1764095962220083\",\n + string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/agency/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/agency.jsonl.gz/1764980367655108\",\n \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/agency%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fagency.jsonl.gz\",\n - \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/agency%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fagency.jsonl.gz?generation=1764095962220083&alt=media\",\n + \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/agency%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fagency.jsonl.gz?generation=1764980367655108&alt=media\",\n \ \"name\": \"agency/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/agency.jsonl.gz\",\n - \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764095962220083\",\n + \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764980367655108\",\n \ \"metageneration\": \"1\",\n \"contentType\": \"application/jsonl\",\n - \ \"storageClass\": \"STANDARD\",\n \"size\": \"210\",\n \"md5Hash\": \"DvLoxX9L3rs+zxioPMsLvQ==\",\n - \ \"crc32c\": \"yop8Eg==\",\n \"etag\": \"CLOMtsn5jZEDEAE=\",\n \"timeCreated\": - \"2025-11-25T18:39:22.228Z\",\n \"updated\": \"2025-11-25T18:39:22.228Z\",\n - \ \"timeStorageClassUpdated\": \"2025-11-25T18:39:22.228Z\",\n \"timeFinalized\": - \"2025-11-25T18:39:22.228Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": + \ \"storageClass\": \"STANDARD\",\n \"size\": \"210\",\n \"md5Hash\": \"mr0X+ELD46S9a5ys8O1/0A==\",\n + \ \"crc32c\": \"jeyxrA==\",\n \"etag\": \"CMSB5p7Yp5EDEAE=\",\n \"timeCreated\": + \"2025-12-06T00:19:27.664Z\",\n \"updated\": \"2025-12-06T00:19:27.664Z\",\n + \ \"timeStorageClassUpdated\": \"2025-12-06T00:19:27.664Z\",\n \"timeFinalized\": + \"2025-12-06T00:19:27.664Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"csv_dialect\\\": \\\"excel\\\", \\\"extract_config\\\": {\\\"extracted_at\\\": \\\"2025-06-01T00:00:00+00:00\\\", \\\"name\\\": \\\"Santa Ynez Mecatran Schedule\\\", \\\"url\\\": \\\"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\\\", @@ -400,9 +400,9 @@ interactions: Content-Type: - application/json; charset=UTF-8 Date: - - Tue, 25 Nov 2025 18:39:22 GMT + - Sat, 06 Dec 2025 00:19:27 GMT ETag: - - CLOMtsn5jZEDEAE= + - CMSB5p7Yp5EDEAE= Expires: - Mon, 01 Jan 1990 00:00:00 GMT Pragma: @@ -413,18 +413,18 @@ interactions: - Origin - X-Origin X-GUploader-UploadID: - - AOCedOGWqdCkjoAH_ejASnevjM0B0vm_4hAd2qVhzV77wSSDt8AhiiL4TGu9xQHZQaCG_yteE4BjJg + - AOCedOF_GozrZx2RbnflLZYi_s1f4doeoE-MsL4PEZS1Nhq_lslNvS3zERzrmSZ_UB8ci5S-GnVYMGvc2256 status: code: 200 message: OK - request: - body: "--===============2673392540403712007==\r\ncontent-type: application/json; - charset=UTF-8\r\n\r\n{\"name\": \"agency.txt_parsing_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/agency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\", + body: "--===============8403218468627405646==\r\ncontent-type: application/json; + charset=UTF-8\r\n\r\n{\"name\": \"agency.txt_parsing_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\", \"metadata\": {\"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"results.jsonl\\\", - \\\"ts\\\": \\\"2025-06-03T00:00:00+00:00\\\"}\"}}\r\n--===============2673392540403712007==\r\ncontent-type: + \\\"ts\\\": \\\"2025-06-03T00:00:00+00:00\\\"}\"}}\r\n--===============8403218468627405646==\r\ncontent-type: application/jsonl\r\n\r\n{\"exception\":null,\"feed_file\":{\"filename\":\"agency.txt\",\"ts\":\"2025-06-03T00:00:00+00:00\",\"extract_config\":{\"extracted_at\":\"2025-06-01T00:00:00+00:00\",\"name\":\"Santa Ynez Mecatran Schedule\",\"url\":\"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\",\"feed_type\":\"schedule\",\"schedule_url_for_validation\":null,\"auth_query_params\":{},\"auth_headers\":{},\"computed\":false},\"original_filename\":\"agency.txt\"},\"fields\":[\"agency_id\",\"agency_name\",\"agency_url\",\"agency_timezone\",\"agency_phone\",\"agency_lang\",\"agency_fare_url\",\"agency_email\",\"agency_primary\"],\"parsed_file\":{\"csv_dialect\":\"excel\",\"extract_config\":{\"extracted_at\":\"2025-06-01T00:00:00+00:00\",\"name\":\"Santa - Ynez Mecatran Schedule\",\"url\":\"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\",\"feed_type\":\"schedule\",\"schedule_url_for_validation\":null,\"auth_query_params\":{},\"auth_headers\":{},\"computed\":false},\"filename\":\"agency.jsonl.gz\",\"gtfs_filename\":\"agency\",\"num_lines\":1,\"ts\":\"2025-06-03T00:00:00+00:00\"},\"success\":true}\r\n--===============2673392540403712007==--" + Ynez Mecatran Schedule\",\"url\":\"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\",\"feed_type\":\"schedule\",\"schedule_url_for_validation\":null,\"auth_query_params\":{},\"auth_headers\":{},\"computed\":false},\"filename\":\"agency.jsonl.gz\",\"gtfs_filename\":\"agency\",\"num_lines\":1,\"ts\":\"2025-06-03T00:00:00+00:00\"},\"success\":true}\r\n--===============8403218468627405646==--" headers: Accept: - application/json @@ -435,16 +435,16 @@ interactions: Connection: - keep-alive Content-Length: - - '1799' + - '1788' User-Agent: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 X-Goog-API-Client: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 - gccl-invocation-id/e0d32193-bedb-4aaf-891e-5b1581f8d9e6 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/c250ffec-9619-40e7-a28c-c5faf8e2a510 content-type: - !!binary | - bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT0yNjczMzkyNTQwNDAz - NzEyMDA3PT0i + bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT04NDAzMjE4NDY4NjI3 + NDA1NjQ2PT0i x-goog-user-project: - cal-itp-data-infra-staging x-upload-content-type: @@ -453,17 +453,17 @@ interactions: uri: https://storage.googleapis.com/upload/storage/v1/b/calitp-staging-pytest/o?uploadType=multipart response: body: - string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/agency.txt_parsing_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/agency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl/1764095963060435\",\n - \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/agency.txt_parsing_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fagency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\",\n - \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/agency.txt_parsing_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fagency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl?generation=1764095963060435&alt=media\",\n - \ \"name\": \"agency.txt_parsing_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/agency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\",\n - \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764095963060435\",\n + string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/agency.txt_parsing_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl/1764980369169445\",\n + \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/agency.txt_parsing_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2FaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\",\n + \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/agency.txt_parsing_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2FaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl?generation=1764980369169445&alt=media\",\n + \ \"name\": \"agency.txt_parsing_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\",\n + \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764980369169445\",\n \ \"metageneration\": \"1\",\n \"contentType\": \"application/jsonl\",\n \ \"storageClass\": \"STANDARD\",\n \"size\": \"1169\",\n \"md5Hash\": \"+gLkCiZqjvQnH0wy/Fb74w==\",\n - \ \"crc32c\": \"q4xsog==\",\n \"etag\": \"CNOx6cn5jZEDEAE=\",\n \"timeCreated\": - \"2025-11-25T18:39:23.068Z\",\n \"updated\": \"2025-11-25T18:39:23.068Z\",\n - \ \"timeStorageClassUpdated\": \"2025-11-25T18:39:23.068Z\",\n \"timeFinalized\": - \"2025-11-25T18:39:23.068Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": + \ \"crc32c\": \"q4xsog==\",\n \"etag\": \"CKW4wp/Yp5EDEAE=\",\n \"timeCreated\": + \"2025-12-06T00:19:29.177Z\",\n \"updated\": \"2025-12-06T00:19:29.177Z\",\n + \ \"timeStorageClassUpdated\": \"2025-12-06T00:19:29.177Z\",\n \"timeFinalized\": + \"2025-12-06T00:19:29.177Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"results.jsonl\\\", \\\"ts\\\": \\\"2025-06-03T00:00:00+00:00\\\"}\"\n \ }\n}\n" headers: @@ -472,13 +472,13 @@ interactions: Cache-Control: - no-cache, no-store, max-age=0, must-revalidate Content-Length: - - '2078' + - '2034' Content-Type: - application/json; charset=UTF-8 Date: - - Tue, 25 Nov 2025 18:39:23 GMT + - Sat, 06 Dec 2025 00:19:29 GMT ETag: - - CNOx6cn5jZEDEAE= + - CKW4wp/Yp5EDEAE= Expires: - Mon, 01 Jan 1990 00:00:00 GMT Pragma: @@ -489,7 +489,7 @@ interactions: - Origin - X-Origin X-GUploader-UploadID: - - AOCedOGoPMqtWRY9Gu-ICUon06YV_tSc5suQFhf7l4DIygx4KFMfvQ68Od4Wu53G6i326CCCxOsA4SE + - AOCedOHphSycmRJwQw5jcvrt-w8jNnjxXk3RPtnFdHSx6dw4i-Q9ASuxV-0uA0GPVeyHxDQQ5fFM1rwouDV3 status: code: 200 message: OK @@ -503,10 +503,10 @@ interactions: Connection: - keep-alive User-Agent: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 X-Goog-API-Client: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 - gccl-invocation-id/43fc2d56-8ae3-4398-b38f-7e8ef5946ea5 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/2d4db049-4f5b-4c09-9e0c-9ebb61692a48 accept-encoding: - gzip content-type: @@ -520,7 +520,7 @@ interactions: response: body: string: !!binary | - H4sIANn3JWkC/32QywrCMBBFf6VkbYzpQ2p3bly5UwRXZaxjG0imkqSWVvx3WwUrCG7vPZw7zJ3l + H4sIAI92M2kC/32QywrCMBBFf6VkbYzpQ2p3bly5UwRXZaxjG0imkqSWVvx3WwUrCG7vPZw7zJ3l WhHm1JgTWpbJGYMSqehydWYZkzKU8SKS7BMTGByKHZCH4EjYBwfQGrtgb4Gc8hPZWD2AlfdXlwnR tu3cdTc/L2oj4nQlXgY+GvjbwH8MXhnsaxr31gatKkBsa5evqUSNbuKu1RtKFwlfpilP4iScWg1U DiXSFF3A4r/7omUiNgPztYEG1Mh/rVplwHbjl9jjCUjzBE1IAQAA @@ -536,13 +536,13 @@ interactions: Content-Type: - application/jsonl Date: - - Tue, 25 Nov 2025 18:39:24 GMT + - Sat, 06 Dec 2025 00:19:30 GMT ETag: - - CLOMtsn5jZEDEAE= + - CMSB5p7Yp5EDEAE= Expires: - Mon, 01 Jan 1990 00:00:00 GMT Last-Modified: - - Tue, 25 Nov 2025 18:39:22 GMT + - Sat, 06 Dec 2025 00:19:27 GMT Pragma: - no-cache Server: @@ -551,11 +551,11 @@ interactions: - Origin - X-Origin X-GUploader-UploadID: - - AOCedOEhZ3C2S0_BsUIixVSe6lwjQw2M7B6afn5gM8Ig2z6rTBOYnbBD2D_Sjoqfd5hM416D752AkTc + - AOCedOHnz8hkAkEPqhdI--ZLsG0SmqbYkkEfkTuEFHo0b9TU5dCuOTqAoXZOZWs7tmNcsIT-tMP0aVtDuwT2 X-Goog-Generation: - - '1764095962220083' + - '1764980367655108' X-Goog-Hash: - - crc32c=yop8Eg==,md5=DvLoxX9L3rs+zxioPMsLvQ== + - crc32c=jeyxrA==,md5=mr0X+ELD46S9a5ys8O1/0A== X-Goog-Metageneration: - '1' X-Goog-Storage-Class: @@ -579,17 +579,17 @@ interactions: Connection: - keep-alive User-Agent: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 X-Goog-API-Client: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 - gccl-invocation-id/9b15fcc5-fdd0-4adf-8df6-cddaad58b628 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/31f791f1-34d9-41c7-bfdb-b14a6998f485 x-goog-user-project: - cal-itp-data-infra-staging method: GET uri: https://storage.googleapis.com/storage/v1/b/calitp-staging-pytest/o/agency%2Fdt%3D2025-06-02%2Fts%3D2025-06-02T00%3A00%3A00%2B00%3A00%2Fbase64_url%3DaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA%3D%3D%2Fagency.jsonl.gz?prettyPrint=false&projection=noAcl response: body: - string: '{"kind":"storage#object","id":"calitp-staging-pytest/agency/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/agency.jsonl.gz/1764095962220083","selfLink":"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/agency%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fagency.jsonl.gz","mediaLink":"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/agency%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fagency.jsonl.gz?generation=1764095962220083&alt=media","name":"agency/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/agency.jsonl.gz","bucket":"calitp-staging-pytest","generation":"1764095962220083","metageneration":"1","contentType":"application/jsonl","storageClass":"STANDARD","size":"210","md5Hash":"DvLoxX9L3rs+zxioPMsLvQ==","crc32c":"yop8Eg==","etag":"CLOMtsn5jZEDEAE=","timeCreated":"2025-11-25T18:39:22.228Z","updated":"2025-11-25T18:39:22.228Z","timeStorageClassUpdated":"2025-11-25T18:39:22.228Z","timeFinalized":"2025-11-25T18:39:22.228Z","metadata":{"PARTITIONED_ARTIFACT_METADATA":"{\"csv_dialect\": + string: '{"kind":"storage#object","id":"calitp-staging-pytest/agency/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/agency.jsonl.gz/1764980367655108","selfLink":"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/agency%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fagency.jsonl.gz","mediaLink":"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/agency%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fagency.jsonl.gz?generation=1764980367655108&alt=media","name":"agency/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/agency.jsonl.gz","bucket":"calitp-staging-pytest","generation":"1764980367655108","metageneration":"1","contentType":"application/jsonl","storageClass":"STANDARD","size":"210","md5Hash":"mr0X+ELD46S9a5ys8O1/0A==","crc32c":"jeyxrA==","etag":"CMSB5p7Yp5EDEAE=","timeCreated":"2025-12-06T00:19:27.664Z","updated":"2025-12-06T00:19:27.664Z","timeStorageClassUpdated":"2025-12-06T00:19:27.664Z","timeFinalized":"2025-12-06T00:19:27.664Z","metadata":{"PARTITIONED_ARTIFACT_METADATA":"{\"csv_dialect\": \"excel\", \"extract_config\": {\"extracted_at\": \"2025-06-01T00:00:00+00:00\", \"name\": \"Santa Ynez Mecatran Schedule\", \"url\": \"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\", \"feed_type\": \"schedule\", \"schedule_url_for_validation\": null, \"auth_query_params\": @@ -605,18 +605,18 @@ interactions: Content-Type: - application/json; charset=UTF-8 Date: - - Tue, 25 Nov 2025 18:39:24 GMT + - Sat, 06 Dec 2025 00:19:30 GMT ETag: - - CLOMtsn5jZEDEAE= + - CMSB5p7Yp5EDEAE= Expires: - - Tue, 25 Nov 2025 18:39:24 GMT + - Sat, 06 Dec 2025 00:19:30 GMT Server: - UploadServer Vary: - Origin - X-Origin X-GUploader-UploadID: - - AOCedOHpE3-j0CwFS5VFKoAntjmkRFQHQNf4ciNYWEO9hJH9yOzB0j8Y_ZW7m2-Z98UXUILOjoxOLv8 + - AOCedOEJ-PMNex6THoVibhqWhwHZjSux3rfVlh9Tjy8AXLHA8qTOzVOBOSRirI_eFBTImMj9belesiL0yZLz status: code: 200 message: OK @@ -630,10 +630,10 @@ interactions: Connection: - keep-alive User-Agent: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 X-Goog-API-Client: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 - gccl-invocation-id/21e305fb-01ad-4b1d-bdbf-e69fb420a185 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/65a6abc4-6cd0-4e58-9e83-834f3d1b5a2d accept-encoding: - gzip content-type: @@ -643,7 +643,7 @@ interactions: x-upload-content-type: - application/json; charset=UTF-8 method: GET - uri: https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/agency.txt_parsing_results%2Fdt%3D2025-06-02%2Fts%3D2025-06-02T00%3A00%3A00%2B00%3A00%2Fagency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA%3D%3D.jsonl?alt=media + uri: https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/agency.txt_parsing_results%2Fdt%3D2025-06-02%2Fts%3D2025-06-02T00%3A00%3A00%2B00%3A00%2FaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA%3D%3D.jsonl?alt=media response: body: string: '{"exception":null,"feed_file":{"filename":"agency.txt","ts":"2025-06-03T00:00:00+00:00","extract_config":{"extracted_at":"2025-06-01T00:00:00+00:00","name":"Santa @@ -661,13 +661,13 @@ interactions: Content-Type: - application/jsonl Date: - - Tue, 25 Nov 2025 18:39:24 GMT + - Sat, 06 Dec 2025 00:19:30 GMT ETag: - - CNOx6cn5jZEDEAE= + - CKW4wp/Yp5EDEAE= Expires: - Mon, 01 Jan 1990 00:00:00 GMT Last-Modified: - - Tue, 25 Nov 2025 18:39:23 GMT + - Sat, 06 Dec 2025 00:19:29 GMT Pragma: - no-cache Server: @@ -676,9 +676,9 @@ interactions: - Origin - X-Origin X-GUploader-UploadID: - - AOCedOGsY8ixFuIVY_HNU5bpwMXCEc5OTbh-N-EvRsrSbYiRhUkruF2Ul_5ROOMvVZMIZ1H3F7QwTIE + - AOCedOHKs8Wscn-csAKfYClz80ICsFASdXiL3U61XtomqW6gToE8msmPF4ROC8q0GGre7aza6CwZGeAoKzZw X-Goog-Generation: - - '1764095963060435' + - '1764980369169445' X-Goog-Hash: - crc32c=q4xsog==,md5=+gLkCiZqjvQnH0wy/Fb74w== X-Goog-Metageneration: @@ -704,17 +704,17 @@ interactions: Connection: - keep-alive User-Agent: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 X-Goog-API-Client: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 - gccl-invocation-id/3fbcf94c-762e-4a4a-962d-8e7502f7f79a + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/8aef31b3-b907-4cf1-8454-df6559076907 x-goog-user-project: - cal-itp-data-infra-staging method: GET - uri: https://storage.googleapis.com/storage/v1/b/calitp-staging-pytest/o/agency.txt_parsing_results%2Fdt%3D2025-06-02%2Fts%3D2025-06-02T00%3A00%3A00%2B00%3A00%2Fagency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA%3D%3D.jsonl?prettyPrint=false&projection=noAcl + uri: https://storage.googleapis.com/storage/v1/b/calitp-staging-pytest/o/agency.txt_parsing_results%2Fdt%3D2025-06-02%2Fts%3D2025-06-02T00%3A00%3A00%2B00%3A00%2FaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA%3D%3D.jsonl?prettyPrint=false&projection=noAcl response: body: - string: '{"kind":"storage#object","id":"calitp-staging-pytest/agency.txt_parsing_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/agency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl/1764095963060435","selfLink":"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/agency.txt_parsing_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fagency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl","mediaLink":"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/agency.txt_parsing_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fagency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl?generation=1764095963060435&alt=media","name":"agency.txt_parsing_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/agency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl","bucket":"calitp-staging-pytest","generation":"1764095963060435","metageneration":"1","contentType":"application/jsonl","storageClass":"STANDARD","size":"1169","md5Hash":"+gLkCiZqjvQnH0wy/Fb74w==","crc32c":"q4xsog==","etag":"CNOx6cn5jZEDEAE=","timeCreated":"2025-11-25T18:39:23.068Z","updated":"2025-11-25T18:39:23.068Z","timeStorageClassUpdated":"2025-11-25T18:39:23.068Z","timeFinalized":"2025-11-25T18:39:23.068Z","metadata":{"PARTITIONED_ARTIFACT_METADATA":"{\"filename\": + string: '{"kind":"storage#object","id":"calitp-staging-pytest/agency.txt_parsing_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl/1764980369169445","selfLink":"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/agency.txt_parsing_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2FaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl","mediaLink":"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/agency.txt_parsing_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2FaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl?generation=1764980369169445&alt=media","name":"agency.txt_parsing_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl","bucket":"calitp-staging-pytest","generation":"1764980369169445","metageneration":"1","contentType":"application/jsonl","storageClass":"STANDARD","size":"1169","md5Hash":"+gLkCiZqjvQnH0wy/Fb74w==","crc32c":"q4xsog==","etag":"CKW4wp/Yp5EDEAE=","timeCreated":"2025-12-06T00:19:29.177Z","updated":"2025-12-06T00:19:29.177Z","timeStorageClassUpdated":"2025-12-06T00:19:29.177Z","timeFinalized":"2025-12-06T00:19:29.177Z","metadata":{"PARTITIONED_ARTIFACT_METADATA":"{\"filename\": \"results.jsonl\", \"ts\": \"2025-06-03T00:00:00+00:00\"}"}}' headers: Alt-Svc: @@ -722,22 +722,22 @@ interactions: Cache-Control: - private, max-age=0, must-revalidate, no-transform Content-Length: - - '1991' + - '1947' Content-Type: - application/json; charset=UTF-8 Date: - - Tue, 25 Nov 2025 18:39:24 GMT + - Sat, 06 Dec 2025 00:19:30 GMT ETag: - - CNOx6cn5jZEDEAE= + - CKW4wp/Yp5EDEAE= Expires: - - Tue, 25 Nov 2025 18:39:24 GMT + - Sat, 06 Dec 2025 00:19:30 GMT Server: - UploadServer Vary: - Origin - X-Origin X-GUploader-UploadID: - - AOCedOH043lKlDycjgJnt9pP2ZXu6jDiP-KoavCeBSRn4FM_je0SeiA9hXJh2j6eZnde_2lJ + - AOCedOGSMdgpgiods_U3sZLWMi0Uu2cRRZQeLirgBxTs14z9RAMkmkwa7bgRa1ACo1KddwtayJNa4nvxIAsG status: code: 200 message: OK diff --git a/airflow/tests/operators/cassettes/test_unzip_gtfs_to_gcs_operator/TestUnzipGTFSToGCSOperator.test_empty_execute.yaml b/airflow/tests/operators/cassettes/test_unzip_gtfs_to_gcs_operator/TestUnzipGTFSToGCSOperator.test_empty_execute.yaml new file mode 100644 index 0000000000..520d2f3e6c --- /dev/null +++ b/airflow/tests/operators/cassettes/test_unzip_gtfs_to_gcs_operator/TestUnzipGTFSToGCSOperator.test_empty_execute.yaml @@ -0,0 +1,730 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Authorization: + - FILTERED + Connection: + - keep-alive + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/fa3fa9a8-b57f-47d6-b8eb-5bf266ebd20e + accept-encoding: + - gzip + content-type: + - application/json; charset=UTF-8 + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - application/json; charset=UTF-8 + method: GET + uri: https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/schedule%2Fdt%3D2025-11-13%2Fts%3D2025-11-13T03%3A02%3A04.189504%2B00%3A00%2Fbase64_url%3DaHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc%3D%2Fschedule-27.zip?alt=media + response: + body: + string: !!binary | + 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 + LnR4dFBLBQYAAAAACQAJAAcCAADIBQAAAAA= + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Disposition: + - attachment + Content-Length: + - '2021' + Content-Type: + - application/octet-stream + Date: + - Fri, 05 Dec 2025 23:44:15 GMT + ETag: + - CImN3PSMoJEDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Last-Modified: + - Tue, 02 Dec 2025 23:53:48 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AHVrFxNJxr0BjrsqVBL7fj7DdvgC_x67uslH5oGLGHEL15LqzktCaD-H2XSeiFQcugDjRoHXElM11I0 + X-Goog-Generation: + - '1764719628584585' + X-Goog-Hash: + - crc32c=F3bKVw==,md5=6mIsSfEakt9Z1A6l2fy9Eg== + X-Goog-Metageneration: + - '1' + X-Goog-Storage-Class: + - STANDARD + X-Goog-Stored-Content-Encoding: + - identity + X-Goog-Stored-Content-Length: + - '2021' + status: + code: 200 + message: OK +- request: + body: "--===============7478704002758339633==\r\ncontent-type: application/json; + charset=UTF-8\r\n\r\n{\"name\": \"calendar_dates.txt/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/base64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=/calendar_dates.txt\", + \"metadata\": {\"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"calendar_dates.txt\\\", + \\\"original_filename\\\": \\\"calendar_dates.txt\\\", \\\"ts\\\": \\\"2025-11-13T00:00:00+00:00\\\", + \\\"extract_config\\\": {\\\"auth_headers\\\": {}, \\\"auth_query_params\\\": + {}, \\\"computed\\\": false, \\\"extracted_at\\\": \\\"2025-11-25T00:00:00+00:00\\\", + \\\"feed_type\\\": \\\"schedule\\\", \\\"name\\\": \\\"Fric and Frac Schedule\\\", + \\\"schedule_url_for_validation\\\": null, \\\"url\\\": \\\"https://www.ips-systems.com/GTFS/Schedule/27\\\"}}\"}}\r\n--===============7478704002758339633==\r\ncontent-type: + text/csv\r\n\r\nservice_id,date,exception_type\r\n\r\n--===============7478704002758339633==--" + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - FILTERED + Connection: + - keep-alive + Content-Length: + - '883' + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/2868c036-93bc-4183-aaa9-971353689b8b + content-type: + - !!binary | + bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT03NDc4NzA0MDAyNzU4 + MzM5NjMzPT0i + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - text/csv + method: POST + uri: https://storage.googleapis.com/upload/storage/v1/b/calitp-staging-pytest/o?uploadType=multipart + response: + body: + string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/calendar_dates.txt/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/base64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=/calendar_dates.txt/1764978256450221\",\n + \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/calendar_dates.txt%2Fdt=2025-11-13%2Fts=2025-11-13T03:02:04.189504%2B00:00%2Fbase64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=%2Fcalendar_dates.txt\",\n + \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/calendar_dates.txt%2Fdt=2025-11-13%2Fts=2025-11-13T03:02:04.189504%2B00:00%2Fbase64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=%2Fcalendar_dates.txt?generation=1764978256450221&alt=media\",\n + \ \"name\": \"calendar_dates.txt/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/base64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=/calendar_dates.txt\",\n + \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764978256450221\",\n + \ \"metageneration\": \"1\",\n \"contentType\": \"text/csv\",\n \"storageClass\": + \"STANDARD\",\n \"size\": \"32\",\n \"md5Hash\": \"0KGfA+d3FMZsIpiobOW2Ug==\",\n + \ \"crc32c\": \"y2Grog==\",\n \"etag\": \"CK2ljLDQp5EDEAE=\",\n \"timeCreated\": + \"2025-12-05T23:44:16.459Z\",\n \"updated\": \"2025-12-05T23:44:16.459Z\",\n + \ \"timeStorageClassUpdated\": \"2025-12-05T23:44:16.459Z\",\n \"timeFinalized\": + \"2025-12-05T23:44:16.459Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": + \"{\\\"filename\\\": \\\"calendar_dates.txt\\\", \\\"original_filename\\\": + \\\"calendar_dates.txt\\\", \\\"ts\\\": \\\"2025-11-13T00:00:00+00:00\\\", + \\\"extract_config\\\": {\\\"auth_headers\\\": {}, \\\"auth_query_params\\\": + {}, \\\"computed\\\": false, \\\"extracted_at\\\": \\\"2025-11-25T00:00:00+00:00\\\", + \\\"feed_type\\\": \\\"schedule\\\", \\\"name\\\": \\\"Fric and Frac Schedule\\\", + \\\"schedule_url_for_validation\\\": null, \\\"url\\\": \\\"https://www.ips-systems.com/GTFS/Schedule/27\\\"}}\"\n + \ }\n}\n" + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Length: + - '1917' + Content-Type: + - application/json; charset=UTF-8 + Date: + - Fri, 05 Dec 2025 23:44:16 GMT + ETag: + - CK2ljLDQp5EDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AHVrFxMocjXM5zhrTIIjfnDekWk0vwI1P8DNpci7msgsfJ0I6vJi58exFYklrPoW3jmOQEqdDRKAsC8 + status: + code: 200 + message: OK +- request: + body: "--===============4821485549544354456==\r\ncontent-type: application/json; + charset=UTF-8\r\n\r\n{\"name\": \"unzipping_results/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl\", + \"metadata\": {\"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"results.jsonl\\\", + \\\"ts\\\": \\\"2025-11-13T00:00:00+00:00\\\"}\"}}\r\n--===============4821485549544354456==\r\ncontent-type: + application/jsonl\r\n\r\n{\"success\":true,\"exception\":null,\"extract\":{\"filename\":\"gtfs.zip\",\"ts\":\"2025-11-14T00:00:00+00:00\",\"config\":{\"auth_headers\":{},\"auth_query_params\":{},\"computed\":false,\"extracted_at\":\"2025-11-25T00:00:00+00:00\",\"feed_type\":\"schedule\",\"name\":\"Fric + and Frac Schedule\",\"schedule_url_for_validation\":null,\"url\":\"https://www.ips-systems.com/GTFS/Schedule/27\"},\"response_code\":200,\"response_headers\":{\"Content-Type\":\"application/zip\",\"Content-Disposition\":\"attachment; + filename=schedule-27.zip\"},\"reconstructed\":false},\"zipfile_extract_md5hash\":\"833f5a292eed717823acf709b2548a2b\",\"zipfile_files\":[\"agency.txt\",\"calendar.txt\",\"calendar_dates.txt\",\"feed_info.txt\",\"routes.txt\",\"shapes.txt\",\"stop_times.txt\",\"stops.txt\",\"trips.txt\"],\"zipfile_dirs\":[],\"extracted_files\":[{\"filename\":\"calendar_dates.txt\",\"original_filename\":\"calendar_dates.txt\",\"ts\":\"2025-11-13T00:00:00+00:00\",\"extract_config\":{\"auth_headers\":{},\"auth_query_params\":{},\"computed\":false,\"extracted_at\":\"2025-11-25T00:00:00+00:00\",\"feed_type\":\"schedule\",\"name\":\"Fric + and Frac Schedule\",\"schedule_url_for_validation\":null,\"url\":\"https://www.ips-systems.com/GTFS/Schedule/27\"}}]}\r\n--===============4821485549544354456==--" + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - FILTERED + Connection: + - keep-alive + Content-Length: + - '1609' + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/a87ad9b0-80ff-4a34-a9b0-215178f4c37e + content-type: + - !!binary | + bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT00ODIxNDg1NTQ5NTQ0 + MzU0NDU2PT0i + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - application/jsonl + method: POST + uri: https://storage.googleapis.com/upload/storage/v1/b/calitp-staging-pytest/o?uploadType=multipart + response: + body: + string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/unzipping_results/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl/1764978257764330\",\n + \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/unzipping_results%2Fdt=2025-11-13%2Fts=2025-11-13T03:02:04.189504%2B00:00%2FaHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl\",\n + \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/unzipping_results%2Fdt=2025-11-13%2Fts=2025-11-13T03:02:04.189504%2B00:00%2FaHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl?generation=1764978257764330&alt=media\",\n + \ \"name\": \"unzipping_results/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl\",\n + \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764978257764330\",\n + \ \"metageneration\": \"1\",\n \"contentType\": \"application/jsonl\",\n + \ \"storageClass\": \"STANDARD\",\n \"size\": \"1132\",\n \"md5Hash\": \"CoYJbqPPdq0tvmFUm1dEOA==\",\n + \ \"crc32c\": \"XMSMiw==\",\n \"etag\": \"COq/3LDQp5EDEAE=\",\n \"timeCreated\": + \"2025-12-05T23:44:17.773Z\",\n \"updated\": \"2025-12-05T23:44:17.773Z\",\n + \ \"timeStorageClassUpdated\": \"2025-12-05T23:44:17.773Z\",\n \"timeFinalized\": + \"2025-12-05T23:44:17.773Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": + \"{\\\"filename\\\": \\\"results.jsonl\\\", \\\"ts\\\": \\\"2025-11-13T00:00:00+00:00\\\"}\"\n + \ }\n}\n" + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Length: + - '1466' + Content-Type: + - application/json; charset=UTF-8 + Date: + - Fri, 05 Dec 2025 23:44:17 GMT + ETag: + - COq/3LDQp5EDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AHVrFxNjtNe5MJLLvW8NgYv9MN_cQeNe3xiXnpxJN650zqIZIoeHZoo87IbcsnV5Xuok9yqoDBp80Fc + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Authorization: + - FILTERED + Connection: + - keep-alive + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/f09f8407-e079-4764-a977-b6e6aa718526 + accept-encoding: + - gzip + content-type: + - application/json; charset=UTF-8 + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - application/json; charset=UTF-8 + method: GET + uri: https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/schedule%2Fdt%3D2025-11-13%2Fts%3D2025-11-13T03%3A02%3A04.189504%2B00%3A00%2Fbase64_url%3DaHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc%3D%2Fschedule-27.zip?alt=media + response: + body: + string: !!binary | + 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 + LnR4dFBLBQYAAAAACQAJAAcCAADIBQAAAAA= + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Disposition: + - attachment + Content-Length: + - '2021' + Content-Type: + - application/octet-stream + Date: + - Fri, 05 Dec 2025 23:44:19 GMT + ETag: + - CImN3PSMoJEDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Last-Modified: + - Tue, 02 Dec 2025 23:53:48 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AHVrFxNKhr_T6vMJl8cyeu2edAjmLqWT9CqTe5IOijSLEHuYFNIPjVDVuJsug9bwFRH8ogzU + X-Goog-Generation: + - '1764719628584585' + X-Goog-Hash: + - crc32c=F3bKVw==,md5=6mIsSfEakt9Z1A6l2fy9Eg== + X-Goog-Metageneration: + - '1' + X-Goog-Storage-Class: + - STANDARD + X-Goog-Stored-Content-Encoding: + - identity + X-Goog-Stored-Content-Length: + - '2021' + status: + code: 200 + message: OK +- request: + body: "--===============1357895405803635621==\r\ncontent-type: application/json; + charset=UTF-8\r\n\r\n{\"name\": \"calendar_dates.txt/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/base64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=/calendar_dates.txt\", + \"metadata\": {\"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"calendar_dates.txt\\\", + \\\"original_filename\\\": \\\"calendar_dates.txt\\\", \\\"ts\\\": \\\"2025-11-14T00:00:00+00:00\\\", + \\\"extract_config\\\": {\\\"auth_headers\\\": {}, \\\"auth_query_params\\\": + {}, \\\"computed\\\": false, \\\"extracted_at\\\": \\\"2025-11-25T00:00:00+00:00\\\", + \\\"feed_type\\\": \\\"schedule\\\", \\\"name\\\": \\\"Fric and Frac Schedule\\\", + \\\"schedule_url_for_validation\\\": null, \\\"url\\\": \\\"https://www.ips-systems.com/GTFS/Schedule/27\\\"}}\"}}\r\n--===============1357895405803635621==\r\ncontent-type: + text/csv\r\n\r\nservice_id,date,exception_type\r\n\r\n--===============1357895405803635621==--" + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - FILTERED + Connection: + - keep-alive + Content-Length: + - '883' + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/c3ba6e1a-9de9-4fd6-92d2-a56c89474753 + content-type: + - !!binary | + bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT0xMzU3ODk1NDA1ODAz + NjM1NjIxPT0i + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - text/csv + method: POST + uri: https://storage.googleapis.com/upload/storage/v1/b/calitp-staging-pytest/o?uploadType=multipart + response: + body: + string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/calendar_dates.txt/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/base64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=/calendar_dates.txt/1764978260199083\",\n + \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/calendar_dates.txt%2Fdt=2025-11-13%2Fts=2025-11-13T03:02:04.189504%2B00:00%2Fbase64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=%2Fcalendar_dates.txt\",\n + \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/calendar_dates.txt%2Fdt=2025-11-13%2Fts=2025-11-13T03:02:04.189504%2B00:00%2Fbase64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=%2Fcalendar_dates.txt?generation=1764978260199083&alt=media\",\n + \ \"name\": \"calendar_dates.txt/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/base64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=/calendar_dates.txt\",\n + \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764978260199083\",\n + \ \"metageneration\": \"1\",\n \"contentType\": \"text/csv\",\n \"storageClass\": + \"STANDARD\",\n \"size\": \"32\",\n \"md5Hash\": \"0KGfA+d3FMZsIpiobOW2Ug==\",\n + \ \"crc32c\": \"y2Grog==\",\n \"etag\": \"CKuN8bHQp5EDEAE=\",\n \"timeCreated\": + \"2025-12-05T23:44:20.208Z\",\n \"updated\": \"2025-12-05T23:44:20.208Z\",\n + \ \"timeStorageClassUpdated\": \"2025-12-05T23:44:20.208Z\",\n \"timeFinalized\": + \"2025-12-05T23:44:20.208Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": + \"{\\\"filename\\\": \\\"calendar_dates.txt\\\", \\\"original_filename\\\": + \\\"calendar_dates.txt\\\", \\\"ts\\\": \\\"2025-11-14T00:00:00+00:00\\\", + \\\"extract_config\\\": {\\\"auth_headers\\\": {}, \\\"auth_query_params\\\": + {}, \\\"computed\\\": false, \\\"extracted_at\\\": \\\"2025-11-25T00:00:00+00:00\\\", + \\\"feed_type\\\": \\\"schedule\\\", \\\"name\\\": \\\"Fric and Frac Schedule\\\", + \\\"schedule_url_for_validation\\\": null, \\\"url\\\": \\\"https://www.ips-systems.com/GTFS/Schedule/27\\\"}}\"\n + \ }\n}\n" + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Length: + - '1917' + Content-Type: + - application/json; charset=UTF-8 + Date: + - Fri, 05 Dec 2025 23:44:20 GMT + ETag: + - CKuN8bHQp5EDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AHVrFxNK3byGv1AMUYnsMRWWAONLPRlCFyGQFP0spga9i455hOldcmLKXI813FQsvapBYsi9SpU9OBI + status: + code: 200 + message: OK +- request: + body: "--===============3938115389443919447==\r\ncontent-type: application/json; + charset=UTF-8\r\n\r\n{\"name\": \"unzipping_results/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl\", + \"metadata\": {\"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"results.jsonl\\\", + \\\"ts\\\": \\\"2025-11-14T00:00:00+00:00\\\"}\"}}\r\n--===============3938115389443919447==\r\ncontent-type: + application/jsonl\r\n\r\n{\"success\":true,\"exception\":null,\"extract\":{\"filename\":\"gtfs.zip\",\"ts\":\"2025-11-14T00:00:00+00:00\",\"config\":{\"auth_headers\":{},\"auth_query_params\":{},\"computed\":false,\"extracted_at\":\"2025-11-25T00:00:00+00:00\",\"feed_type\":\"schedule\",\"name\":\"Fric + and Frac Schedule\",\"schedule_url_for_validation\":null,\"url\":\"https://www.ips-systems.com/GTFS/Schedule/27\"},\"response_code\":200,\"response_headers\":{\"Content-Type\":\"application/zip\",\"Content-Disposition\":\"attachment; + filename=schedule-27.zip\"},\"reconstructed\":false},\"zipfile_extract_md5hash\":\"833f5a292eed717823acf709b2548a2b\",\"zipfile_files\":[\"agency.txt\",\"calendar.txt\",\"calendar_dates.txt\",\"feed_info.txt\",\"routes.txt\",\"shapes.txt\",\"stop_times.txt\",\"stops.txt\",\"trips.txt\"],\"zipfile_dirs\":[],\"extracted_files\":[{\"filename\":\"calendar_dates.txt\",\"original_filename\":\"calendar_dates.txt\",\"ts\":\"2025-11-14T00:00:00+00:00\",\"extract_config\":{\"auth_headers\":{},\"auth_query_params\":{},\"computed\":false,\"extracted_at\":\"2025-11-25T00:00:00+00:00\",\"feed_type\":\"schedule\",\"name\":\"Fric + and Frac Schedule\",\"schedule_url_for_validation\":null,\"url\":\"https://www.ips-systems.com/GTFS/Schedule/27\"}}]}\r\n--===============3938115389443919447==--" + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - FILTERED + Connection: + - keep-alive + Content-Length: + - '1609' + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/75fac958-8601-4988-be63-39eeeb884635 + content-type: + - !!binary | + bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT0zOTM4MTE1Mzg5NDQz + OTE5NDQ3PT0i + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - application/jsonl + method: POST + uri: https://storage.googleapis.com/upload/storage/v1/b/calitp-staging-pytest/o?uploadType=multipart + response: + body: + string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/unzipping_results/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl/1764978261388729\",\n + \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/unzipping_results%2Fdt=2025-11-13%2Fts=2025-11-13T03:02:04.189504%2B00:00%2FaHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl\",\n + \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/unzipping_results%2Fdt=2025-11-13%2Fts=2025-11-13T03:02:04.189504%2B00:00%2FaHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl?generation=1764978261388729&alt=media\",\n + \ \"name\": \"unzipping_results/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl\",\n + \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764978261388729\",\n + \ \"metageneration\": \"1\",\n \"contentType\": \"application/jsonl\",\n + \ \"storageClass\": \"STANDARD\",\n \"size\": \"1132\",\n \"md5Hash\": \"HQGn3JxjJikD3Mx8rtGAsg==\",\n + \ \"crc32c\": \"Ob/4Ag==\",\n \"etag\": \"CLnbubLQp5EDEAE=\",\n \"timeCreated\": + \"2025-12-05T23:44:21.397Z\",\n \"updated\": \"2025-12-05T23:44:21.397Z\",\n + \ \"timeStorageClassUpdated\": \"2025-12-05T23:44:21.397Z\",\n \"timeFinalized\": + \"2025-12-05T23:44:21.397Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": + \"{\\\"filename\\\": \\\"results.jsonl\\\", \\\"ts\\\": \\\"2025-11-14T00:00:00+00:00\\\"}\"\n + \ }\n}\n" + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Length: + - '1466' + Content-Type: + - application/json; charset=UTF-8 + Date: + - Fri, 05 Dec 2025 23:44:21 GMT + ETag: + - CLnbubLQp5EDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AHVrFxNbqaipXpAiZTSJYqNFkneG6_S5bQ7vgwB0Ee0GJ-iyTq-rBRGlOYN97GFymOfj1fSnYaKDErk + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Authorization: + - FILTERED + Connection: + - keep-alive + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/093f373f-462a-477e-8db6-afd3e8578e47 + accept-encoding: + - gzip + content-type: + - application/json; charset=UTF-8 + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - application/json; charset=UTF-8 + method: GET + uri: https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/calendar_dates.txt%2Fdt%3D2025-11-13%2Fts%3D2025-11-13T03%3A02%3A04.189504%2B00%3A00%2Fbase64_url%3DaHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc%3D%2Fcalendar_dates.txt?alt=media + response: + body: + string: "service_id,date,exception_type\r\n" + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Disposition: + - attachment + Content-Length: + - '32' + Content-Type: + - text/csv + Date: + - Fri, 05 Dec 2025 23:44:22 GMT + ETag: + - CKuN8bHQp5EDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Last-Modified: + - Fri, 05 Dec 2025 23:44:20 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AHVrFxPgvDzFmflzJ-XBLI_bsVyfAb_h1cjS6FWwg3o6-zjcXhROGNFkrsDgbFT8YZ-t6f5Rp3EFX6U + X-Goog-Generation: + - '1764978260199083' + X-Goog-Hash: + - crc32c=y2Grog==,md5=0KGfA+d3FMZsIpiobOW2Ug== + X-Goog-Metageneration: + - '1' + X-Goog-Storage-Class: + - STANDARD + X-Goog-Stored-Content-Encoding: + - identity + X-Goog-Stored-Content-Length: + - '32' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip + Authorization: + - FILTERED + Connection: + - keep-alive + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/4d2b566e-a319-41df-93a8-665e8a608127 + x-goog-user-project: + - cal-itp-data-infra-staging + method: GET + uri: https://storage.googleapis.com/storage/v1/b/calitp-staging-pytest/o/calendar_dates.txt%2Fdt%3D2025-11-13%2Fts%3D2025-11-13T03%3A02%3A04.189504%2B00%3A00%2Fbase64_url%3DaHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc%3D%2Fcalendar_dates.txt?prettyPrint=false&projection=noAcl + response: + body: + string: '{"kind":"storage#object","id":"calitp-staging-pytest/calendar_dates.txt/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/base64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=/calendar_dates.txt/1764978260199083","selfLink":"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/calendar_dates.txt%2Fdt=2025-11-13%2Fts=2025-11-13T03:02:04.189504%2B00:00%2Fbase64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=%2Fcalendar_dates.txt","mediaLink":"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/calendar_dates.txt%2Fdt=2025-11-13%2Fts=2025-11-13T03:02:04.189504%2B00:00%2Fbase64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=%2Fcalendar_dates.txt?generation=1764978260199083&alt=media","name":"calendar_dates.txt/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/base64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=/calendar_dates.txt","bucket":"calitp-staging-pytest","generation":"1764978260199083","metageneration":"1","contentType":"text/csv","storageClass":"STANDARD","size":"32","md5Hash":"0KGfA+d3FMZsIpiobOW2Ug==","crc32c":"y2Grog==","etag":"CKuN8bHQp5EDEAE=","timeCreated":"2025-12-05T23:44:20.208Z","updated":"2025-12-05T23:44:20.208Z","timeStorageClassUpdated":"2025-12-05T23:44:20.208Z","timeFinalized":"2025-12-05T23:44:20.208Z","metadata":{"PARTITIONED_ARTIFACT_METADATA":"{\"filename\": + \"calendar_dates.txt\", \"original_filename\": \"calendar_dates.txt\", \"ts\": + \"2025-11-14T00:00:00+00:00\", \"extract_config\": {\"auth_headers\": {}, + \"auth_query_params\": {}, \"computed\": false, \"extracted_at\": \"2025-11-25T00:00:00+00:00\", + \"feed_type\": \"schedule\", \"name\": \"Fric and Frac Schedule\", \"schedule_url_for_validation\": + null, \"url\": \"https://www.ips-systems.com/GTFS/Schedule/27\"}}"}}' + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - private, max-age=0, must-revalidate, no-transform + Content-Length: + - '1830' + Content-Type: + - application/json; charset=UTF-8 + Date: + - Fri, 05 Dec 2025 23:44:22 GMT + ETag: + - CKuN8bHQp5EDEAE= + Expires: + - Fri, 05 Dec 2025 23:44:22 GMT + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AHVrFxMlUq6am7axc5SfE2uv0xGBiDSKD_X-jyWngoprbc2aXaycuAS5Dn7HxDS9m3bWJeBtj-XTiWQ + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Authorization: + - FILTERED + Connection: + - keep-alive + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/c5fd8eeb-ec10-4f08-8f85-a27658ab15e4 + accept-encoding: + - gzip + content-type: + - application/json; charset=UTF-8 + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - application/json; charset=UTF-8 + method: GET + uri: https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/unzipping_results%2Fdt%3D2025-11-13%2Fts%3D2025-11-13T03%3A02%3A04.189504%2B00%3A00%2FaHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc%3D.jsonl?alt=media + response: + body: + string: '{"success":true,"exception":null,"extract":{"filename":"gtfs.zip","ts":"2025-11-14T00:00:00+00:00","config":{"auth_headers":{},"auth_query_params":{},"computed":false,"extracted_at":"2025-11-25T00:00:00+00:00","feed_type":"schedule","name":"Fric + and Frac Schedule","schedule_url_for_validation":null,"url":"https://www.ips-systems.com/GTFS/Schedule/27"},"response_code":200,"response_headers":{"Content-Type":"application/zip","Content-Disposition":"attachment; + filename=schedule-27.zip"},"reconstructed":false},"zipfile_extract_md5hash":"833f5a292eed717823acf709b2548a2b","zipfile_files":["agency.txt","calendar.txt","calendar_dates.txt","feed_info.txt","routes.txt","shapes.txt","stop_times.txt","stops.txt","trips.txt"],"zipfile_dirs":[],"extracted_files":[{"filename":"calendar_dates.txt","original_filename":"calendar_dates.txt","ts":"2025-11-14T00:00:00+00:00","extract_config":{"auth_headers":{},"auth_query_params":{},"computed":false,"extracted_at":"2025-11-25T00:00:00+00:00","feed_type":"schedule","name":"Fric + and Frac Schedule","schedule_url_for_validation":null,"url":"https://www.ips-systems.com/GTFS/Schedule/27"}}]}' + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Disposition: + - attachment + Content-Length: + - '1132' + Content-Type: + - application/jsonl + Date: + - Fri, 05 Dec 2025 23:44:23 GMT + ETag: + - CLnbubLQp5EDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Last-Modified: + - Fri, 05 Dec 2025 23:44:21 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AHVrFxP5orEYue5FnoXT_UQqJFtlB0rPUhymb6slrWMQuUvfl0Vq0mgqRbJvqde3Qt8SrlXMrfZt7Cw + X-Goog-Generation: + - '1764978261388729' + X-Goog-Hash: + - crc32c=Ob/4Ag==,md5=HQGn3JxjJikD3Mx8rtGAsg== + X-Goog-Metageneration: + - '1' + X-Goog-Storage-Class: + - STANDARD + X-Goog-Stored-Content-Encoding: + - identity + X-Goog-Stored-Content-Length: + - '1132' + status: + code: 200 + message: OK +version: 1 diff --git a/airflow/tests/operators/cassettes/test_unzip_gtfs_to_gcs_operator/TestUnzipGTFSToGCSOperator.test_execute.yaml b/airflow/tests/operators/cassettes/test_unzip_gtfs_to_gcs_operator/TestUnzipGTFSToGCSOperator.test_execute.yaml index 99d9bd607f..71c6c44198 100644 --- a/airflow/tests/operators/cassettes/test_unzip_gtfs_to_gcs_operator/TestUnzipGTFSToGCSOperator.test_execute.yaml +++ b/airflow/tests/operators/cassettes/test_unzip_gtfs_to_gcs_operator/TestUnzipGTFSToGCSOperator.test_execute.yaml @@ -9,10 +9,10 @@ interactions: Connection: - keep-alive User-Agent: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 X-Goog-API-Client: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 - gccl-invocation-id/3d88f461-b842-46fa-8c78-e6044214c0b5 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/f823b4ec-b9ab-43dc-b3fa-67980b01a193 accept-encoding: - gzip content-type: @@ -469,13 +469,13 @@ interactions: Content-Type: - application/zip Date: - - Tue, 25 Nov 2025 18:01:31 GMT + - Fri, 05 Dec 2025 23:43:56 GMT ETag: - - CIvmvZTljZEDEAE= + - COyv5eT6jZEDEAE= Expires: - Mon, 01 Jan 1990 00:00:00 GMT Last-Modified: - - Tue, 25 Nov 2025 17:08:02 GMT + - Tue, 25 Nov 2025 18:44:48 GMT Pragma: - no-cache Server: @@ -484,9 +484,9 @@ interactions: - Origin - X-Origin X-GUploader-UploadID: - - AOCedOGTZegIFUD0II3bGJRF3KeySf0ZdBa_nUNjQlH1B0yked8e0tWpO-g429Z3UrmKpOfnm7dmgA + - AHVrFxMmzomSPrsRcF8k5W4jBSMT9AB0wzk5IaEtiGEXCe6kkts-ZsRkcw1W4d0v6Z1fC1PBP0b9Jug X-Goog-Generation: - - '1764090482488075' + - '1764096288053228' X-Goog-Hash: - crc32c=lxCKqA==,md5=zsRgt7THKTNwu3SMKXUNQQ== X-Goog-Metageneration: @@ -501,7 +501,7 @@ interactions: code: 200 message: OK - request: - body: "--===============3049731174694610593==\r\ncontent-type: application/json; + body: "--===============2816657218653981886==\r\ncontent-type: application/json; charset=UTF-8\r\n\r\n{\"name\": \"agency.txt/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/agency.txt\", \"metadata\": {\"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"agency.txt\\\", \\\"original_filename\\\": \\\"agency.txt\\\", \\\"ts\\\": \\\"2025-06-02T00:00:00+00:00\\\", @@ -509,9 +509,9 @@ interactions: {}, \\\"computed\\\": false, \\\"feed_type\\\": \\\"schedule\\\", \\\"name\\\": \\\"Santa Ynez Mecatran Schedule\\\", \\\"schedule_url_for_validation\\\": null, \\\"url\\\": \\\"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\\\", - \\\"extracted_at\\\": \\\"2025-06-01T00:00:00+00:00\\\"}}\"}}\r\n--===============3049731174694610593==\r\ncontent-type: + \\\"extracted_at\\\": \\\"2025-06-01T00:00:00+00:00\\\"}}\"}}\r\n--===============2816657218653981886==\r\ncontent-type: text/csv\r\n\r\nagency_id,agency_name,agency_url,agency_timezone,agency_phone,agency_lang,agency_fare_url,agency_email,agency_primary\r\n11214031,Santa - Ynez Valley Transit,https://www.syvt.com/489/Santa-Ynez-Valley-Transit,America/Los_Angeles,805-688-5452,en,https://www.syvt.com/365/Fares,,1\r\n\r\n--===============3049731174694610593==--" + Ynez Valley Transit,https://www.syvt.com/489/Santa-Ynez-Valley-Transit,America/Los_Angeles,805-688-5452,en,https://www.syvt.com/365/Fares,,1\r\n\r\n--===============2816657218653981886==--" headers: Accept: - application/json @@ -524,14 +524,14 @@ interactions: Content-Length: - '1338' User-Agent: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 X-Goog-API-Client: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 - gccl-invocation-id/1ae18c22-6e24-4799-88c8-7d8dbde5d414 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/6e47c82f-ada1-41f7-a0e0-5772b4f6276a content-type: - !!binary | - bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT0zMDQ5NzMxMTc0Njk0 - NjEwNTkzPT0i + bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT0yODE2NjU3MjE4NjUz + OTgxODg2PT0i x-goog-user-project: - cal-itp-data-infra-staging x-upload-content-type: @@ -540,17 +540,17 @@ interactions: uri: https://storage.googleapis.com/upload/storage/v1/b/calitp-staging-pytest/o?uploadType=multipart response: body: - string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/agency.txt/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/agency.txt/1764093692893786\",\n + string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/agency.txt/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/agency.txt/1764978237813532\",\n \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/agency.txt%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fagency.txt\",\n - \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/agency.txt%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fagency.txt?generation=1764093692893786&alt=media\",\n + \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/agency.txt%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fagency.txt?generation=1764978237813532&alt=media\",\n \ \"name\": \"agency.txt/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/agency.txt\",\n - \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764093692893786\",\n + \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764978237813532\",\n \ \"metageneration\": \"1\",\n \"contentType\": \"text/csv\",\n \"storageClass\": \"STANDARD\",\n \"size\": \"276\",\n \"md5Hash\": \"aqpn1jk7QQDHHuToKpUZKA==\",\n - \ \"crc32c\": \"e6O0zg==\",\n \"etag\": \"CNq0qY/xjZEDEAE=\",\n \"timeCreated\": - \"2025-11-25T18:01:32.905Z\",\n \"updated\": \"2025-11-25T18:01:32.905Z\",\n - \ \"timeStorageClassUpdated\": \"2025-11-25T18:01:32.905Z\",\n \"timeFinalized\": - \"2025-11-25T18:01:32.905Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": + \ \"crc32c\": \"e6O0zg==\",\n \"etag\": \"CJzmmqfQp5EDEAE=\",\n \"timeCreated\": + \"2025-12-05T23:43:57.826Z\",\n \"updated\": \"2025-12-05T23:43:57.826Z\",\n + \ \"timeStorageClassUpdated\": \"2025-12-05T23:43:57.826Z\",\n \"timeFinalized\": + \"2025-12-05T23:43:57.826Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"agency.txt\\\", \\\"original_filename\\\": \\\"agency.txt\\\", \\\"ts\\\": \\\"2025-06-02T00:00:00+00:00\\\", \\\"extract_config\\\": {\\\"auth_headers\\\": {}, \\\"auth_query_params\\\": {}, \\\"computed\\\": false, \\\"feed_type\\\": @@ -567,9 +567,9 @@ interactions: Content-Type: - application/json; charset=UTF-8 Date: - - Tue, 25 Nov 2025 18:01:32 GMT + - Fri, 05 Dec 2025 23:43:57 GMT ETag: - - CNq0qY/xjZEDEAE= + - CJzmmqfQp5EDEAE= Expires: - Mon, 01 Jan 1990 00:00:00 GMT Pragma: @@ -580,19 +580,103 @@ interactions: - Origin - X-Origin X-GUploader-UploadID: - - AOCedOFMdsVsXQ7-7dDefd4b6L0263NbD7TisoCBRjj14bIY0qxXY38XVynSx3D0pr7cmokonEqmeQ + - AOCedOHyAGkXnJgxmR3Yxnh2edOnUy6-4pGghVe_ICje5UuYJmxEW4dHLyJoJgvoQm5Dii9KLr7oXG7KZ7_V status: code: 200 message: OK - request: - body: "--===============4793848712449786191==\r\ncontent-type: application/json; - charset=UTF-8\r\n\r\n{\"name\": \"unzipping_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/agency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\", + body: "--===============2602151138725968462==\r\ncontent-type: application/json; + charset=UTF-8\r\n\r\n{\"name\": \"calendar.txt/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/calendar.txt\", + \"metadata\": {\"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"calendar.txt\\\", + \\\"original_filename\\\": \\\"calendar.txt\\\", \\\"ts\\\": \\\"2025-06-02T00:00:00+00:00\\\", + \\\"extract_config\\\": {\\\"auth_headers\\\": {}, \\\"auth_query_params\\\": + {}, \\\"computed\\\": false, \\\"feed_type\\\": \\\"schedule\\\", \\\"name\\\": + \\\"Santa Ynez Mecatran Schedule\\\", \\\"schedule_url_for_validation\\\": null, + \\\"url\\\": \\\"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\\\", + \\\"extracted_at\\\": \\\"2025-06-01T00:00:00+00:00\\\"}}\"}}\r\n--===============2602151138725968462==\r\ncontent-type: + text/csv\r\n\r\nservice_id,monday,tuesday,wednesday,thursday,friday,saturday,sunday,start_date,end_date,service_name\r\n11219341,1,1,1,1,1,1,0,20250401,20250503,mon-sat_ends_50325\r\n26003882,1,1,1,1,1,0,0,20250505,20260831,mon-sat_start_050525\r\n\r\n--===============2602151138725968462==--" + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - FILTERED + Connection: + - keep-alive + Content-Length: + - '1296' + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/216457aa-b340-4fd7-9e50-b98ef9c6ea74 + content-type: + - !!binary | + bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT0yNjAyMTUxMTM4NzI1 + OTY4NDYyPT0i + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - text/csv + method: POST + uri: https://storage.googleapis.com/upload/storage/v1/b/calitp-staging-pytest/o?uploadType=multipart + response: + body: + string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/calendar.txt/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/calendar.txt/1764978239067567\",\n + \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/calendar.txt%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fcalendar.txt\",\n + \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/calendar.txt%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fcalendar.txt?generation=1764978239067567&alt=media\",\n + \ \"name\": \"calendar.txt/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/calendar.txt\",\n + \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764978239067567\",\n + \ \"metageneration\": \"1\",\n \"contentType\": \"text/csv\",\n \"storageClass\": + \"STANDARD\",\n \"size\": \"226\",\n \"md5Hash\": \"vyr4Be4UsrwP2Iv7KT8r7Q==\",\n + \ \"crc32c\": \"/ynvUA==\",\n \"etag\": \"CK+r56fQp5EDEAE=\",\n \"timeCreated\": + \"2025-12-05T23:43:59.086Z\",\n \"updated\": \"2025-12-05T23:43:59.086Z\",\n + \ \"timeStorageClassUpdated\": \"2025-12-05T23:43:59.086Z\",\n \"timeFinalized\": + \"2025-12-05T23:43:59.086Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": + \"{\\\"filename\\\": \\\"calendar.txt\\\", \\\"original_filename\\\": \\\"calendar.txt\\\", + \\\"ts\\\": \\\"2025-06-02T00:00:00+00:00\\\", \\\"extract_config\\\": {\\\"auth_headers\\\": + {}, \\\"auth_query_params\\\": {}, \\\"computed\\\": false, \\\"feed_type\\\": + \\\"schedule\\\", \\\"name\\\": \\\"Santa Ynez Mecatran Schedule\\\", \\\"schedule_url_for_validation\\\": + null, \\\"url\\\": \\\"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\\\", + \\\"extracted_at\\\": \\\"2025-06-01T00:00:00+00:00\\\"}}\"\n }\n}\n" + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Length: + - '2500' + Content-Type: + - application/json; charset=UTF-8 + Date: + - Fri, 05 Dec 2025 23:43:59 GMT + ETag: + - CK+r56fQp5EDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AOCedOElEYNmcQKFQPotkXa120_-Yt8uMBG5Vfp_rF-vr714fiPGgEg59Qzd70Yf6HFPZTBog0xEtrPhShQL + status: + code: 200 + message: OK +- request: + body: "--===============0561537191489272133==\r\ncontent-type: application/json; + charset=UTF-8\r\n\r\n{\"name\": \"unzipping_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\", \"metadata\": {\"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"results.jsonl\\\", - \\\"ts\\\": \\\"2025-06-02T00:00:00+00:00\\\"}\"}}\r\n--===============4793848712449786191==\r\ncontent-type: + \\\"ts\\\": \\\"2025-06-02T00:00:00+00:00\\\"}\"}}\r\n--===============0561537191489272133==\r\ncontent-type: application/jsonl\r\n\r\n{\"success\":true,\"exception\":null,\"extract\":{\"filename\":\"gtfs.zip\",\"ts\":\"2025-06-03T00:00:00+00:00\",\"config\":{\"auth_headers\":{},\"auth_query_params\":{},\"computed\":false,\"feed_type\":\"schedule\",\"name\":\"Santa Ynez Mecatran Schedule\",\"schedule_url_for_validation\":null,\"url\":\"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\",\"extracted_at\":\"2025-06-01T00:00:00+00:00\"},\"response_code\":200,\"response_headers\":{\"Content-Type\":\"application/zip\",\"Content-Disposition\":\"attachment; filename=gtfs.zip\"},\"reconstructed\":false},\"zipfile_extract_md5hash\":\"4f72c84bd3f053ddb929289fa2de7879\",\"zipfile_files\":[\"agency.txt\",\"calendar.txt\",\"calendar_dates.txt\",\"fare_attributes.txt\",\"feed_info.txt\",\"route_directions.txt\",\"routes.txt\",\"shapes.txt\",\"stop_times.txt\",\"stops.txt\",\"transfers.txt\",\"trips.txt\"],\"zipfile_dirs\":[],\"extracted_files\":[{\"filename\":\"agency.txt\",\"original_filename\":\"agency.txt\",\"ts\":\"2025-06-02T00:00:00+00:00\",\"extract_config\":{\"auth_headers\":{},\"auth_query_params\":{},\"computed\":false,\"feed_type\":\"schedule\",\"name\":\"Santa - Ynez Mecatran Schedule\",\"schedule_url_for_validation\":null,\"url\":\"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\",\"extracted_at\":\"2025-06-01T00:00:00+00:00\"}}]}\r\n--===============4793848712449786191==--" + Ynez Mecatran Schedule\",\"schedule_url_for_validation\":null,\"url\":\"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\",\"extracted_at\":\"2025-06-01T00:00:00+00:00\"}},{\"filename\":\"calendar.txt\",\"original_filename\":\"calendar.txt\",\"ts\":\"2025-06-02T00:00:00+00:00\",\"extract_config\":{\"auth_headers\":{},\"auth_query_params\":{},\"computed\":false,\"feed_type\":\"schedule\",\"name\":\"Santa + Ynez Mecatran Schedule\",\"schedule_url_for_validation\":null,\"url\":\"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\",\"extracted_at\":\"2025-06-01T00:00:00+00:00\"}}]}\r\n--===============0561537191489272133==--" headers: Accept: - application/json @@ -603,16 +687,16 @@ interactions: Connection: - keep-alive Content-Length: - - '2011' + - '2469' User-Agent: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 X-Goog-API-Client: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 - gccl-invocation-id/45d2f6ed-3ceb-4a67-89cd-ef6df307b93d + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/0652aecf-7864-4355-8671-176119916d11 content-type: - !!binary | - bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT00NzkzODQ4NzEyNDQ5 - Nzg2MTkxPT0i + bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT0wNTYxNTM3MTkxNDg5 + MjcyMTMzPT0i x-goog-user-project: - cal-itp-data-infra-staging x-upload-content-type: @@ -621,17 +705,17 @@ interactions: uri: https://storage.googleapis.com/upload/storage/v1/b/calitp-staging-pytest/o?uploadType=multipart response: body: - string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/unzipping_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/agency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl/1764093693690210\",\n - \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/unzipping_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fagency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\",\n - \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/unzipping_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fagency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl?generation=1764093693690210&alt=media\",\n - \ \"name\": \"unzipping_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/agency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\",\n - \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764093693690210\",\n + string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/unzipping_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl/1764978240022826\",\n + \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/unzipping_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2FaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\",\n + \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/unzipping_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2FaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl?generation=1764978240022826&alt=media\",\n + \ \"name\": \"unzipping_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\",\n + \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764978240022826\",\n \ \"metageneration\": \"1\",\n \"contentType\": \"application/jsonl\",\n - \ \"storageClass\": \"STANDARD\",\n \"size\": \"1390\",\n \"md5Hash\": \"mAPNXukup7FY1ZqXNoGhhA==\",\n - \ \"crc32c\": \"XhHJ/Q==\",\n \"etag\": \"COKC2o/xjZEDEAE=\",\n \"timeCreated\": - \"2025-11-25T18:01:33.700Z\",\n \"updated\": \"2025-11-25T18:01:33.700Z\",\n - \ \"timeStorageClassUpdated\": \"2025-11-25T18:01:33.700Z\",\n \"timeFinalized\": - \"2025-11-25T18:01:33.700Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": + \ \"storageClass\": \"STANDARD\",\n \"size\": \"1859\",\n \"md5Hash\": \"WwOGREgaoUB+elIXXB/QlA==\",\n + \ \"crc32c\": \"+3iA5g==\",\n \"etag\": \"CKrSoajQp5EDEAE=\",\n \"timeCreated\": + \"2025-12-05T23:44:00.035Z\",\n \"updated\": \"2025-12-05T23:44:00.035Z\",\n + \ \"timeStorageClassUpdated\": \"2025-12-05T23:44:00.035Z\",\n \"timeFinalized\": + \"2025-12-05T23:44:00.035Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"results.jsonl\\\", \\\"ts\\\": \\\"2025-06-02T00:00:00+00:00\\\"}\"\n \ }\n}\n" headers: @@ -640,13 +724,13 @@ interactions: Cache-Control: - no-cache, no-store, max-age=0, must-revalidate Content-Length: - - '2042' + - '1998' Content-Type: - application/json; charset=UTF-8 Date: - - Tue, 25 Nov 2025 18:01:33 GMT + - Fri, 05 Dec 2025 23:44:00 GMT ETag: - - COKC2o/xjZEDEAE= + - CKrSoajQp5EDEAE= Expires: - Mon, 01 Jan 1990 00:00:00 GMT Pragma: @@ -657,7 +741,7 @@ interactions: - Origin - X-Origin X-GUploader-UploadID: - - AOCedOFSj1TR1ur0LKNbaKG_kUhwaGkNY-VRW6_DXrX7Uyh6gkjF222ZePr-nn-jXL9Ef611tk2oGQ + - AOCedOF5Oka0lZkb1ce7jTL5o_05KPAoRjlUoGxFxElvMK75TZ5WFpJ7qfIbtEq6EgHKhu-ZBhj_g3I status: code: 200 message: OK @@ -671,10 +755,10 @@ interactions: Connection: - keep-alive User-Agent: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 X-Goog-API-Client: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 - gccl-invocation-id/aaea28fd-0ddf-44f0-88a1-815cc0e6ed0c + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/6aba49c0-40a3-446d-a825-23c5a9bd840d accept-encoding: - gzip content-type: @@ -1131,13 +1215,13 @@ interactions: Content-Type: - application/zip Date: - - Tue, 25 Nov 2025 18:01:34 GMT + - Fri, 05 Dec 2025 23:44:01 GMT ETag: - - CIvmvZTljZEDEAE= + - COyv5eT6jZEDEAE= Expires: - Mon, 01 Jan 1990 00:00:00 GMT Last-Modified: - - Tue, 25 Nov 2025 17:08:02 GMT + - Tue, 25 Nov 2025 18:44:48 GMT Pragma: - no-cache Server: @@ -1146,9 +1230,9 @@ interactions: - Origin - X-Origin X-GUploader-UploadID: - - AOCedOEXxooeCzWbHLKY_hCYCihAitZz4NGQeztccbnQ3FZvMpew4_1M2K5roENBaobzW1SRV2wApQ + - AHVrFxPU3w2i8oyeUAuWen6rbq273k-M4tebi4TlBcPUciH9G8TwE4Vq9kDt1p7mV_oES2Q1iITxCyQ X-Goog-Generation: - - '1764090482488075' + - '1764096288053228' X-Goog-Hash: - crc32c=lxCKqA==,md5=zsRgt7THKTNwu3SMKXUNQQ== X-Goog-Metageneration: @@ -1163,7 +1247,7 @@ interactions: code: 200 message: OK - request: - body: "--===============0244768334385164634==\r\ncontent-type: application/json; + body: "--===============7497019629131157772==\r\ncontent-type: application/json; charset=UTF-8\r\n\r\n{\"name\": \"agency.txt/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/agency.txt\", \"metadata\": {\"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"agency.txt\\\", \\\"original_filename\\\": \\\"agency.txt\\\", \\\"ts\\\": \\\"2025-06-03T00:00:00+00:00\\\", @@ -1171,9 +1255,9 @@ interactions: {}, \\\"computed\\\": false, \\\"feed_type\\\": \\\"schedule\\\", \\\"name\\\": \\\"Santa Ynez Mecatran Schedule\\\", \\\"schedule_url_for_validation\\\": null, \\\"url\\\": \\\"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\\\", - \\\"extracted_at\\\": \\\"2025-06-01T00:00:00+00:00\\\"}}\"}}\r\n--===============0244768334385164634==\r\ncontent-type: + \\\"extracted_at\\\": \\\"2025-06-01T00:00:00+00:00\\\"}}\"}}\r\n--===============7497019629131157772==\r\ncontent-type: text/csv\r\n\r\nagency_id,agency_name,agency_url,agency_timezone,agency_phone,agency_lang,agency_fare_url,agency_email,agency_primary\r\n11214031,Santa - Ynez Valley Transit,https://www.syvt.com/489/Santa-Ynez-Valley-Transit,America/Los_Angeles,805-688-5452,en,https://www.syvt.com/365/Fares,,1\r\n\r\n--===============0244768334385164634==--" + Ynez Valley Transit,https://www.syvt.com/489/Santa-Ynez-Valley-Transit,America/Los_Angeles,805-688-5452,en,https://www.syvt.com/365/Fares,,1\r\n\r\n--===============7497019629131157772==--" headers: Accept: - application/json @@ -1186,14 +1270,14 @@ interactions: Content-Length: - '1338' User-Agent: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 X-Goog-API-Client: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 - gccl-invocation-id/650d3171-e9c7-4684-8620-68b550d5ce8f + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/59f0dc9a-bd91-400f-a0b3-c8e04f469ce5 content-type: - !!binary | - bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT0wMjQ0NzY4MzM0Mzg1 - MTY0NjM0PT0i + bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT03NDk3MDE5NjI5MTMx + MTU3NzcyPT0i x-goog-user-project: - cal-itp-data-infra-staging x-upload-content-type: @@ -1202,17 +1286,17 @@ interactions: uri: https://storage.googleapis.com/upload/storage/v1/b/calitp-staging-pytest/o?uploadType=multipart response: body: - string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/agency.txt/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/agency.txt/1764093695335004\",\n + string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/agency.txt/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/agency.txt/1764978242702727\",\n \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/agency.txt%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fagency.txt\",\n - \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/agency.txt%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fagency.txt?generation=1764093695335004&alt=media\",\n + \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/agency.txt%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fagency.txt?generation=1764978242702727&alt=media\",\n \ \"name\": \"agency.txt/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/agency.txt\",\n - \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764093695335004\",\n + \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764978242702727\",\n \ \"metageneration\": \"1\",\n \"contentType\": \"text/csv\",\n \"storageClass\": \"STANDARD\",\n \"size\": \"276\",\n \"md5Hash\": \"aqpn1jk7QQDHHuToKpUZKA==\",\n - \ \"crc32c\": \"e6O0zg==\",\n \"etag\": \"CNy0vpDxjZEDEAE=\",\n \"timeCreated\": - \"2025-11-25T18:01:35.342Z\",\n \"updated\": \"2025-11-25T18:01:35.342Z\",\n - \ \"timeStorageClassUpdated\": \"2025-11-25T18:01:35.342Z\",\n \"timeFinalized\": - \"2025-11-25T18:01:35.342Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": + \ \"crc32c\": \"e6O0zg==\",\n \"etag\": \"CIebxanQp5EDEAE=\",\n \"timeCreated\": + \"2025-12-05T23:44:02.713Z\",\n \"updated\": \"2025-12-05T23:44:02.713Z\",\n + \ \"timeStorageClassUpdated\": \"2025-12-05T23:44:02.713Z\",\n \"timeFinalized\": + \"2025-12-05T23:44:02.713Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"agency.txt\\\", \\\"original_filename\\\": \\\"agency.txt\\\", \\\"ts\\\": \\\"2025-06-03T00:00:00+00:00\\\", \\\"extract_config\\\": {\\\"auth_headers\\\": {}, \\\"auth_query_params\\\": {}, \\\"computed\\\": false, \\\"feed_type\\\": @@ -1229,9 +1313,9 @@ interactions: Content-Type: - application/json; charset=UTF-8 Date: - - Tue, 25 Nov 2025 18:01:35 GMT + - Fri, 05 Dec 2025 23:44:02 GMT ETag: - - CNy0vpDxjZEDEAE= + - CIebxanQp5EDEAE= Expires: - Mon, 01 Jan 1990 00:00:00 GMT Pragma: @@ -1242,19 +1326,103 @@ interactions: - Origin - X-Origin X-GUploader-UploadID: - - AOCedOH90qPd592Q6iU6BlJm9go9odTCoEfxXS0Tcai4mIlsKjU212UqZLj_JpgUXK3EY6jXFH17cg + - AHVrFxN-vxY0EcmY-DGqzxmI-ltn9iVcedA-sA2SZooyq2952JApCmiRopr0NTmM1jY_SrCMzxD5o3Q status: code: 200 message: OK - request: - body: "--===============9002238279635707061==\r\ncontent-type: application/json; - charset=UTF-8\r\n\r\n{\"name\": \"unzipping_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/agency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\", + body: "--===============8634087808817537674==\r\ncontent-type: application/json; + charset=UTF-8\r\n\r\n{\"name\": \"calendar.txt/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/calendar.txt\", + \"metadata\": {\"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"calendar.txt\\\", + \\\"original_filename\\\": \\\"calendar.txt\\\", \\\"ts\\\": \\\"2025-06-03T00:00:00+00:00\\\", + \\\"extract_config\\\": {\\\"auth_headers\\\": {}, \\\"auth_query_params\\\": + {}, \\\"computed\\\": false, \\\"feed_type\\\": \\\"schedule\\\", \\\"name\\\": + \\\"Santa Ynez Mecatran Schedule\\\", \\\"schedule_url_for_validation\\\": null, + \\\"url\\\": \\\"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\\\", + \\\"extracted_at\\\": \\\"2025-06-01T00:00:00+00:00\\\"}}\"}}\r\n--===============8634087808817537674==\r\ncontent-type: + text/csv\r\n\r\nservice_id,monday,tuesday,wednesday,thursday,friday,saturday,sunday,start_date,end_date,service_name\r\n11219341,1,1,1,1,1,1,0,20250401,20250503,mon-sat_ends_50325\r\n26003882,1,1,1,1,1,0,0,20250505,20260831,mon-sat_start_050525\r\n\r\n--===============8634087808817537674==--" + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - FILTERED + Connection: + - keep-alive + Content-Length: + - '1296' + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/99b2a9da-a127-4c59-87e8-39bb05e3d736 + content-type: + - !!binary | + bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT04NjM0MDg3ODA4ODE3 + NTM3Njc0PT0i + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - text/csv + method: POST + uri: https://storage.googleapis.com/upload/storage/v1/b/calitp-staging-pytest/o?uploadType=multipart + response: + body: + string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/calendar.txt/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/calendar.txt/1764978243867273\",\n + \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/calendar.txt%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fcalendar.txt\",\n + \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/calendar.txt%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fcalendar.txt?generation=1764978243867273&alt=media\",\n + \ \"name\": \"calendar.txt/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/calendar.txt\",\n + \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764978243867273\",\n + \ \"metageneration\": \"1\",\n \"contentType\": \"text/csv\",\n \"storageClass\": + \"STANDARD\",\n \"size\": \"226\",\n \"md5Hash\": \"vyr4Be4UsrwP2Iv7KT8r7Q==\",\n + \ \"crc32c\": \"/ynvUA==\",\n \"etag\": \"CImljKrQp5EDEAE=\",\n \"timeCreated\": + \"2025-12-05T23:44:03.876Z\",\n \"updated\": \"2025-12-05T23:44:03.876Z\",\n + \ \"timeStorageClassUpdated\": \"2025-12-05T23:44:03.876Z\",\n \"timeFinalized\": + \"2025-12-05T23:44:03.876Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": + \"{\\\"filename\\\": \\\"calendar.txt\\\", \\\"original_filename\\\": \\\"calendar.txt\\\", + \\\"ts\\\": \\\"2025-06-03T00:00:00+00:00\\\", \\\"extract_config\\\": {\\\"auth_headers\\\": + {}, \\\"auth_query_params\\\": {}, \\\"computed\\\": false, \\\"feed_type\\\": + \\\"schedule\\\", \\\"name\\\": \\\"Santa Ynez Mecatran Schedule\\\", \\\"schedule_url_for_validation\\\": + null, \\\"url\\\": \\\"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\\\", + \\\"extracted_at\\\": \\\"2025-06-01T00:00:00+00:00\\\"}}\"\n }\n}\n" + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Length: + - '2500' + Content-Type: + - application/json; charset=UTF-8 + Date: + - Fri, 05 Dec 2025 23:44:03 GMT + ETag: + - CImljKrQp5EDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AHVrFxOkgpgmLLH355U2S66QudG6Z6By57jgyVAd9pLlJH7kzmdVlFsyRrpFCn-cqsvQwugsjxXKqqA + status: + code: 200 + message: OK +- request: + body: "--===============7954757292869422075==\r\ncontent-type: application/json; + charset=UTF-8\r\n\r\n{\"name\": \"unzipping_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\", \"metadata\": {\"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"results.jsonl\\\", - \\\"ts\\\": \\\"2025-06-03T00:00:00+00:00\\\"}\"}}\r\n--===============9002238279635707061==\r\ncontent-type: + \\\"ts\\\": \\\"2025-06-03T00:00:00+00:00\\\"}\"}}\r\n--===============7954757292869422075==\r\ncontent-type: application/jsonl\r\n\r\n{\"success\":true,\"exception\":null,\"extract\":{\"filename\":\"gtfs.zip\",\"ts\":\"2025-06-03T00:00:00+00:00\",\"config\":{\"auth_headers\":{},\"auth_query_params\":{},\"computed\":false,\"feed_type\":\"schedule\",\"name\":\"Santa Ynez Mecatran Schedule\",\"schedule_url_for_validation\":null,\"url\":\"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\",\"extracted_at\":\"2025-06-01T00:00:00+00:00\"},\"response_code\":200,\"response_headers\":{\"Content-Type\":\"application/zip\",\"Content-Disposition\":\"attachment; filename=gtfs.zip\"},\"reconstructed\":false},\"zipfile_extract_md5hash\":\"4f72c84bd3f053ddb929289fa2de7879\",\"zipfile_files\":[\"agency.txt\",\"calendar.txt\",\"calendar_dates.txt\",\"fare_attributes.txt\",\"feed_info.txt\",\"route_directions.txt\",\"routes.txt\",\"shapes.txt\",\"stop_times.txt\",\"stops.txt\",\"transfers.txt\",\"trips.txt\"],\"zipfile_dirs\":[],\"extracted_files\":[{\"filename\":\"agency.txt\",\"original_filename\":\"agency.txt\",\"ts\":\"2025-06-03T00:00:00+00:00\",\"extract_config\":{\"auth_headers\":{},\"auth_query_params\":{},\"computed\":false,\"feed_type\":\"schedule\",\"name\":\"Santa - Ynez Mecatran Schedule\",\"schedule_url_for_validation\":null,\"url\":\"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\",\"extracted_at\":\"2025-06-01T00:00:00+00:00\"}}]}\r\n--===============9002238279635707061==--" + Ynez Mecatran Schedule\",\"schedule_url_for_validation\":null,\"url\":\"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\",\"extracted_at\":\"2025-06-01T00:00:00+00:00\"}},{\"filename\":\"calendar.txt\",\"original_filename\":\"calendar.txt\",\"ts\":\"2025-06-03T00:00:00+00:00\",\"extract_config\":{\"auth_headers\":{},\"auth_query_params\":{},\"computed\":false,\"feed_type\":\"schedule\",\"name\":\"Santa + Ynez Mecatran Schedule\",\"schedule_url_for_validation\":null,\"url\":\"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\",\"extracted_at\":\"2025-06-01T00:00:00+00:00\"}}]}\r\n--===============7954757292869422075==--" headers: Accept: - application/json @@ -1265,16 +1433,16 @@ interactions: Connection: - keep-alive Content-Length: - - '2011' + - '2469' User-Agent: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 X-Goog-API-Client: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 - gccl-invocation-id/2e90beff-df2a-465b-a7f5-d02b2ee46d3d + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/f1a9c4d5-c22c-4280-9dd4-080ad3470923 content-type: - !!binary | - bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT05MDAyMjM4Mjc5NjM1 - NzA3MDYxPT0i + bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT03OTU0NzU3MjkyODY5 + NDIyMDc1PT0i x-goog-user-project: - cal-itp-data-infra-staging x-upload-content-type: @@ -1283,17 +1451,17 @@ interactions: uri: https://storage.googleapis.com/upload/storage/v1/b/calitp-staging-pytest/o?uploadType=multipart response: body: - string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/unzipping_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/agency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl/1764093696180645\",\n - \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/unzipping_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fagency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\",\n - \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/unzipping_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fagency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl?generation=1764093696180645&alt=media\",\n - \ \"name\": \"unzipping_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/agency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\",\n - \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764093696180645\",\n + string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/unzipping_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl/1764978245074481\",\n + \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/unzipping_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2FaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\",\n + \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/unzipping_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2FaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl?generation=1764978245074481&alt=media\",\n + \ \"name\": \"unzipping_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\",\n + \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764978245074481\",\n \ \"metageneration\": \"1\",\n \"contentType\": \"application/jsonl\",\n - \ \"storageClass\": \"STANDARD\",\n \"size\": \"1390\",\n \"md5Hash\": \"Whrb/QrRy9spcPdXM4+kJg==\",\n - \ \"crc32c\": \"c1dguQ==\",\n \"etag\": \"CKWD8pDxjZEDEAE=\",\n \"timeCreated\": - \"2025-11-25T18:01:36.189Z\",\n \"updated\": \"2025-11-25T18:01:36.189Z\",\n - \ \"timeStorageClassUpdated\": \"2025-11-25T18:01:36.189Z\",\n \"timeFinalized\": - \"2025-11-25T18:01:36.189Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": + \ \"storageClass\": \"STANDARD\",\n \"size\": \"1859\",\n \"md5Hash\": \"o3s4H1h3FNuTdshL3/EmWw==\",\n + \ \"crc32c\": \"nt3cSQ==\",\n \"etag\": \"CLH81arQp5EDEAE=\",\n \"timeCreated\": + \"2025-12-05T23:44:05.085Z\",\n \"updated\": \"2025-12-05T23:44:05.085Z\",\n + \ \"timeStorageClassUpdated\": \"2025-12-05T23:44:05.085Z\",\n \"timeFinalized\": + \"2025-12-05T23:44:05.085Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"results.jsonl\\\", \\\"ts\\\": \\\"2025-06-03T00:00:00+00:00\\\"}\"\n \ }\n}\n" headers: @@ -1302,13 +1470,13 @@ interactions: Cache-Control: - no-cache, no-store, max-age=0, must-revalidate Content-Length: - - '2042' + - '1998' Content-Type: - application/json; charset=UTF-8 Date: - - Tue, 25 Nov 2025 18:01:36 GMT + - Fri, 05 Dec 2025 23:44:05 GMT ETag: - - CKWD8pDxjZEDEAE= + - CLH81arQp5EDEAE= Expires: - Mon, 01 Jan 1990 00:00:00 GMT Pragma: @@ -1319,7 +1487,7 @@ interactions: - Origin - X-Origin X-GUploader-UploadID: - - AOCedOGnKCZDwuUyK2iiWX_HTCUPQqZCd4pYN8Yk_dmrRs8FG2xXI_PFQ_yusIlv-6DN_EwRNNzQrw + - AHVrFxMG2CpBPpKzwLaReNBlguCS2pV6o_lx9Grtb2qg8TGIXKaKTxUzF_vGoFLkhWqZRMNqzhEn5J4 status: code: 200 message: OK @@ -1333,10 +1501,10 @@ interactions: Connection: - keep-alive User-Agent: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 X-Goog-API-Client: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 - gccl-invocation-id/c9910607-680c-4dc6-a5ff-f81f0ff42c75 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/cddb59cf-5ba3-403b-9d08-c9bd1c0b864f accept-encoding: - gzip content-type: @@ -1363,13 +1531,13 @@ interactions: Content-Type: - text/csv Date: - - Tue, 25 Nov 2025 18:01:36 GMT + - Fri, 05 Dec 2025 23:44:06 GMT ETag: - - CNy0vpDxjZEDEAE= + - CIebxanQp5EDEAE= Expires: - Mon, 01 Jan 1990 00:00:00 GMT Last-Modified: - - Tue, 25 Nov 2025 18:01:35 GMT + - Fri, 05 Dec 2025 23:44:02 GMT Pragma: - no-cache Server: @@ -1378,9 +1546,9 @@ interactions: - Origin - X-Origin X-GUploader-UploadID: - - AOCedOGOKn-vaE2NgGVLYO1SA5zXyDDS-N-tNqTJIm_-e7ukqb2apUMJu8YfgQkEk37e8PdGZ7HaPg + - AHVrFxM0B_dtphZtnToaSt5XzRdqKpcaSpkE0Rklbh_2CczJiVCzoFXICTDGr3A6qzDgwF0L X-Goog-Generation: - - '1764093695335004' + - '1764978242702727' X-Goog-Hash: - crc32c=e6O0zg==,md5=aqpn1jk7QQDHHuToKpUZKA== X-Goog-Metageneration: @@ -1406,17 +1574,17 @@ interactions: Connection: - keep-alive User-Agent: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 X-Goog-API-Client: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 - gccl-invocation-id/f7e11d74-b1f8-41cb-82df-93550237ae3e + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/e956b82c-847f-4c5d-ba6e-59e0abac0ef0 x-goog-user-project: - cal-itp-data-infra-staging method: GET uri: https://storage.googleapis.com/storage/v1/b/calitp-staging-pytest/o/agency.txt%2Fdt%3D2025-06-02%2Fts%3D2025-06-02T00%3A00%3A00%2B00%3A00%2Fbase64_url%3DaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA%3D%3D%2Fagency.txt?prettyPrint=false&projection=noAcl response: body: - string: '{"kind":"storage#object","id":"calitp-staging-pytest/agency.txt/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/agency.txt/1764093695335004","selfLink":"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/agency.txt%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fagency.txt","mediaLink":"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/agency.txt%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fagency.txt?generation=1764093695335004&alt=media","name":"agency.txt/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/agency.txt","bucket":"calitp-staging-pytest","generation":"1764093695335004","metageneration":"1","contentType":"text/csv","storageClass":"STANDARD","size":"276","md5Hash":"aqpn1jk7QQDHHuToKpUZKA==","crc32c":"e6O0zg==","etag":"CNy0vpDxjZEDEAE=","timeCreated":"2025-11-25T18:01:35.342Z","updated":"2025-11-25T18:01:35.342Z","timeStorageClassUpdated":"2025-11-25T18:01:35.342Z","timeFinalized":"2025-11-25T18:01:35.342Z","metadata":{"PARTITIONED_ARTIFACT_METADATA":"{\"filename\": + string: '{"kind":"storage#object","id":"calitp-staging-pytest/agency.txt/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/agency.txt/1764978242702727","selfLink":"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/agency.txt%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fagency.txt","mediaLink":"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/agency.txt%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fagency.txt?generation=1764978242702727&alt=media","name":"agency.txt/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/agency.txt","bucket":"calitp-staging-pytest","generation":"1764978242702727","metageneration":"1","contentType":"text/csv","storageClass":"STANDARD","size":"276","md5Hash":"aqpn1jk7QQDHHuToKpUZKA==","crc32c":"e6O0zg==","etag":"CIebxanQp5EDEAE=","timeCreated":"2025-12-05T23:44:02.713Z","updated":"2025-12-05T23:44:02.713Z","timeStorageClassUpdated":"2025-12-05T23:44:02.713Z","timeFinalized":"2025-12-05T23:44:02.713Z","metadata":{"PARTITIONED_ARTIFACT_METADATA":"{\"filename\": \"agency.txt\", \"original_filename\": \"agency.txt\", \"ts\": \"2025-06-03T00:00:00+00:00\", \"extract_config\": {\"auth_headers\": {}, \"auth_query_params\": {}, \"computed\": false, \"feed_type\": \"schedule\", \"name\": \"Santa Ynez Mecatran Schedule\", @@ -1432,18 +1600,141 @@ interactions: Content-Type: - application/json; charset=UTF-8 Date: - - Tue, 25 Nov 2025 18:01:37 GMT + - Fri, 05 Dec 2025 23:44:06 GMT + ETag: + - CIebxanQp5EDEAE= + Expires: + - Fri, 05 Dec 2025 23:44:06 GMT + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AHVrFxN9uKDMFLFWmkx6Tu2sQDw5jWiribKPuXurqP0h_LzUZ-14Qjhi9pt_IgDFw95rLRj4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Authorization: + - FILTERED + Connection: + - keep-alive + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/6bc1cca8-ec4d-41b7-880a-25e80a8d9e13 + accept-encoding: + - gzip + content-type: + - application/json; charset=UTF-8 + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - application/json; charset=UTF-8 + method: GET + uri: https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/calendar.txt%2Fdt%3D2025-06-02%2Fts%3D2025-06-02T00%3A00%3A00%2B00%3A00%2Fbase64_url%3DaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA%3D%3D%2Fcalendar.txt?alt=media + response: + body: + string: "service_id,monday,tuesday,wednesday,thursday,friday,saturday,sunday,start_date,end_date,service_name\r\n11219341,1,1,1,1,1,1,0,20250401,20250503,mon-sat_ends_50325\r\n26003882,1,1,1,1,1,0,0,20250505,20260831,mon-sat_start_050525\r\n" + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Disposition: + - attachment + Content-Length: + - '226' + Content-Type: + - text/csv + Date: + - Fri, 05 Dec 2025 23:44:06 GMT + ETag: + - CImljKrQp5EDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Last-Modified: + - Fri, 05 Dec 2025 23:44:03 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AHVrFxNkpAGLezaN2umnTDqBfO4-gaOqJ0fdjZAjKpiTUrDRD-5x_0E2nmWvC948f9sdaPxjVehW1LU + X-Goog-Generation: + - '1764978243867273' + X-Goog-Hash: + - crc32c=/ynvUA==,md5=vyr4Be4UsrwP2Iv7KT8r7Q== + X-Goog-Metageneration: + - '1' + X-Goog-Storage-Class: + - STANDARD + X-Goog-Stored-Content-Encoding: + - identity + X-Goog-Stored-Content-Length: + - '226' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip + Authorization: + - FILTERED + Connection: + - keep-alive + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/849c6b5c-947e-4f5d-9ea0-844c536d680e + x-goog-user-project: + - cal-itp-data-infra-staging + method: GET + uri: https://storage.googleapis.com/storage/v1/b/calitp-staging-pytest/o/calendar.txt%2Fdt%3D2025-06-02%2Fts%3D2025-06-02T00%3A00%3A00%2B00%3A00%2Fbase64_url%3DaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA%3D%3D%2Fcalendar.txt?prettyPrint=false&projection=noAcl + response: + body: + string: '{"kind":"storage#object","id":"calitp-staging-pytest/calendar.txt/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/calendar.txt/1764978243867273","selfLink":"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/calendar.txt%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fcalendar.txt","mediaLink":"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/calendar.txt%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fcalendar.txt?generation=1764978243867273&alt=media","name":"calendar.txt/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/calendar.txt","bucket":"calitp-staging-pytest","generation":"1764978243867273","metageneration":"1","contentType":"text/csv","storageClass":"STANDARD","size":"226","md5Hash":"vyr4Be4UsrwP2Iv7KT8r7Q==","crc32c":"/ynvUA==","etag":"CImljKrQp5EDEAE=","timeCreated":"2025-12-05T23:44:03.876Z","updated":"2025-12-05T23:44:03.876Z","timeStorageClassUpdated":"2025-12-05T23:44:03.876Z","timeFinalized":"2025-12-05T23:44:03.876Z","metadata":{"PARTITIONED_ARTIFACT_METADATA":"{\"filename\": + \"calendar.txt\", \"original_filename\": \"calendar.txt\", \"ts\": \"2025-06-03T00:00:00+00:00\", + \"extract_config\": {\"auth_headers\": {}, \"auth_query_params\": {}, \"computed\": + false, \"feed_type\": \"schedule\", \"name\": \"Santa Ynez Mecatran Schedule\", + \"schedule_url_for_validation\": null, \"url\": \"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\", + \"extracted_at\": \"2025-06-01T00:00:00+00:00\"}}"}}' + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - private, max-age=0, must-revalidate, no-transform + Content-Length: + - '2413' + Content-Type: + - application/json; charset=UTF-8 + Date: + - Fri, 05 Dec 2025 23:44:06 GMT ETag: - - CNy0vpDxjZEDEAE= + - CImljKrQp5EDEAE= Expires: - - Tue, 25 Nov 2025 18:01:37 GMT + - Fri, 05 Dec 2025 23:44:06 GMT Server: - UploadServer Vary: - Origin - X-Origin X-GUploader-UploadID: - - AOCedOFv3MtCwAGhL_C9QTYzZLaX7zpplLkWhlKZbVUY4CTI-rRrAM1raWrSv61-eEX7DDI + - AHVrFxND6bBh19VrzmHwZSoojduL7L3RbtEu2r_AYkBDMhTf-mc8xfG1_J8FyWPeBdm1Ab-A status: code: 200 message: OK @@ -1457,10 +1748,10 @@ interactions: Connection: - keep-alive User-Agent: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 X-Goog-API-Client: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 - gccl-invocation-id/dc6d1191-c020-474d-a1ff-c47d2edc2dc4 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/9a2d472e-625b-41c8-a1ea-d4e568f4d86b accept-encoding: - gzip content-type: @@ -1470,12 +1761,13 @@ interactions: x-upload-content-type: - application/json; charset=UTF-8 method: GET - uri: https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/unzipping_results%2Fdt%3D2025-06-02%2Fts%3D2025-06-02T00%3A00%3A00%2B00%3A00%2Fagency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA%3D%3D.jsonl?alt=media + uri: https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/unzipping_results%2Fdt%3D2025-06-02%2Fts%3D2025-06-02T00%3A00%3A00%2B00%3A00%2FaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA%3D%3D.jsonl?alt=media response: body: string: '{"success":true,"exception":null,"extract":{"filename":"gtfs.zip","ts":"2025-06-03T00:00:00+00:00","config":{"auth_headers":{},"auth_query_params":{},"computed":false,"feed_type":"schedule","name":"Santa Ynez Mecatran Schedule","schedule_url_for_validation":null,"url":"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0","extracted_at":"2025-06-01T00:00:00+00:00"},"response_code":200,"response_headers":{"Content-Type":"application/zip","Content-Disposition":"attachment; filename=gtfs.zip"},"reconstructed":false},"zipfile_extract_md5hash":"4f72c84bd3f053ddb929289fa2de7879","zipfile_files":["agency.txt","calendar.txt","calendar_dates.txt","fare_attributes.txt","feed_info.txt","route_directions.txt","routes.txt","shapes.txt","stop_times.txt","stops.txt","transfers.txt","trips.txt"],"zipfile_dirs":[],"extracted_files":[{"filename":"agency.txt","original_filename":"agency.txt","ts":"2025-06-03T00:00:00+00:00","extract_config":{"auth_headers":{},"auth_query_params":{},"computed":false,"feed_type":"schedule","name":"Santa + Ynez Mecatran Schedule","schedule_url_for_validation":null,"url":"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0","extracted_at":"2025-06-01T00:00:00+00:00"}},{"filename":"calendar.txt","original_filename":"calendar.txt","ts":"2025-06-03T00:00:00+00:00","extract_config":{"auth_headers":{},"auth_query_params":{},"computed":false,"feed_type":"schedule","name":"Santa Ynez Mecatran Schedule","schedule_url_for_validation":null,"url":"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0","extracted_at":"2025-06-01T00:00:00+00:00"}}]}' headers: Alt-Svc: @@ -1485,17 +1777,17 @@ interactions: Content-Disposition: - attachment Content-Length: - - '1390' + - '1859' Content-Type: - application/jsonl Date: - - Tue, 25 Nov 2025 18:01:37 GMT + - Fri, 05 Dec 2025 23:44:07 GMT ETag: - - CKWD8pDxjZEDEAE= + - CLH81arQp5EDEAE= Expires: - Mon, 01 Jan 1990 00:00:00 GMT Last-Modified: - - Tue, 25 Nov 2025 18:01:36 GMT + - Fri, 05 Dec 2025 23:44:05 GMT Pragma: - no-cache Server: @@ -1504,11 +1796,11 @@ interactions: - Origin - X-Origin X-GUploader-UploadID: - - AOCedOGGcwsMVFV0WPoJuwp25iXejz1rSCaSV6YSmh4UrbrLspyFa_L843TNjmdyX-KZ9zZx2Z0XAg + - AHVrFxOeO1toq97S7ZbqauvrmQEfdddWQIZpUu7AdotVPID4bFjd-FXJ8-iu5CJXBBHcVoVMPR7o-2g X-Goog-Generation: - - '1764093696180645' + - '1764978245074481' X-Goog-Hash: - - crc32c=c1dguQ==,md5=Whrb/QrRy9spcPdXM4+kJg== + - crc32c=nt3cSQ==,md5=o3s4H1h3FNuTdshL3/EmWw== X-Goog-Metageneration: - '1' X-Goog-Storage-Class: @@ -1516,7 +1808,7 @@ interactions: X-Goog-Stored-Content-Encoding: - identity X-Goog-Stored-Content-Length: - - '1390' + - '1859' status: code: 200 message: OK diff --git a/airflow/tests/operators/cassettes/test_unzip_gtfs_to_gcs_operator/TestUnzipGTFSToGCSOperator.test_nonexistent_execute.yaml b/airflow/tests/operators/cassettes/test_unzip_gtfs_to_gcs_operator/TestUnzipGTFSToGCSOperator.test_nonexistent_execute.yaml new file mode 100644 index 0000000000..056a8357e2 --- /dev/null +++ b/airflow/tests/operators/cassettes/test_unzip_gtfs_to_gcs_operator/TestUnzipGTFSToGCSOperator.test_nonexistent_execute.yaml @@ -0,0 +1,1277 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Authorization: + - FILTERED + Connection: + - keep-alive + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/24adb1af-1b99-4c2b-bec7-0413c16c9123 + accept-encoding: + - gzip + content-type: + - application/json; charset=UTF-8 + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - application/json; charset=UTF-8 + method: GET + uri: https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/schedule%2Fdt%3D2025-06-02%2Fts%3D2025-06-02T00%3A00%3A00%2B00%3A00%2Fbase64_url%3DaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA%3D%3D%2Fgtfs.zip?alt=media + response: + body: + string: !!binary | + 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 + AADrXAAAAAA= + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Disposition: + - attachment + Content-Length: + - '24518' + Content-Type: + - application/zip + Date: + - Fri, 05 Dec 2025 23:44:08 GMT + ETag: + - COyv5eT6jZEDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Last-Modified: + - Tue, 25 Nov 2025 18:44:48 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AHVrFxO60Y4EV3oC1X_dQZSpfhxEsSuUACnehXj3ddYiK7bfoaYSOKSnR9Y8wWkTgTQroldo + X-Goog-Generation: + - '1764096288053228' + X-Goog-Hash: + - crc32c=lxCKqA==,md5=zsRgt7THKTNwu3SMKXUNQQ== + X-Goog-Metageneration: + - '1' + X-Goog-Storage-Class: + - STANDARD + X-Goog-Stored-Content-Encoding: + - identity + X-Goog-Stored-Content-Length: + - '24518' + status: + code: 200 + message: OK +- request: + body: "--===============7268218471595187766==\r\ncontent-type: application/json; + charset=UTF-8\r\n\r\n{\"name\": \"unzipping_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\", + \"metadata\": {\"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"results.jsonl\\\", + \\\"ts\\\": \\\"2025-06-02T00:00:00+00:00\\\"}\"}}\r\n--===============7268218471595187766==\r\ncontent-type: + application/jsonl\r\n\r\n{\"success\":true,\"exception\":null,\"extract\":{\"filename\":\"gtfs.zip\",\"ts\":\"2025-06-03T00:00:00+00:00\",\"config\":{\"auth_headers\":{},\"auth_query_params\":{},\"computed\":false,\"feed_type\":\"schedule\",\"name\":\"Santa + Ynez Mecatran Schedule\",\"schedule_url_for_validation\":null,\"url\":\"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\",\"extracted_at\":\"2025-06-01T00:00:00+00:00\"},\"response_code\":200,\"response_headers\":{\"Content-Type\":\"application/zip\",\"Content-Disposition\":\"attachment; + filename=gtfs.zip\"},\"reconstructed\":false},\"zipfile_extract_md5hash\":\"4f72c84bd3f053ddb929289fa2de7879\",\"zipfile_files\":[\"agency.txt\",\"calendar.txt\",\"calendar_dates.txt\",\"fare_attributes.txt\",\"feed_info.txt\",\"route_directions.txt\",\"routes.txt\",\"shapes.txt\",\"stop_times.txt\",\"stops.txt\",\"transfers.txt\",\"trips.txt\"],\"zipfile_dirs\":[],\"extracted_files\":[]}\r\n--===============7268218471595187766==--" + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - FILTERED + Connection: + - keep-alive + Content-Length: + - '1536' + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/e7af395b-474b-4093-b2ca-347c5ccf3c53 + content-type: + - !!binary | + bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT03MjY4MjE4NDcxNTk1 + MTg3NzY2PT0i + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - application/jsonl + method: POST + uri: https://storage.googleapis.com/upload/storage/v1/b/calitp-staging-pytest/o?uploadType=multipart + response: + body: + string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/unzipping_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl/1764978249854784\",\n + \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/unzipping_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2FaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\",\n + \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/unzipping_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2FaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl?generation=1764978249854784&alt=media\",\n + \ \"name\": \"unzipping_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\",\n + \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764978249854784\",\n + \ \"metageneration\": \"1\",\n \"contentType\": \"application/jsonl\",\n + \ \"storageClass\": \"STANDARD\",\n \"size\": \"926\",\n \"md5Hash\": \"epN3uvch0pD/lZLwPG9k/w==\",\n + \ \"crc32c\": \"wlfVTw==\",\n \"etag\": \"CMDe+azQp5EDEAE=\",\n \"timeCreated\": + \"2025-12-05T23:44:09.862Z\",\n \"updated\": \"2025-12-05T23:44:09.862Z\",\n + \ \"timeStorageClassUpdated\": \"2025-12-05T23:44:09.862Z\",\n \"timeFinalized\": + \"2025-12-05T23:44:09.862Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": + \"{\\\"filename\\\": \\\"results.jsonl\\\", \\\"ts\\\": \\\"2025-06-02T00:00:00+00:00\\\"}\"\n + \ }\n}\n" + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Length: + - '1997' + Content-Type: + - application/json; charset=UTF-8 + Date: + - Fri, 05 Dec 2025 23:44:09 GMT + ETag: + - CMDe+azQp5EDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AHVrFxPNHsbM0LpQAuf8X1lNYYCn72ov0yrzFhfeLZ_AanRghTkloyGuqt1dqgETrdKSiskH5p2R8qo + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Authorization: + - FILTERED + Connection: + - keep-alive + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/f503f42f-4800-4acc-b8fc-c35e4799a5ad + accept-encoding: + - gzip + content-type: + - application/json; charset=UTF-8 + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - application/json; charset=UTF-8 + method: GET + uri: https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/schedule%2Fdt%3D2025-06-02%2Fts%3D2025-06-02T00%3A00%3A00%2B00%3A00%2Fbase64_url%3DaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA%3D%3D%2Fgtfs.zip?alt=media + response: + body: + string: !!binary | + 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 + AADrXAAAAAA= + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Disposition: + - attachment + Content-Length: + - '24518' + Content-Type: + - application/zip + Date: + - Fri, 05 Dec 2025 23:44:11 GMT + ETag: + - COyv5eT6jZEDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Last-Modified: + - Tue, 25 Nov 2025 18:44:48 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AHVrFxPIA4bA_r55gCTwbvu8dJVY6Bg4ahZHb2rkrVz3TR5eRwXQREG4t7B_AGIkZf6haavE3myO4bM + X-Goog-Generation: + - '1764096288053228' + X-Goog-Hash: + - crc32c=lxCKqA==,md5=zsRgt7THKTNwu3SMKXUNQQ== + X-Goog-Metageneration: + - '1' + X-Goog-Storage-Class: + - STANDARD + X-Goog-Stored-Content-Encoding: + - identity + X-Goog-Stored-Content-Length: + - '24518' + status: + code: 200 + message: OK +- request: + body: "--===============6991825001137686207==\r\ncontent-type: application/json; + charset=UTF-8\r\n\r\n{\"name\": \"unzipping_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\", + \"metadata\": {\"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"results.jsonl\\\", + \\\"ts\\\": \\\"2025-06-03T00:00:00+00:00\\\"}\"}}\r\n--===============6991825001137686207==\r\ncontent-type: + application/jsonl\r\n\r\n{\"success\":true,\"exception\":null,\"extract\":{\"filename\":\"gtfs.zip\",\"ts\":\"2025-06-03T00:00:00+00:00\",\"config\":{\"auth_headers\":{},\"auth_query_params\":{},\"computed\":false,\"feed_type\":\"schedule\",\"name\":\"Santa + Ynez Mecatran Schedule\",\"schedule_url_for_validation\":null,\"url\":\"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\",\"extracted_at\":\"2025-06-01T00:00:00+00:00\"},\"response_code\":200,\"response_headers\":{\"Content-Type\":\"application/zip\",\"Content-Disposition\":\"attachment; + filename=gtfs.zip\"},\"reconstructed\":false},\"zipfile_extract_md5hash\":\"4f72c84bd3f053ddb929289fa2de7879\",\"zipfile_files\":[\"agency.txt\",\"calendar.txt\",\"calendar_dates.txt\",\"fare_attributes.txt\",\"feed_info.txt\",\"route_directions.txt\",\"routes.txt\",\"shapes.txt\",\"stop_times.txt\",\"stops.txt\",\"transfers.txt\",\"trips.txt\"],\"zipfile_dirs\":[],\"extracted_files\":[]}\r\n--===============6991825001137686207==--" + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - FILTERED + Connection: + - keep-alive + Content-Length: + - '1536' + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/a1d941a7-c7d8-4d5a-9d48-9dcc31a7a3d4 + content-type: + - !!binary | + bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT02OTkxODI1MDAxMTM3 + Njg2MjA3PT0i + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - application/jsonl + method: POST + uri: https://storage.googleapis.com/upload/storage/v1/b/calitp-staging-pytest/o?uploadType=multipart + response: + body: + string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/unzipping_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl/1764978252359703\",\n + \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/unzipping_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2FaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\",\n + \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/unzipping_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2FaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl?generation=1764978252359703&alt=media\",\n + \ \"name\": \"unzipping_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\",\n + \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764978252359703\",\n + \ \"metageneration\": \"1\",\n \"contentType\": \"application/jsonl\",\n + \ \"storageClass\": \"STANDARD\",\n \"size\": \"926\",\n \"md5Hash\": \"epN3uvch0pD/lZLwPG9k/w==\",\n + \ \"crc32c\": \"wlfVTw==\",\n \"etag\": \"CJfQkq7Qp5EDEAE=\",\n \"timeCreated\": + \"2025-12-05T23:44:12.369Z\",\n \"updated\": \"2025-12-05T23:44:12.369Z\",\n + \ \"timeStorageClassUpdated\": \"2025-12-05T23:44:12.369Z\",\n \"timeFinalized\": + \"2025-12-05T23:44:12.369Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": + \"{\\\"filename\\\": \\\"results.jsonl\\\", \\\"ts\\\": \\\"2025-06-03T00:00:00+00:00\\\"}\"\n + \ }\n}\n" + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Length: + - '1997' + Content-Type: + - application/json; charset=UTF-8 + Date: + - Fri, 05 Dec 2025 23:44:12 GMT + ETag: + - CJfQkq7Qp5EDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AHVrFxO6zArg-0gL-PS52uRjoMmiSQWY-ejHX52E4Is0gfGXgUXBfpvGqnJ_6QVcMHvYZwkjWY1F9CI + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip + Authorization: + - FILTERED + Connection: + - keep-alive + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/3f250df0-81da-48c6-ab81-2908dd11cbe7 + x-goog-user-project: + - cal-itp-data-infra-staging + method: GET + uri: https://storage.googleapis.com/storage/v1/b/calitp-staging-pytest/o/areas.txt%2Fdt%3D2025-06-02%2Fts%3D2025-06-02T00%3A00%3A00%2B00%3A00%2Fbase64_url%3DaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA%3D%3D%2Fareas.txt?fields=name&prettyPrint=false + response: + body: + string: '{"error":{"code":404,"message":"No such object: calitp-staging-pytest/areas.txt/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/areas.txt","errors":[{"message":"No + such object: calitp-staging-pytest/areas.txt/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/areas.txt","domain":"global","reason":"notFound"}]}}' + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Length: + - '723' + Content-Type: + - application/json; charset=UTF-8 + Date: + - Fri, 05 Dec 2025 23:44:13 GMT + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AHVrFxMKXfca7Qp9jE6WUsyGuX5uJKg6UG4MWiYFkuKovr0XOENswpudfNZiQKRM2w9KSQeUzVsIJFo + status: + code: 404 + message: Not Found +- request: + body: null + headers: + Accept: + - application/json + Authorization: + - FILTERED + Connection: + - keep-alive + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/cd7d922e-2ddd-4b90-bdab-182307d9fd20 + accept-encoding: + - gzip + content-type: + - application/json; charset=UTF-8 + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - application/json; charset=UTF-8 + method: GET + uri: https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/unzipping_results%2Fdt%3D2025-06-02%2Fts%3D2025-06-02T00%3A00%3A00%2B00%3A00%2FaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA%3D%3D.jsonl?alt=media + response: + body: + string: '{"success":true,"exception":null,"extract":{"filename":"gtfs.zip","ts":"2025-06-03T00:00:00+00:00","config":{"auth_headers":{},"auth_query_params":{},"computed":false,"feed_type":"schedule","name":"Santa + Ynez Mecatran Schedule","schedule_url_for_validation":null,"url":"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0","extracted_at":"2025-06-01T00:00:00+00:00"},"response_code":200,"response_headers":{"Content-Type":"application/zip","Content-Disposition":"attachment; + filename=gtfs.zip"},"reconstructed":false},"zipfile_extract_md5hash":"4f72c84bd3f053ddb929289fa2de7879","zipfile_files":["agency.txt","calendar.txt","calendar_dates.txt","fare_attributes.txt","feed_info.txt","route_directions.txt","routes.txt","shapes.txt","stop_times.txt","stops.txt","transfers.txt","trips.txt"],"zipfile_dirs":[],"extracted_files":[]}' + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Disposition: + - attachment + Content-Length: + - '926' + Content-Type: + - application/jsonl + Date: + - Fri, 05 Dec 2025 23:44:13 GMT + ETag: + - CJfQkq7Qp5EDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Last-Modified: + - Fri, 05 Dec 2025 23:44:12 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AHVrFxNxby3yEQuQGwF_A51aL7tat1EEeUaGLMRVlD2bqbGBMr7iGXwGtX7QuMZE3GHuqRe1 + X-Goog-Generation: + - '1764978252359703' + X-Goog-Hash: + - crc32c=wlfVTw==,md5=epN3uvch0pD/lZLwPG9k/w== + X-Goog-Metageneration: + - '1' + X-Goog-Storage-Class: + - STANDARD + X-Goog-Stored-Content-Encoding: + - identity + X-Goog-Stored-Content-Length: + - '926' + status: + code: 200 + message: OK +version: 1 diff --git a/airflow/tests/operators/cassettes/test_unzip_gtfs_to_gcs_operator/TestUnzipGTFSToGCSOperatorEmptyFile.test_execute.yaml b/airflow/tests/operators/cassettes/test_unzip_gtfs_to_gcs_operator/TestUnzipGTFSToGCSOperatorEmptyFile.test_execute.yaml new file mode 100644 index 0000000000..ab348bf4b0 --- /dev/null +++ b/airflow/tests/operators/cassettes/test_unzip_gtfs_to_gcs_operator/TestUnzipGTFSToGCSOperatorEmptyFile.test_execute.yaml @@ -0,0 +1,730 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Authorization: + - FILTERED + Connection: + - keep-alive + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/8d8f9bbf-d650-4569-90cd-0883e861588c + accept-encoding: + - gzip + content-type: + - application/json; charset=UTF-8 + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - application/json; charset=UTF-8 + method: GET + uri: https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/schedule%2Fdt%3D2025-11-13%2Fts%3D2025-11-13T03%3A02%3A04.189504%2B00%3A00%2Fbase64_url%3DaHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc%3D%2Fschedule-27.zip?alt=media + response: + body: + string: !!binary | + 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 + LnR4dFBLBQYAAAAACQAJAAcCAADIBQAAAAA= + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Disposition: + - attachment + Content-Length: + - '2021' + Content-Type: + - application/octet-stream + Date: + - Wed, 03 Dec 2025 01:27:02 GMT + ETag: + - CImN3PSMoJEDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Last-Modified: + - Tue, 02 Dec 2025 23:53:48 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AOCedOHJnKm9W8YGz7OD90LhBcQBTnnfh9OsZBDdyfMijXcWwdUh5GKE9U8MP8faotdriH2nyKMVcrs + X-Goog-Generation: + - '1764719628584585' + X-Goog-Hash: + - crc32c=F3bKVw==,md5=6mIsSfEakt9Z1A6l2fy9Eg== + X-Goog-Metageneration: + - '1' + X-Goog-Storage-Class: + - STANDARD + X-Goog-Stored-Content-Encoding: + - identity + X-Goog-Stored-Content-Length: + - '2021' + status: + code: 200 + message: OK +- request: + body: "--===============4742444676604692587==\r\ncontent-type: application/json; + charset=UTF-8\r\n\r\n{\"name\": \"calendar_dates.txt/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/base64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=/calendar_dates.txt\", + \"metadata\": {\"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"calendar_dates.txt\\\", + \\\"original_filename\\\": \\\"calendar_dates.txt\\\", \\\"ts\\\": \\\"2025-11-13T00:00:00+00:00\\\", + \\\"extract_config\\\": {\\\"auth_headers\\\": {}, \\\"auth_query_params\\\": + {}, \\\"computed\\\": false, \\\"extracted_at\\\": \\\"2025-11-25T00:00:00+00:00\\\", + \\\"feed_type\\\": \\\"schedule\\\", \\\"name\\\": \\\"Fric and Frac Schedule\\\", + \\\"schedule_url_for_validation\\\": null, \\\"url\\\": \\\"https://www.ips-systems.com/GTFS/Schedule/27\\\"}}\"}}\r\n--===============4742444676604692587==\r\ncontent-type: + text/csv\r\n\r\nservice_id,date,exception_type\r\n\r\n--===============4742444676604692587==--" + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - FILTERED + Connection: + - keep-alive + Content-Length: + - '883' + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/1bfad0cf-868e-4213-b064-cd03ee4f4baa + content-type: + - !!binary | + bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT00NzQyNDQ0Njc2NjA0 + NjkyNTg3PT0i + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - text/csv + method: POST + uri: https://storage.googleapis.com/upload/storage/v1/b/calitp-staging-pytest/o?uploadType=multipart + response: + body: + string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/calendar_dates.txt/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/base64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=/calendar_dates.txt/1764725223696010\",\n + \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/calendar_dates.txt%2Fdt=2025-11-13%2Fts=2025-11-13T03:02:04.189504%2B00:00%2Fbase64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=%2Fcalendar_dates.txt\",\n + \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/calendar_dates.txt%2Fdt=2025-11-13%2Fts=2025-11-13T03:02:04.189504%2B00:00%2Fbase64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=%2Fcalendar_dates.txt?generation=1764725223696010&alt=media\",\n + \ \"name\": \"calendar_dates.txt/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/base64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=/calendar_dates.txt\",\n + \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764725223696010\",\n + \ \"metageneration\": \"1\",\n \"contentType\": \"text/csv\",\n \"storageClass\": + \"STANDARD\",\n \"size\": \"32\",\n \"md5Hash\": \"0KGfA+d3FMZsIpiobOW2Ug==\",\n + \ \"crc32c\": \"y2Grog==\",\n \"etag\": \"CIrN1uChoJEDEAE=\",\n \"timeCreated\": + \"2025-12-03T01:27:03.708Z\",\n \"updated\": \"2025-12-03T01:27:03.708Z\",\n + \ \"timeStorageClassUpdated\": \"2025-12-03T01:27:03.708Z\",\n \"timeFinalized\": + \"2025-12-03T01:27:03.708Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": + \"{\\\"filename\\\": \\\"calendar_dates.txt\\\", \\\"original_filename\\\": + \\\"calendar_dates.txt\\\", \\\"ts\\\": \\\"2025-11-13T00:00:00+00:00\\\", + \\\"extract_config\\\": {\\\"auth_headers\\\": {}, \\\"auth_query_params\\\": + {}, \\\"computed\\\": false, \\\"extracted_at\\\": \\\"2025-11-25T00:00:00+00:00\\\", + \\\"feed_type\\\": \\\"schedule\\\", \\\"name\\\": \\\"Fric and Frac Schedule\\\", + \\\"schedule_url_for_validation\\\": null, \\\"url\\\": \\\"https://www.ips-systems.com/GTFS/Schedule/27\\\"}}\"\n + \ }\n}\n" + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Length: + - '1917' + Content-Type: + - application/json; charset=UTF-8 + Date: + - Wed, 03 Dec 2025 01:27:03 GMT + ETag: + - CIrN1uChoJEDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AOCedOEs19zvxvesWUlH55TIzO4yHE8fZBpomS-yGJhJwMW2hEX4dfEiB_uUudcH8WdABf8p + status: + code: 200 + message: OK +- request: + body: "--===============3633896371292419154==\r\ncontent-type: application/json; + charset=UTF-8\r\n\r\n{\"name\": \"unzipping_results/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/calendar_dates.txt_aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl\", + \"metadata\": {\"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"results.jsonl\\\", + \\\"ts\\\": \\\"2025-11-13T00:00:00+00:00\\\"}\"}}\r\n--===============3633896371292419154==\r\ncontent-type: + application/jsonl\r\n\r\n{\"success\":true,\"exception\":null,\"extract\":{\"filename\":\"gtfs.zip\",\"ts\":\"2025-11-14T00:00:00+00:00\",\"config\":{\"auth_headers\":{},\"auth_query_params\":{},\"computed\":false,\"extracted_at\":\"2025-11-25T00:00:00+00:00\",\"feed_type\":\"schedule\",\"name\":\"Fric + and Frac Schedule\",\"schedule_url_for_validation\":null,\"url\":\"https://www.ips-systems.com/GTFS/Schedule/27\"},\"response_code\":200,\"response_headers\":{\"Content-Type\":\"application/zip\",\"Content-Disposition\":\"attachment; + filename=schedule-27.zip\"},\"reconstructed\":false},\"zipfile_extract_md5hash\":\"833f5a292eed717823acf709b2548a2b\",\"zipfile_files\":[\"agency.txt\",\"calendar.txt\",\"calendar_dates.txt\",\"feed_info.txt\",\"routes.txt\",\"shapes.txt\",\"stop_times.txt\",\"stops.txt\",\"trips.txt\"],\"zipfile_dirs\":[],\"extracted_files\":[{\"filename\":\"calendar_dates.txt\",\"original_filename\":\"calendar_dates.txt\",\"ts\":\"2025-11-13T00:00:00+00:00\",\"extract_config\":{\"auth_headers\":{},\"auth_query_params\":{},\"computed\":false,\"extracted_at\":\"2025-11-25T00:00:00+00:00\",\"feed_type\":\"schedule\",\"name\":\"Fric + and Frac Schedule\",\"schedule_url_for_validation\":null,\"url\":\"https://www.ips-systems.com/GTFS/Schedule/27\"}}]}\r\n--===============3633896371292419154==--" + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - FILTERED + Connection: + - keep-alive + Content-Length: + - '1628' + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/f2af7340-f55a-413e-b109-da1b94807105 + content-type: + - !!binary | + bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT0zNjMzODk2MzcxMjky + NDE5MTU0PT0i + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - application/jsonl + method: POST + uri: https://storage.googleapis.com/upload/storage/v1/b/calitp-staging-pytest/o?uploadType=multipart + response: + body: + string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/unzipping_results/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/calendar_dates.txt_aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl/1764725224603832\",\n + \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/unzipping_results%2Fdt=2025-11-13%2Fts=2025-11-13T03:02:04.189504%2B00:00%2Fcalendar_dates.txt_aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl\",\n + \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/unzipping_results%2Fdt=2025-11-13%2Fts=2025-11-13T03:02:04.189504%2B00:00%2Fcalendar_dates.txt_aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl?generation=1764725224603832&alt=media\",\n + \ \"name\": \"unzipping_results/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/calendar_dates.txt_aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl\",\n + \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764725224603832\",\n + \ \"metageneration\": \"1\",\n \"contentType\": \"application/jsonl\",\n + \ \"storageClass\": \"STANDARD\",\n \"size\": \"1132\",\n \"md5Hash\": \"CoYJbqPPdq0tvmFUm1dEOA==\",\n + \ \"crc32c\": \"XMSMiw==\",\n \"etag\": \"CLiBjuGhoJEDEAE=\",\n \"timeCreated\": + \"2025-12-03T01:27:04.616Z\",\n \"updated\": \"2025-12-03T01:27:04.616Z\",\n + \ \"timeStorageClassUpdated\": \"2025-12-03T01:27:04.616Z\",\n \"timeFinalized\": + \"2025-12-03T01:27:04.616Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": + \"{\\\"filename\\\": \\\"results.jsonl\\\", \\\"ts\\\": \\\"2025-11-13T00:00:00+00:00\\\"}\"\n + \ }\n}\n" + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Length: + - '1542' + Content-Type: + - application/json; charset=UTF-8 + Date: + - Wed, 03 Dec 2025 01:27:04 GMT + ETag: + - CLiBjuGhoJEDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AOCedOGKY08kocFFpUbpryNdVonyzRQOen7p7xeQvsPFwp0QSxgxyza-9ULexmxWYX-NJI4r8yvKMg + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Authorization: + - FILTERED + Connection: + - keep-alive + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/391e907f-7611-4d4e-b712-750c3c96eefc + accept-encoding: + - gzip + content-type: + - application/json; charset=UTF-8 + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - application/json; charset=UTF-8 + method: GET + uri: https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/schedule%2Fdt%3D2025-11-13%2Fts%3D2025-11-13T03%3A02%3A04.189504%2B00%3A00%2Fbase64_url%3DaHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc%3D%2Fschedule-27.zip?alt=media + response: + body: + string: !!binary | + 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 + LnR4dFBLBQYAAAAACQAJAAcCAADIBQAAAAA= + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Disposition: + - attachment + Content-Length: + - '2021' + Content-Type: + - application/octet-stream + Date: + - Wed, 03 Dec 2025 01:27:05 GMT + ETag: + - CImN3PSMoJEDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Last-Modified: + - Tue, 02 Dec 2025 23:53:48 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AOCedOFGG8NksDxmwEUo0FP0rwuQ5u5mGA3_is-BorDV8awlP1WobA-dyM_FA72DFAMwy41XssHGeA + X-Goog-Generation: + - '1764719628584585' + X-Goog-Hash: + - crc32c=F3bKVw==,md5=6mIsSfEakt9Z1A6l2fy9Eg== + X-Goog-Metageneration: + - '1' + X-Goog-Storage-Class: + - STANDARD + X-Goog-Stored-Content-Encoding: + - identity + X-Goog-Stored-Content-Length: + - '2021' + status: + code: 200 + message: OK +- request: + body: "--===============8487884324373571829==\r\ncontent-type: application/json; + charset=UTF-8\r\n\r\n{\"name\": \"calendar_dates.txt/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/base64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=/calendar_dates.txt\", + \"metadata\": {\"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"calendar_dates.txt\\\", + \\\"original_filename\\\": \\\"calendar_dates.txt\\\", \\\"ts\\\": \\\"2025-11-14T00:00:00+00:00\\\", + \\\"extract_config\\\": {\\\"auth_headers\\\": {}, \\\"auth_query_params\\\": + {}, \\\"computed\\\": false, \\\"extracted_at\\\": \\\"2025-11-25T00:00:00+00:00\\\", + \\\"feed_type\\\": \\\"schedule\\\", \\\"name\\\": \\\"Fric and Frac Schedule\\\", + \\\"schedule_url_for_validation\\\": null, \\\"url\\\": \\\"https://www.ips-systems.com/GTFS/Schedule/27\\\"}}\"}}\r\n--===============8487884324373571829==\r\ncontent-type: + text/csv\r\n\r\nservice_id,date,exception_type\r\n\r\n--===============8487884324373571829==--" + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - FILTERED + Connection: + - keep-alive + Content-Length: + - '883' + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/93096526-0371-4a79-b3a0-9b13349eca93 + content-type: + - !!binary | + bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT04NDg3ODg0MzI0Mzcz + NTcxODI5PT0i + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - text/csv + method: POST + uri: https://storage.googleapis.com/upload/storage/v1/b/calitp-staging-pytest/o?uploadType=multipart + response: + body: + string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/calendar_dates.txt/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/base64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=/calendar_dates.txt/1764725226984560\",\n + \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/calendar_dates.txt%2Fdt=2025-11-13%2Fts=2025-11-13T03:02:04.189504%2B00:00%2Fbase64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=%2Fcalendar_dates.txt\",\n + \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/calendar_dates.txt%2Fdt=2025-11-13%2Fts=2025-11-13T03:02:04.189504%2B00:00%2Fbase64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=%2Fcalendar_dates.txt?generation=1764725226984560&alt=media\",\n + \ \"name\": \"calendar_dates.txt/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/base64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=/calendar_dates.txt\",\n + \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764725226984560\",\n + \ \"metageneration\": \"1\",\n \"contentType\": \"text/csv\",\n \"storageClass\": + \"STANDARD\",\n \"size\": \"32\",\n \"md5Hash\": \"0KGfA+d3FMZsIpiobOW2Ug==\",\n + \ \"crc32c\": \"y2Grog==\",\n \"etag\": \"CPCon+KhoJEDEAE=\",\n \"timeCreated\": + \"2025-12-03T01:27:06.994Z\",\n \"updated\": \"2025-12-03T01:27:06.994Z\",\n + \ \"timeStorageClassUpdated\": \"2025-12-03T01:27:06.994Z\",\n \"timeFinalized\": + \"2025-12-03T01:27:06.994Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": + \"{\\\"filename\\\": \\\"calendar_dates.txt\\\", \\\"original_filename\\\": + \\\"calendar_dates.txt\\\", \\\"ts\\\": \\\"2025-11-14T00:00:00+00:00\\\", + \\\"extract_config\\\": {\\\"auth_headers\\\": {}, \\\"auth_query_params\\\": + {}, \\\"computed\\\": false, \\\"extracted_at\\\": \\\"2025-11-25T00:00:00+00:00\\\", + \\\"feed_type\\\": \\\"schedule\\\", \\\"name\\\": \\\"Fric and Frac Schedule\\\", + \\\"schedule_url_for_validation\\\": null, \\\"url\\\": \\\"https://www.ips-systems.com/GTFS/Schedule/27\\\"}}\"\n + \ }\n}\n" + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Length: + - '1917' + Content-Type: + - application/json; charset=UTF-8 + Date: + - Wed, 03 Dec 2025 01:27:06 GMT + ETag: + - CPCon+KhoJEDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AOCedOFdVbncrZp4HKw7PxNAoU_0MNnGxNYDinRAT0beKOk5uocwxwnwwO7xZK4PX4HOB0dQ-3WXW5M + status: + code: 200 + message: OK +- request: + body: "--===============2495294604845417434==\r\ncontent-type: application/json; + charset=UTF-8\r\n\r\n{\"name\": \"unzipping_results/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/calendar_dates.txt_aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl\", + \"metadata\": {\"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"results.jsonl\\\", + \\\"ts\\\": \\\"2025-11-14T00:00:00+00:00\\\"}\"}}\r\n--===============2495294604845417434==\r\ncontent-type: + application/jsonl\r\n\r\n{\"success\":true,\"exception\":null,\"extract\":{\"filename\":\"gtfs.zip\",\"ts\":\"2025-11-14T00:00:00+00:00\",\"config\":{\"auth_headers\":{},\"auth_query_params\":{},\"computed\":false,\"extracted_at\":\"2025-11-25T00:00:00+00:00\",\"feed_type\":\"schedule\",\"name\":\"Fric + and Frac Schedule\",\"schedule_url_for_validation\":null,\"url\":\"https://www.ips-systems.com/GTFS/Schedule/27\"},\"response_code\":200,\"response_headers\":{\"Content-Type\":\"application/zip\",\"Content-Disposition\":\"attachment; + filename=schedule-27.zip\"},\"reconstructed\":false},\"zipfile_extract_md5hash\":\"833f5a292eed717823acf709b2548a2b\",\"zipfile_files\":[\"agency.txt\",\"calendar.txt\",\"calendar_dates.txt\",\"feed_info.txt\",\"routes.txt\",\"shapes.txt\",\"stop_times.txt\",\"stops.txt\",\"trips.txt\"],\"zipfile_dirs\":[],\"extracted_files\":[{\"filename\":\"calendar_dates.txt\",\"original_filename\":\"calendar_dates.txt\",\"ts\":\"2025-11-14T00:00:00+00:00\",\"extract_config\":{\"auth_headers\":{},\"auth_query_params\":{},\"computed\":false,\"extracted_at\":\"2025-11-25T00:00:00+00:00\",\"feed_type\":\"schedule\",\"name\":\"Fric + and Frac Schedule\",\"schedule_url_for_validation\":null,\"url\":\"https://www.ips-systems.com/GTFS/Schedule/27\"}}]}\r\n--===============2495294604845417434==--" + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - FILTERED + Connection: + - keep-alive + Content-Length: + - '1628' + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/54a76cbb-a80d-4558-9df7-adeb222998b9 + content-type: + - !!binary | + bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT0yNDk1Mjk0NjA0ODQ1 + NDE3NDM0PT0i + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - application/jsonl + method: POST + uri: https://storage.googleapis.com/upload/storage/v1/b/calitp-staging-pytest/o?uploadType=multipart + response: + body: + string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/unzipping_results/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/calendar_dates.txt_aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl/1764725227895658\",\n + \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/unzipping_results%2Fdt=2025-11-13%2Fts=2025-11-13T03:02:04.189504%2B00:00%2Fcalendar_dates.txt_aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl\",\n + \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/unzipping_results%2Fdt=2025-11-13%2Fts=2025-11-13T03:02:04.189504%2B00:00%2Fcalendar_dates.txt_aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl?generation=1764725227895658&alt=media\",\n + \ \"name\": \"unzipping_results/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/calendar_dates.txt_aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl\",\n + \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764725227895658\",\n + \ \"metageneration\": \"1\",\n \"contentType\": \"application/jsonl\",\n + \ \"storageClass\": \"STANDARD\",\n \"size\": \"1132\",\n \"md5Hash\": \"HQGn3JxjJikD3Mx8rtGAsg==\",\n + \ \"crc32c\": \"Ob/4Ag==\",\n \"etag\": \"COr21uKhoJEDEAE=\",\n \"timeCreated\": + \"2025-12-03T01:27:07.904Z\",\n \"updated\": \"2025-12-03T01:27:07.904Z\",\n + \ \"timeStorageClassUpdated\": \"2025-12-03T01:27:07.904Z\",\n \"timeFinalized\": + \"2025-12-03T01:27:07.904Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": + \"{\\\"filename\\\": \\\"results.jsonl\\\", \\\"ts\\\": \\\"2025-11-14T00:00:00+00:00\\\"}\"\n + \ }\n}\n" + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Length: + - '1542' + Content-Type: + - application/json; charset=UTF-8 + Date: + - Wed, 03 Dec 2025 01:27:07 GMT + ETag: + - COr21uKhoJEDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AOCedOFEeufSEljig1NYDgbjqCZt3GT2vTSc5G3lVId6ih4lDQVdnAM7SSkWbgPbQbazoCM81X5IeSQ + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Authorization: + - FILTERED + Connection: + - keep-alive + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/1540c63f-1ca4-4a0e-8777-f4ccf87b7250 + accept-encoding: + - gzip + content-type: + - application/json; charset=UTF-8 + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - application/json; charset=UTF-8 + method: GET + uri: https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/calendar_dates.txt%2Fdt%3D2025-11-13%2Fts%3D2025-11-13T03%3A02%3A04.189504%2B00%3A00%2Fbase64_url%3DaHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc%3D%2Fcalendar_dates.txt?alt=media + response: + body: + string: "service_id,date,exception_type\r\n" + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Disposition: + - attachment + Content-Length: + - '32' + Content-Type: + - text/csv + Date: + - Wed, 03 Dec 2025 01:27:08 GMT + ETag: + - CPCon+KhoJEDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Last-Modified: + - Wed, 03 Dec 2025 01:27:06 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AOCedOF9OjOLxgsJt_Vz70i-0bAxAQFak7wxcvO2W3DsWHz-M5XfBhx7vMoYa3c_Kmzs4dLh + X-Goog-Generation: + - '1764725226984560' + X-Goog-Hash: + - crc32c=y2Grog==,md5=0KGfA+d3FMZsIpiobOW2Ug== + X-Goog-Metageneration: + - '1' + X-Goog-Storage-Class: + - STANDARD + X-Goog-Stored-Content-Encoding: + - identity + X-Goog-Stored-Content-Length: + - '32' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip + Authorization: + - FILTERED + Connection: + - keep-alive + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/1d4ed57a-bf59-4c22-a965-6551c4389e15 + x-goog-user-project: + - cal-itp-data-infra-staging + method: GET + uri: https://storage.googleapis.com/storage/v1/b/calitp-staging-pytest/o/calendar_dates.txt%2Fdt%3D2025-11-13%2Fts%3D2025-11-13T03%3A02%3A04.189504%2B00%3A00%2Fbase64_url%3DaHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc%3D%2Fcalendar_dates.txt?prettyPrint=false&projection=noAcl + response: + body: + string: '{"kind":"storage#object","id":"calitp-staging-pytest/calendar_dates.txt/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/base64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=/calendar_dates.txt/1764725226984560","selfLink":"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/calendar_dates.txt%2Fdt=2025-11-13%2Fts=2025-11-13T03:02:04.189504%2B00:00%2Fbase64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=%2Fcalendar_dates.txt","mediaLink":"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/calendar_dates.txt%2Fdt=2025-11-13%2Fts=2025-11-13T03:02:04.189504%2B00:00%2Fbase64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=%2Fcalendar_dates.txt?generation=1764725226984560&alt=media","name":"calendar_dates.txt/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/base64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=/calendar_dates.txt","bucket":"calitp-staging-pytest","generation":"1764725226984560","metageneration":"1","contentType":"text/csv","storageClass":"STANDARD","size":"32","md5Hash":"0KGfA+d3FMZsIpiobOW2Ug==","crc32c":"y2Grog==","etag":"CPCon+KhoJEDEAE=","timeCreated":"2025-12-03T01:27:06.994Z","updated":"2025-12-03T01:27:06.994Z","timeStorageClassUpdated":"2025-12-03T01:27:06.994Z","timeFinalized":"2025-12-03T01:27:06.994Z","metadata":{"PARTITIONED_ARTIFACT_METADATA":"{\"filename\": + \"calendar_dates.txt\", \"original_filename\": \"calendar_dates.txt\", \"ts\": + \"2025-11-14T00:00:00+00:00\", \"extract_config\": {\"auth_headers\": {}, + \"auth_query_params\": {}, \"computed\": false, \"extracted_at\": \"2025-11-25T00:00:00+00:00\", + \"feed_type\": \"schedule\", \"name\": \"Fric and Frac Schedule\", \"schedule_url_for_validation\": + null, \"url\": \"https://www.ips-systems.com/GTFS/Schedule/27\"}}"}}' + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - private, max-age=0, must-revalidate, no-transform + Content-Length: + - '1830' + Content-Type: + - application/json; charset=UTF-8 + Date: + - Wed, 03 Dec 2025 01:27:09 GMT + ETag: + - CPCon+KhoJEDEAE= + Expires: + - Wed, 03 Dec 2025 01:27:09 GMT + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AOCedOEsHdkB9wcALuLQAPlxKOMzqEIbPurtxXqg0IDv2A7EDb6yuHFCtCVpHHAx4jxRobQ + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Authorization: + - FILTERED + Connection: + - keep-alive + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/69929aad-8d47-419b-8da7-b11a5bf697a0 + accept-encoding: + - gzip + content-type: + - application/json; charset=UTF-8 + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - application/json; charset=UTF-8 + method: GET + uri: https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/unzipping_results%2Fdt%3D2025-11-13%2Fts%3D2025-11-13T03%3A02%3A04.189504%2B00%3A00%2Fcalendar_dates.txt_aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc%3D.jsonl?alt=media + response: + body: + string: '{"success":true,"exception":null,"extract":{"filename":"gtfs.zip","ts":"2025-11-14T00:00:00+00:00","config":{"auth_headers":{},"auth_query_params":{},"computed":false,"extracted_at":"2025-11-25T00:00:00+00:00","feed_type":"schedule","name":"Fric + and Frac Schedule","schedule_url_for_validation":null,"url":"https://www.ips-systems.com/GTFS/Schedule/27"},"response_code":200,"response_headers":{"Content-Type":"application/zip","Content-Disposition":"attachment; + filename=schedule-27.zip"},"reconstructed":false},"zipfile_extract_md5hash":"833f5a292eed717823acf709b2548a2b","zipfile_files":["agency.txt","calendar.txt","calendar_dates.txt","feed_info.txt","routes.txt","shapes.txt","stop_times.txt","stops.txt","trips.txt"],"zipfile_dirs":[],"extracted_files":[{"filename":"calendar_dates.txt","original_filename":"calendar_dates.txt","ts":"2025-11-14T00:00:00+00:00","extract_config":{"auth_headers":{},"auth_query_params":{},"computed":false,"extracted_at":"2025-11-25T00:00:00+00:00","feed_type":"schedule","name":"Fric + and Frac Schedule","schedule_url_for_validation":null,"url":"https://www.ips-systems.com/GTFS/Schedule/27"}}]}' + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Disposition: + - attachment + Content-Length: + - '1132' + Content-Type: + - application/jsonl + Date: + - Wed, 03 Dec 2025 01:27:09 GMT + ETag: + - COr21uKhoJEDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Last-Modified: + - Wed, 03 Dec 2025 01:27:07 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AOCedOFAY9Y3jWoF4byPQJW6-1FZFjQAfbBV_EUQ10sOVCMttwoM3ZBsbvKqIxLNwFQlyzM + X-Goog-Generation: + - '1764725227895658' + X-Goog-Hash: + - crc32c=Ob/4Ag==,md5=HQGn3JxjJikD3Mx8rtGAsg== + X-Goog-Metageneration: + - '1' + X-Goog-Storage-Class: + - STANDARD + X-Goog-Stored-Content-Encoding: + - identity + X-Goog-Stored-Content-Length: + - '1132' + status: + code: 200 + message: OK +version: 1 diff --git a/airflow/tests/operators/cassettes/test_unzip_gtfs_to_gcs_operator/TestUnzipGTFSToGCSOperatorFileNotPresent.test_execute.yaml b/airflow/tests/operators/cassettes/test_unzip_gtfs_to_gcs_operator/TestUnzipGTFSToGCSOperatorFileNotPresent.test_execute.yaml new file mode 100644 index 0000000000..05a2e62607 --- /dev/null +++ b/airflow/tests/operators/cassettes/test_unzip_gtfs_to_gcs_operator/TestUnzipGTFSToGCSOperatorFileNotPresent.test_execute.yaml @@ -0,0 +1,1277 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Authorization: + - FILTERED + Connection: + - keep-alive + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/00b2667c-3271-454f-9c5e-7d178a1f9713 + accept-encoding: + - gzip + content-type: + - application/json; charset=UTF-8 + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - application/json; charset=UTF-8 + method: GET + uri: https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/schedule%2Fdt%3D2025-06-02%2Fts%3D2025-06-02T00%3A00%3A00%2B00%3A00%2Fbase64_url%3DaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA%3D%3D%2Fgtfs.zip?alt=media + response: + body: + string: !!binary | + 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 + AADrXAAAAAA= + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Disposition: + - attachment + Content-Length: + - '24518' + Content-Type: + - application/zip + Date: + - Tue, 02 Dec 2025 23:48:01 GMT + ETag: + - COyv5eT6jZEDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Last-Modified: + - Tue, 25 Nov 2025 18:44:48 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AOCedOE9zzBFsLTHsSGqU-kV_HSNWeugA7GdKAVAj1A92KFzAM3c-M5eP22G58UQhHK1hoT10P7kjU0YMf67 + X-Goog-Generation: + - '1764096288053228' + X-Goog-Hash: + - crc32c=lxCKqA==,md5=zsRgt7THKTNwu3SMKXUNQQ== + X-Goog-Metageneration: + - '1' + X-Goog-Storage-Class: + - STANDARD + X-Goog-Stored-Content-Encoding: + - identity + X-Goog-Stored-Content-Length: + - '24518' + status: + code: 200 + message: OK +- request: + body: "--===============0133798496668699802==\r\ncontent-type: application/json; + charset=UTF-8\r\n\r\n{\"name\": \"unzipping_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/areas.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\", + \"metadata\": {\"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"results.jsonl\\\", + \\\"ts\\\": \\\"2025-06-02T00:00:00+00:00\\\"}\"}}\r\n--===============0133798496668699802==\r\ncontent-type: + application/jsonl\r\n\r\n{\"success\":true,\"exception\":null,\"extract\":{\"filename\":\"gtfs.zip\",\"ts\":\"2025-06-03T00:00:00+00:00\",\"config\":{\"auth_headers\":{},\"auth_query_params\":{},\"computed\":false,\"feed_type\":\"schedule\",\"name\":\"Santa + Ynez Mecatran Schedule\",\"schedule_url_for_validation\":null,\"url\":\"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\",\"extracted_at\":\"2025-06-01T00:00:00+00:00\"},\"response_code\":200,\"response_headers\":{\"Content-Type\":\"application/zip\",\"Content-Disposition\":\"attachment; + filename=gtfs.zip\"},\"reconstructed\":false},\"zipfile_extract_md5hash\":\"4f72c84bd3f053ddb929289fa2de7879\",\"zipfile_files\":[\"agency.txt\",\"calendar.txt\",\"calendar_dates.txt\",\"fare_attributes.txt\",\"feed_info.txt\",\"route_directions.txt\",\"routes.txt\",\"shapes.txt\",\"stop_times.txt\",\"stops.txt\",\"transfers.txt\",\"trips.txt\"],\"zipfile_dirs\":[],\"extracted_files\":[]}\r\n--===============0133798496668699802==--" + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - FILTERED + Connection: + - keep-alive + Content-Length: + - '1546' + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/45f81833-6088-4b48-85d7-050c1eea8c28 + content-type: + - !!binary | + bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT0wMTMzNzk4NDk2NjY4 + Njk5ODAyPT0i + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - application/jsonl + method: POST + uri: https://storage.googleapis.com/upload/storage/v1/b/calitp-staging-pytest/o?uploadType=multipart + response: + body: + string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/unzipping_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/areas.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl/1764719282558273\",\n + \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/unzipping_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fareas.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\",\n + \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/unzipping_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fareas.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl?generation=1764719282558273&alt=media\",\n + \ \"name\": \"unzipping_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/areas.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\",\n + \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764719282558273\",\n + \ \"metageneration\": \"1\",\n \"contentType\": \"application/jsonl\",\n + \ \"storageClass\": \"STANDARD\",\n \"size\": \"926\",\n \"md5Hash\": \"epN3uvch0pD/lZLwPG9k/w==\",\n + \ \"crc32c\": \"wlfVTw==\",\n \"etag\": \"CMGq3M+LoJEDEAE=\",\n \"timeCreated\": + \"2025-12-02T23:48:02.567Z\",\n \"updated\": \"2025-12-02T23:48:02.567Z\",\n + \ \"timeStorageClassUpdated\": \"2025-12-02T23:48:02.567Z\",\n \"timeFinalized\": + \"2025-12-02T23:48:02.567Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": + \"{\\\"filename\\\": \\\"results.jsonl\\\", \\\"ts\\\": \\\"2025-06-02T00:00:00+00:00\\\"}\"\n + \ }\n}\n" + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Length: + - '2037' + Content-Type: + - application/json; charset=UTF-8 + Date: + - Tue, 02 Dec 2025 23:48:02 GMT + ETag: + - CMGq3M+LoJEDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AOCedOE2ZWD_72JuEU4B2ELVoZdSOtsNMwQhsDuACIQfPfdwkdWHZlIoMWKgiacZ8VAex5NoHXRlh2E4qwKp + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Authorization: + - FILTERED + Connection: + - keep-alive + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/7f00f8d1-20f3-456f-b973-880b7c9d20c8 + accept-encoding: + - gzip + content-type: + - application/json; charset=UTF-8 + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - application/json; charset=UTF-8 + method: GET + uri: https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/schedule%2Fdt%3D2025-06-02%2Fts%3D2025-06-02T00%3A00%3A00%2B00%3A00%2Fbase64_url%3DaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA%3D%3D%2Fgtfs.zip?alt=media + response: + body: + string: !!binary | + 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 + AADrXAAAAAA= + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Disposition: + - attachment + Content-Length: + - '24518' + Content-Type: + - application/zip + Date: + - Tue, 02 Dec 2025 23:48:03 GMT + ETag: + - COyv5eT6jZEDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Last-Modified: + - Tue, 25 Nov 2025 18:44:48 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AOCedOFjDPK-Xa822avSWH4hiua_qxXuyDrTvhlUH4Ow6nXDpo3IFcwkLythc1bKXWsAz6FP + X-Goog-Generation: + - '1764096288053228' + X-Goog-Hash: + - crc32c=lxCKqA==,md5=zsRgt7THKTNwu3SMKXUNQQ== + X-Goog-Metageneration: + - '1' + X-Goog-Storage-Class: + - STANDARD + X-Goog-Stored-Content-Encoding: + - identity + X-Goog-Stored-Content-Length: + - '24518' + status: + code: 200 + message: OK +- request: + body: "--===============8062853517909164193==\r\ncontent-type: application/json; + charset=UTF-8\r\n\r\n{\"name\": \"unzipping_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/areas.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\", + \"metadata\": {\"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"results.jsonl\\\", + \\\"ts\\\": \\\"2025-06-03T00:00:00+00:00\\\"}\"}}\r\n--===============8062853517909164193==\r\ncontent-type: + application/jsonl\r\n\r\n{\"success\":true,\"exception\":null,\"extract\":{\"filename\":\"gtfs.zip\",\"ts\":\"2025-06-03T00:00:00+00:00\",\"config\":{\"auth_headers\":{},\"auth_query_params\":{},\"computed\":false,\"feed_type\":\"schedule\",\"name\":\"Santa + Ynez Mecatran Schedule\",\"schedule_url_for_validation\":null,\"url\":\"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\",\"extracted_at\":\"2025-06-01T00:00:00+00:00\"},\"response_code\":200,\"response_headers\":{\"Content-Type\":\"application/zip\",\"Content-Disposition\":\"attachment; + filename=gtfs.zip\"},\"reconstructed\":false},\"zipfile_extract_md5hash\":\"4f72c84bd3f053ddb929289fa2de7879\",\"zipfile_files\":[\"agency.txt\",\"calendar.txt\",\"calendar_dates.txt\",\"fare_attributes.txt\",\"feed_info.txt\",\"route_directions.txt\",\"routes.txt\",\"shapes.txt\",\"stop_times.txt\",\"stops.txt\",\"transfers.txt\",\"trips.txt\"],\"zipfile_dirs\":[],\"extracted_files\":[]}\r\n--===============8062853517909164193==--" + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - FILTERED + Connection: + - keep-alive + Content-Length: + - '1546' + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/9e8e12fd-e758-40b4-a64f-377b2449766b + content-type: + - !!binary | + bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT04MDYyODUzNTE3OTA5 + MTY0MTkzPT0i + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - application/jsonl + method: POST + uri: https://storage.googleapis.com/upload/storage/v1/b/calitp-staging-pytest/o?uploadType=multipart + response: + body: + string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/unzipping_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/areas.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl/1764719284526219\",\n + \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/unzipping_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fareas.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\",\n + \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/unzipping_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fareas.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl?generation=1764719284526219&alt=media\",\n + \ \"name\": \"unzipping_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/areas.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\",\n + \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764719284526219\",\n + \ \"metageneration\": \"1\",\n \"contentType\": \"application/jsonl\",\n + \ \"storageClass\": \"STANDARD\",\n \"size\": \"926\",\n \"md5Hash\": \"epN3uvch0pD/lZLwPG9k/w==\",\n + \ \"crc32c\": \"wlfVTw==\",\n \"etag\": \"CIu51NCLoJEDEAE=\",\n \"timeCreated\": + \"2025-12-02T23:48:04.536Z\",\n \"updated\": \"2025-12-02T23:48:04.536Z\",\n + \ \"timeStorageClassUpdated\": \"2025-12-02T23:48:04.536Z\",\n \"timeFinalized\": + \"2025-12-02T23:48:04.536Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": + \"{\\\"filename\\\": \\\"results.jsonl\\\", \\\"ts\\\": \\\"2025-06-03T00:00:00+00:00\\\"}\"\n + \ }\n}\n" + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Length: + - '2037' + Content-Type: + - application/json; charset=UTF-8 + Date: + - Tue, 02 Dec 2025 23:48:04 GMT + ETag: + - CIu51NCLoJEDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AOCedOFQfK9C_5s6f_zxLlmV28sdo0JF4O3AMx4FH763wgYEM4qz7MW0ABG7yLzGBo-NcFepMoTBZzTei0eC + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip + Authorization: + - FILTERED + Connection: + - keep-alive + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/096a3787-03f6-4634-b3f0-718176a644e9 + x-goog-user-project: + - cal-itp-data-infra-staging + method: GET + uri: https://storage.googleapis.com/storage/v1/b/calitp-staging-pytest/o/areas.txt%2Fdt%3D2025-06-02%2Fts%3D2025-06-02T00%3A00%3A00%2B00%3A00%2Fbase64_url%3DaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA%3D%3D%2Fareas.txt?fields=name&prettyPrint=false + response: + body: + string: '{"error":{"code":404,"message":"No such object: calitp-staging-pytest/areas.txt/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/areas.txt","errors":[{"message":"No + such object: calitp-staging-pytest/areas.txt/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/areas.txt","domain":"global","reason":"notFound"}]}}' + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Length: + - '723' + Content-Type: + - application/json; charset=UTF-8 + Date: + - Tue, 02 Dec 2025 23:48:05 GMT + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AOCedOEpsMixyi0wW0ew36G7QLrNcDwt_eoxs4-igEMoh5k5Dx4RdfBoWjLuHUbBQsTeVk5xjxeF3g + status: + code: 404 + message: Not Found +- request: + body: null + headers: + Accept: + - application/json + Authorization: + - FILTERED + Connection: + - keep-alive + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/41b2389d-21f7-4909-b11d-670123cdbe42 + accept-encoding: + - gzip + content-type: + - application/json; charset=UTF-8 + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - application/json; charset=UTF-8 + method: GET + uri: https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/unzipping_results%2Fdt%3D2025-06-02%2Fts%3D2025-06-02T00%3A00%3A00%2B00%3A00%2Fareas.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA%3D%3D.jsonl?alt=media + response: + body: + string: '{"success":true,"exception":null,"extract":{"filename":"gtfs.zip","ts":"2025-06-03T00:00:00+00:00","config":{"auth_headers":{},"auth_query_params":{},"computed":false,"feed_type":"schedule","name":"Santa + Ynez Mecatran Schedule","schedule_url_for_validation":null,"url":"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0","extracted_at":"2025-06-01T00:00:00+00:00"},"response_code":200,"response_headers":{"Content-Type":"application/zip","Content-Disposition":"attachment; + filename=gtfs.zip"},"reconstructed":false},"zipfile_extract_md5hash":"4f72c84bd3f053ddb929289fa2de7879","zipfile_files":["agency.txt","calendar.txt","calendar_dates.txt","fare_attributes.txt","feed_info.txt","route_directions.txt","routes.txt","shapes.txt","stop_times.txt","stops.txt","transfers.txt","trips.txt"],"zipfile_dirs":[],"extracted_files":[]}' + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Disposition: + - attachment + Content-Length: + - '926' + Content-Type: + - application/jsonl + Date: + - Tue, 02 Dec 2025 23:48:05 GMT + ETag: + - CIu51NCLoJEDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Last-Modified: + - Tue, 02 Dec 2025 23:48:04 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AOCedOFY5a41SBZeDQJoh_CdIDkdNu2q1A6_hZbo52YPqpyuO_JLoyZCOlqzevlxGTA4nrt7sScxKw + X-Goog-Generation: + - '1764719284526219' + X-Goog-Hash: + - crc32c=wlfVTw==,md5=epN3uvch0pD/lZLwPG9k/w== + X-Goog-Metageneration: + - '1' + X-Goog-Storage-Class: + - STANDARD + X-Goog-Stored-Content-Encoding: + - identity + X-Goog-Stored-Content-Length: + - '926' + status: + code: 200 + message: OK +version: 1 diff --git a/airflow/tests/operators/cassettes/test_validate_gtfs_to_gcs_operator/TestValidateGTFSToGCSOperator.test_execute.yaml b/airflow/tests/operators/cassettes/test_validate_gtfs_to_gcs_operator/TestValidateGTFSToGCSOperator.test_execute.yaml index 4b0c8b8397..bae2603bd2 100644 --- a/airflow/tests/operators/cassettes/test_validate_gtfs_to_gcs_operator/TestValidateGTFSToGCSOperator.test_execute.yaml +++ b/airflow/tests/operators/cassettes/test_validate_gtfs_to_gcs_operator/TestValidateGTFSToGCSOperator.test_execute.yaml @@ -9,10 +9,10 @@ interactions: Connection: - keep-alive User-Agent: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 X-Goog-API-Client: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 - gccl-invocation-id/5580ade3-7cb1-47c3-be1f-32f4904129ff + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/4be4cfda-788e-492d-bd2b-caa7c3fee58d accept-encoding: - gzip content-type: @@ -469,13 +469,13 @@ interactions: Content-Type: - application/zip Date: - - Tue, 25 Nov 2025 18:28:21 GMT + - Thu, 04 Dec 2025 02:10:46 GMT ETag: - - CIvmvZTljZEDEAE= + - COyv5eT6jZEDEAE= Expires: - Mon, 01 Jan 1990 00:00:00 GMT Last-Modified: - - Tue, 25 Nov 2025 17:08:02 GMT + - Tue, 25 Nov 2025 18:44:48 GMT Pragma: - no-cache Server: @@ -484,9 +484,9 @@ interactions: - Origin - X-Origin X-GUploader-UploadID: - - AOCedOEDMGcLTCIAOl86u3HWH-X2RhFI4lFpPgwR9ytavzzBTEaDNO6u2C4rdQ-zieSwq-zKM_waGw + - AOCedOG2SdrVJFpmZOw9Wr-zNSLX8qReuWz-VCGvdd4Mq5ca_2HTKhjIMs6KAag2P3yHN8U- X-Goog-Generation: - - '1764090482488075' + - '1764096288053228' X-Goog-Hash: - crc32c=lxCKqA==,md5=zsRgt7THKTNwu3SMKXUNQQ== X-Goog-Metageneration: @@ -502,7 +502,7 @@ interactions: message: OK - request: body: !!binary | - LS09PT09PT09PT09PT09PT00MzczODQxNDE5MjA1Nzc2MDU2PT0NCmNvbnRlbnQtdHlwZTogYXBw + LS09PT09PT09PT09PT09PT04ODU1NTU2MjQxNjcxODI5MzQ4PT0NCmNvbnRlbnQtdHlwZTogYXBw bGljYXRpb24vanNvbjsgY2hhcnNldD1VVEYtOA0KDQp7Im5hbWUiOiAidmFsaWRhdGlvbl9ub3Rp Y2VzL2R0PTIwMjUtMDYtMDIvdHM9MjAyNS0wNi0wMlQwMDowMDowMCswMDowMC9iYXNlNjRfdXJs PWFIUjBjRG92TDJGd2NDNXRaV05oZEhKaGJpNWpiMjB2ZFhKaUwzZHpMMlpsWldRdll6SnNNRnBV @@ -520,8 +520,8 @@ interactions: YXBwLm1lY2F0cmFuLmNvbS91cmIvd3MvZmVlZC9jMmwwWlQxemVYWjBPMk5zYVdWdWREMXpaV3ht TzJWNGNHbHlaVDA3ZEhsd1pUMW5kR1p6TzJ0bGVUMDBNamN3TnpRMFpUWTROVEF6T1RNeU1ESXhN RGRqTnpJME1EUmtNell5TlRNNE16STBZekkwXCJ9LCBcInRzXCI6IFwiMjAyNS0wNi0wMlQwMDow - MDowMCswMDowMFwifSJ9fQ0KLS09PT09PT09PT09PT09PT00MzczODQxNDE5MjA1Nzc2MDU2PT0N - CmNvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vanNvbmwNCg0KH4sIAEf1JWkC/+2aW2/bRhCF3/sr + MDowMCswMDowMFwifSJ9fQ0KLS09PT09PT09PT09PT09PT04ODU1NTU2MjQxNjcxODI5MzQ4PT0N + CmNvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vanNvbmwNCg0KH4sIAKftMGkC/+2aW2/bRhCF3/sr Ar3Wofd+0Vtat6kfJLe2mjQuCoIRaVsJRakU5Sv83zuUE0eUzyrrQi8BAiQBQnIPPw5n58wuddeb Fk2WZ03W69/1zpuzRXqZlRM6MKvTy6JeTGZVr9+71AlLWG+vV1w3dTZu0vGsOpuct2OyZXORXhRZ ThfT/+/3Ho78uyzqm3Se1dn00+HxbDpfNkXe659l5aJ41CryNGvoHoIJ/ZLzl1yNmOgzRn9+XP1L @@ -553,8 +553,8 @@ interactions: CdQzeqULINA0i3R1Ml1czOomXV3/KKOeL1POqvMNFROrktPEGrfvm20ocPlsCb4psfksTT2ZIwVK 97Q9BwNiniHyvpyNP6aTPPxWto0+ryd5Z/CTGIRHj4t5G4Ks/J+PnzXz9GHcl/F6Y/yimcHxY8rz r4U+NDari2xzbOx9H198N2gmcnj72J2B9hkDl1S3V8f4moDbEPjsF0DjU9nffHT+vfJ/o5W/fe0x - df8rZf+hoj5m9kP6UVL8B29dlIr0KgAADQotLT09PT09PT09PT09PT09PTQzNzM4NDE0MTkyMDU3 - NzYwNTY9PS0t + df8rZf+hoj5m9kP6UVL8B29dlIr0KgAADQotLT09PT09PT09PT09PT09PTg4NTU1NTYyNDE2NzE4 + MjkzNDg9PS0t headers: Accept: - application/json @@ -567,14 +567,14 @@ interactions: Content-Length: - '2973' User-Agent: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 X-Goog-API-Client: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 - gccl-invocation-id/e958affd-8ab1-417c-8451-8c6cde439ba5 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/db542cee-9950-4a27-881a-eee18790d807 content-type: - !!binary | - bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT00MzczODQxNDE5MjA1 - Nzc2MDU2PT0i + bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT04ODU1NTU2MjQxNjcx + ODI5MzQ4PT0i x-goog-user-project: - cal-itp-data-infra-staging x-upload-content-type: @@ -583,17 +583,17 @@ interactions: uri: https://storage.googleapis.com/upload/storage/v1/b/calitp-staging-pytest/o?uploadType=multipart response: body: - string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/validation_notices/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/validation_notices_v5-0-0.jsonl.gz/1764095303597081\",\n + string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/validation_notices/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/validation_notices_v5-0-0.jsonl.gz/1764814248203882\",\n \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/validation_notices%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fvalidation_notices_v5-0-0.jsonl.gz\",\n - \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/validation_notices%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fvalidation_notices_v5-0-0.jsonl.gz?generation=1764095303597081&alt=media\",\n + \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/validation_notices%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fvalidation_notices_v5-0-0.jsonl.gz?generation=1764814248203882&alt=media\",\n \ \"name\": \"validation_notices/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/validation_notices_v5-0-0.jsonl.gz\",\n - \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764095303597081\",\n + \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764814248203882\",\n \ \"metageneration\": \"1\",\n \"contentType\": \"application/jsonl\",\n - \ \"storageClass\": \"STANDARD\",\n \"size\": \"1812\",\n \"md5Hash\": \"8mwPc3dEFZ2miw3IvwsBYw==\",\n - \ \"crc32c\": \"//nGxw==\",\n \"etag\": \"CJn4ro/3jZEDEAE=\",\n \"timeCreated\": - \"2025-11-25T18:28:23.607Z\",\n \"updated\": \"2025-11-25T18:28:23.607Z\",\n - \ \"timeStorageClassUpdated\": \"2025-11-25T18:28:23.607Z\",\n \"timeFinalized\": - \"2025-11-25T18:28:23.607Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": + \ \"storageClass\": \"STANDARD\",\n \"size\": \"1812\",\n \"md5Hash\": \"X+GDrgWOa47U1/oDcEUKDw==\",\n + \ \"crc32c\": \"bNmpNQ==\",\n \"etag\": \"COqs77LtopEDEAE=\",\n \"timeCreated\": + \"2025-12-04T02:10:48.216Z\",\n \"updated\": \"2025-12-04T02:10:48.216Z\",\n + \ \"timeStorageClassUpdated\": \"2025-12-04T02:10:48.216Z\",\n \"timeFinalized\": + \"2025-12-04T02:10:48.216Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"validation_notices_v5-0-0.jsonl.gz\\\", \\\"system_errors\\\": {\\\"notices\\\": []}, \\\"validator_version\\\": \\\"v5.0.0\\\", \\\"extract_config\\\": {\\\"auth_headers\\\": {}, \\\"auth_query_params\\\": {}, \\\"computed\\\": @@ -611,9 +611,9 @@ interactions: Content-Type: - application/json; charset=UTF-8 Date: - - Tue, 25 Nov 2025 18:28:23 GMT + - Thu, 04 Dec 2025 02:10:48 GMT ETag: - - CJn4ro/3jZEDEAE= + - COqs77LtopEDEAE= Expires: - Mon, 01 Jan 1990 00:00:00 GMT Pragma: @@ -624,19 +624,19 @@ interactions: - Origin - X-Origin X-GUploader-UploadID: - - AOCedOGFJDqjAlWRb3PvjQcZqoN5szFpIy2fVOp13loPyngZI3gVAQ7l3ZfK9rSFYtc0Q5Kah6hiDQ + - AOCedOHeXpoADIh38FQZzgqWpuaTGApRm-HKxsLGZe7bacdnhr9wF6ttJp1idRiwVugwXy51ELGADOKOvqMT status: code: 200 message: OK - request: - body: "--===============8505214337783126751==\r\ncontent-type: application/json; + body: "--===============3770977232075009686==\r\ncontent-type: application/json; charset=UTF-8\r\n\r\n{\"name\": \"validation_job_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\", \"metadata\": {\"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"results.jsonl\\\", - \\\"ts\\\": \\\"2025-06-02T00:00:00+00:00\\\"}\"}}\r\n--===============8505214337783126751==\r\ncontent-type: + \\\"ts\\\": \\\"2025-06-02T00:00:00+00:00\\\"}\"}}\r\n--===============3770977232075009686==\r\ncontent-type: application/jsonl\r\n\r\n{\"validation\":{\"filename\":\"validation_notices_v5-0-0.jsonl.gz\",\"system_errors\":{\"notices\":[]},\"validator_version\":\"v5.0.0\",\"extract_config\":{\"auth_headers\":{},\"auth_query_params\":{},\"computed\":false,\"extracted_at\":\"2025-11-14T02:00:00+00:00\",\"feed_type\":\"schedule\",\"name\":\"Santa Ynez Mecatran Schedule\",\"schedule_url_for_validation\":null,\"url\":\"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\"},\"ts\":\"2025-06-02T00:00:00+00:00\"},\"extract\":{\"filename\":\"gtfs.zip\",\"ts\":\"2025-06-03T00:00:00+00:00\",\"config\":{\"auth_headers\":{},\"auth_query_params\":{},\"computed\":false,\"feed_type\":\"schedule\",\"name\":\"Santa Ynez Mecatran Schedule\",\"schedule_url_for_validation\":null,\"url\":\"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\",\"extracted_at\":\"2025-06-01T00:00:00+00:00\"},\"response_code\":200,\"response_headers\":{\"Content-Type\":\"application/zip\",\"Content-Disposition\":\"attachment; - filename=gtfs.zip\"},\"reconstructed\":false},\"success\":true,\"exception\":null}\r\n--===============8505214337783126751==--" + filename=gtfs.zip\"},\"reconstructed\":false},\"success\":true,\"exception\":null}\r\n--===============3770977232075009686==--" headers: Accept: - application/json @@ -649,14 +649,14 @@ interactions: Content-Length: - '1759' User-Agent: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 X-Goog-API-Client: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 - gccl-invocation-id/093609cf-f1ca-450c-af67-1f05b653e0ac + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/34db0e62-5c64-4d82-8bd4-ac185c67717d content-type: - !!binary | - bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT04NTA1MjE0MzM3Nzgz - MTI2NzUxPT0i + bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT0zNzcwOTc3MjMyMDc1 + MDA5Njg2PT0i x-goog-user-project: - cal-itp-data-infra-staging x-upload-content-type: @@ -665,17 +665,17 @@ interactions: uri: https://storage.googleapis.com/upload/storage/v1/b/calitp-staging-pytest/o?uploadType=multipart response: body: - string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/validation_job_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl/1764095304977404\",\n + string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/validation_job_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl/1764814249365104\",\n \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/validation_job_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2FaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\",\n - \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/validation_job_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2FaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl?generation=1764095304977404&alt=media\",\n + \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/validation_job_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2FaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl?generation=1764814249365104&alt=media\",\n \ \"name\": \"validation_job_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\",\n - \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764095304977404\",\n + \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764814249365104\",\n \ \"metageneration\": \"1\",\n \"contentType\": \"application/jsonl\",\n \ \"storageClass\": \"STANDARD\",\n \"size\": \"1144\",\n \"md5Hash\": \"+4rkbn8gOJfoeSE8G+c3fA==\",\n - \ \"crc32c\": \"pZmCSQ==\",\n \"etag\": \"CPyXg5D3jZEDEAE=\",\n \"timeCreated\": - \"2025-11-25T18:28:24.988Z\",\n \"updated\": \"2025-11-25T18:28:24.988Z\",\n - \ \"timeStorageClassUpdated\": \"2025-11-25T18:28:24.988Z\",\n \"timeFinalized\": - \"2025-11-25T18:28:24.988Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": + \ \"crc32c\": \"pZmCSQ==\",\n \"etag\": \"CPCctrPtopEDEAE=\",\n \"timeCreated\": + \"2025-12-04T02:10:49.376Z\",\n \"updated\": \"2025-12-04T02:10:49.376Z\",\n + \ \"timeStorageClassUpdated\": \"2025-12-04T02:10:49.376Z\",\n \"timeFinalized\": + \"2025-12-04T02:10:49.376Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"results.jsonl\\\", \\\"ts\\\": \\\"2025-06-02T00:00:00+00:00\\\"}\"\n \ }\n}\n" headers: @@ -688,9 +688,9 @@ interactions: Content-Type: - application/json; charset=UTF-8 Date: - - Tue, 25 Nov 2025 18:28:24 GMT + - Thu, 04 Dec 2025 02:10:49 GMT ETag: - - CPyXg5D3jZEDEAE= + - CPCctrPtopEDEAE= Expires: - Mon, 01 Jan 1990 00:00:00 GMT Pragma: @@ -701,7 +701,7 @@ interactions: - Origin - X-Origin X-GUploader-UploadID: - - AOCedOEIuqjQNveGCo96DdFOl8tp1KY3J1Y7fKEMiosOB6o0oXg1Ri7tU4yWZo3m_yp9UuF1hQ6CRg + - AOCedOF-f37pU3KlZKoKAcUSFXxAAUsJO16vdEWBEW5w7zQ5OciHQEAWoSCMRsy6vx0-ja1yM4nYJA status: code: 200 message: OK @@ -715,10 +715,10 @@ interactions: Connection: - keep-alive User-Agent: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 X-Goog-API-Client: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 - gccl-invocation-id/f0aeb2c9-08b4-4411-abee-802380c8051a + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/b26ee843-4be8-4d12-911f-f16abb849cbf accept-encoding: - gzip content-type: @@ -1175,13 +1175,13 @@ interactions: Content-Type: - application/zip Date: - - Tue, 25 Nov 2025 18:28:25 GMT + - Thu, 04 Dec 2025 02:10:50 GMT ETag: - - CIvmvZTljZEDEAE= + - COyv5eT6jZEDEAE= Expires: - Mon, 01 Jan 1990 00:00:00 GMT Last-Modified: - - Tue, 25 Nov 2025 17:08:02 GMT + - Tue, 25 Nov 2025 18:44:48 GMT Pragma: - no-cache Server: @@ -1190,9 +1190,9 @@ interactions: - Origin - X-Origin X-GUploader-UploadID: - - AOCedOEI2JrPa0eKCR25678hHr2l5W1piEhsKBHtk_NUFsr5l6ZwaU-u5HQ0nQo2FA-hBEocjJJe1w + - AOCedOF1R4Zv3jGL4TzRRqqVjZ_4yZ6BWpUm5us3Sx4Ox9II4uEueWPvYbF-v2kNG5DmN114sLxcaQ X-Goog-Generation: - - '1764090482488075' + - '1764096288053228' X-Goog-Hash: - crc32c=lxCKqA==,md5=zsRgt7THKTNwu3SMKXUNQQ== X-Goog-Metageneration: @@ -1208,7 +1208,7 @@ interactions: message: OK - request: body: !!binary | - LS09PT09PT09PT09PT09PT0yNDk0OTg4Mzk0MjE5NDQxMDIyPT0NCmNvbnRlbnQtdHlwZTogYXBw + LS09PT09PT09PT09PT09PT03MzY1NTAzNzk3MjE0OTM5NjEyPT0NCmNvbnRlbnQtdHlwZTogYXBw bGljYXRpb24vanNvbjsgY2hhcnNldD1VVEYtOA0KDQp7Im5hbWUiOiAidmFsaWRhdGlvbl9ub3Rp Y2VzL2R0PTIwMjUtMDYtMDIvdHM9MjAyNS0wNi0wMlQwMDowMDowMCswMDowMC9iYXNlNjRfdXJs PWFIUjBjRG92TDJGd2NDNXRaV05oZEhKaGJpNWpiMjB2ZFhKaUwzZHpMMlpsWldRdll6SnNNRnBV @@ -1226,8 +1226,8 @@ interactions: YXBwLm1lY2F0cmFuLmNvbS91cmIvd3MvZmVlZC9jMmwwWlQxemVYWjBPMk5zYVdWdWREMXpaV3ht TzJWNGNHbHlaVDA3ZEhsd1pUMW5kR1p6TzJ0bGVUMDBNamN3TnpRMFpUWTROVEF6T1RNeU1ESXhN RGRqTnpJME1EUmtNell5TlRNNE16STBZekkwXCJ9LCBcInRzXCI6IFwiMjAyNS0wNi0wM1QwMDow - MDowMCswMDowMFwifSJ9fQ0KLS09PT09PT09PT09PT09PT0yNDk0OTg4Mzk0MjE5NDQxMDIyPT0N - CmNvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vanNvbmwNCg0KH4sIAEv1JWkC/+2aW2/bRhCF3/sr + MDowMCswMDowMFwifSJ9fQ0KLS09PT09PT09PT09PT09PT03MzY1NTAzNzk3MjE0OTM5NjEyPT0N + CmNvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vanNvbmwNCg0KH4sIAKztMGkC/+2aW2/bRhCF3/sr Ar3Wofd+0Vtat6kfJLe2mjQuCoIRaVsJRakU5Sv83zuUE0eUzyrrQi8BAiQBQnIPPw5n58wuddeb Fk2WZ03W69/1zpuzRXqZlRM6MKvTy6JeTGZVr9+71AlLWG+vV1w3dTZu0vGsOpuct2OyZXORXhRZ ThfT/+/3Ho78uyzqm3Se1dn00+HxbDpfNkXe659l5aJ41CryNGvoHoIJ/ZLzl1yNmOgzRn9+XP1L @@ -1259,8 +1259,8 @@ interactions: CdQzeqULINA0i3R1Ml1czOomXV3/KKOeL1POqvMNFROrktPEGrfvm20ocPlsCb4psfksTT2ZIwVK 97Q9BwNiniHyvpyNP6aTPPxWto0+ryd5Z/CTGIRHj4t5G4Ks/J+PnzXz9GHcl/F6Y/yimcHxY8rz r4U+NDari2xzbOx9H198N2gmcnj72J2B9hkDl1S3V8f4moDbEPjsF0DjU9nffHT+vfJ/o5W/fe0x - df8rZf+hoj5m9kP6UVL8B29dlIr0KgAADQotLT09PT09PT09PT09PT09PTI0OTQ5ODgzOTQyMTk0 - NDEwMjI9PS0t + df8rZf+hoj5m9kP6UVL8B29dlIr0KgAADQotLT09PT09PT09PT09PT09PTczNjU1MDM3OTcyMTQ5 + Mzk2MTI9PS0t headers: Accept: - application/json @@ -1273,14 +1273,14 @@ interactions: Content-Length: - '2973' User-Agent: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 X-Goog-API-Client: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 - gccl-invocation-id/89aa3bc9-5a86-421f-a331-fad865a433e5 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/adf547bf-7467-4949-9cbb-6d181e60bb52 content-type: - !!binary | - bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT0yNDk0OTg4Mzk0MjE5 - NDQxMDIyPT0i + bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT03MzY1NTAzNzk3MjE0 + OTM5NjEyPT0i x-goog-user-project: - cal-itp-data-infra-staging x-upload-content-type: @@ -1289,17 +1289,17 @@ interactions: uri: https://storage.googleapis.com/upload/storage/v1/b/calitp-staging-pytest/o?uploadType=multipart response: body: - string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/validation_notices/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/validation_notices_v5-0-0.jsonl.gz/1764095307864322\",\n + string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/validation_notices/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/validation_notices_v5-0-0.jsonl.gz/1764814253367824\",\n \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/validation_notices%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fvalidation_notices_v5-0-0.jsonl.gz\",\n - \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/validation_notices%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fvalidation_notices_v5-0-0.jsonl.gz?generation=1764095307864322&alt=media\",\n + \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/validation_notices%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fvalidation_notices_v5-0-0.jsonl.gz?generation=1764814253367824&alt=media\",\n \ \"name\": \"validation_notices/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/validation_notices_v5-0-0.jsonl.gz\",\n - \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764095307864322\",\n + \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764814253367824\",\n \ \"metageneration\": \"1\",\n \"contentType\": \"application/jsonl\",\n - \ \"storageClass\": \"STANDARD\",\n \"size\": \"1812\",\n \"md5Hash\": \"LLY1Jeci6aQWBws7gt5rHw==\",\n - \ \"crc32c\": \"h/gD3Q==\",\n \"etag\": \"CIKys5H3jZEDEAE=\",\n \"timeCreated\": - \"2025-11-25T18:28:27.876Z\",\n \"updated\": \"2025-11-25T18:28:27.876Z\",\n - \ \"timeStorageClassUpdated\": \"2025-11-25T18:28:27.876Z\",\n \"timeFinalized\": - \"2025-11-25T18:28:27.876Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": + \ \"storageClass\": \"STANDARD\",\n \"size\": \"1812\",\n \"md5Hash\": \"tLR324Rkd8cbu3hUcVTqVg==\",\n + \ \"crc32c\": \"oC6a5w==\",\n \"etag\": \"CJDEqrXtopEDEAE=\",\n \"timeCreated\": + \"2025-12-04T02:10:53.376Z\",\n \"updated\": \"2025-12-04T02:10:53.376Z\",\n + \ \"timeStorageClassUpdated\": \"2025-12-04T02:10:53.376Z\",\n \"timeFinalized\": + \"2025-12-04T02:10:53.376Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"validation_notices_v5-0-0.jsonl.gz\\\", \\\"system_errors\\\": {\\\"notices\\\": []}, \\\"validator_version\\\": \\\"v5.0.0\\\", \\\"extract_config\\\": {\\\"auth_headers\\\": {}, \\\"auth_query_params\\\": {}, \\\"computed\\\": @@ -1317,9 +1317,9 @@ interactions: Content-Type: - application/json; charset=UTF-8 Date: - - Tue, 25 Nov 2025 18:28:27 GMT + - Thu, 04 Dec 2025 02:10:53 GMT ETag: - - CIKys5H3jZEDEAE= + - CJDEqrXtopEDEAE= Expires: - Mon, 01 Jan 1990 00:00:00 GMT Pragma: @@ -1330,19 +1330,19 @@ interactions: - Origin - X-Origin X-GUploader-UploadID: - - AOCedOEFiytWqocknr1TulvxNwitEDxoFxI71YamJyUt-Hg9Dkfz9h1SZrAUTiNkhZm0Zb1Hn-jhXA + - AOCedOF1lOD0_wP7h5U0FkQ8JBhaYQ7iO5hQjsFA0lssvDy3wWPhXCekeEleyo5MtU95Bc1E status: code: 200 message: OK - request: - body: "--===============6100171534986074872==\r\ncontent-type: application/json; + body: "--===============5127307358334077752==\r\ncontent-type: application/json; charset=UTF-8\r\n\r\n{\"name\": \"validation_job_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\", \"metadata\": {\"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"results.jsonl\\\", - \\\"ts\\\": \\\"2025-06-03T00:00:00+00:00\\\"}\"}}\r\n--===============6100171534986074872==\r\ncontent-type: + \\\"ts\\\": \\\"2025-06-03T00:00:00+00:00\\\"}\"}}\r\n--===============5127307358334077752==\r\ncontent-type: application/jsonl\r\n\r\n{\"validation\":{\"filename\":\"validation_notices_v5-0-0.jsonl.gz\",\"system_errors\":{\"notices\":[]},\"validator_version\":\"v5.0.0\",\"extract_config\":{\"auth_headers\":{},\"auth_query_params\":{},\"computed\":false,\"extracted_at\":\"2025-11-14T02:00:00+00:00\",\"feed_type\":\"schedule\",\"name\":\"Santa Ynez Mecatran Schedule\",\"schedule_url_for_validation\":null,\"url\":\"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\"},\"ts\":\"2025-06-03T00:00:00+00:00\"},\"extract\":{\"filename\":\"gtfs.zip\",\"ts\":\"2025-06-03T00:00:00+00:00\",\"config\":{\"auth_headers\":{},\"auth_query_params\":{},\"computed\":false,\"feed_type\":\"schedule\",\"name\":\"Santa Ynez Mecatran Schedule\",\"schedule_url_for_validation\":null,\"url\":\"http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0\",\"extracted_at\":\"2025-06-01T00:00:00+00:00\"},\"response_code\":200,\"response_headers\":{\"Content-Type\":\"application/zip\",\"Content-Disposition\":\"attachment; - filename=gtfs.zip\"},\"reconstructed\":false},\"success\":true,\"exception\":null}\r\n--===============6100171534986074872==--" + filename=gtfs.zip\"},\"reconstructed\":false},\"success\":true,\"exception\":null}\r\n--===============5127307358334077752==--" headers: Accept: - application/json @@ -1355,14 +1355,14 @@ interactions: Content-Length: - '1759' User-Agent: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 X-Goog-API-Client: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 - gccl-invocation-id/f9fb3e47-80eb-4b25-9e23-c33b73c6172d + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/ee0c6954-e602-4d30-9213-da2610aa63c0 content-type: - !!binary | - bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT02MTAwMTcxNTM0OTg2 - MDc0ODcyPT0i + bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT01MTI3MzA3MzU4MzM0 + MDc3NzUyPT0i x-goog-user-project: - cal-itp-data-infra-staging x-upload-content-type: @@ -1371,17 +1371,17 @@ interactions: uri: https://storage.googleapis.com/upload/storage/v1/b/calitp-staging-pytest/o?uploadType=multipart response: body: - string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/validation_job_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl/1764095308643309\",\n + string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/validation_job_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl/1764814254634744\",\n \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/validation_job_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2FaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\",\n - \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/validation_job_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2FaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl?generation=1764095308643309&alt=media\",\n + \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/validation_job_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2FaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl?generation=1764814254634744&alt=media\",\n \ \"name\": \"validation_job_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl\",\n - \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764095308643309\",\n + \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764814254634744\",\n \ \"metageneration\": \"1\",\n \"contentType\": \"application/jsonl\",\n \ \"storageClass\": \"STANDARD\",\n \"size\": \"1144\",\n \"md5Hash\": \"yGGdPvzq9NT41IIhtuXVSg==\",\n - \ \"crc32c\": \"9tz06A==\",\n \"etag\": \"CO334pH3jZEDEAE=\",\n \"timeCreated\": - \"2025-11-25T18:28:28.654Z\",\n \"updated\": \"2025-11-25T18:28:28.654Z\",\n - \ \"timeStorageClassUpdated\": \"2025-11-25T18:28:28.654Z\",\n \"timeFinalized\": - \"2025-11-25T18:28:28.654Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": + \ \"crc32c\": \"9tz06A==\",\n \"etag\": \"CPjt97XtopEDEAE=\",\n \"timeCreated\": + \"2025-12-04T02:10:54.643Z\",\n \"updated\": \"2025-12-04T02:10:54.643Z\",\n + \ \"timeStorageClassUpdated\": \"2025-12-04T02:10:54.643Z\",\n \"timeFinalized\": + \"2025-12-04T02:10:54.643Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"results.jsonl\\\", \\\"ts\\\": \\\"2025-06-03T00:00:00+00:00\\\"}\"\n \ }\n}\n" headers: @@ -1394,9 +1394,9 @@ interactions: Content-Type: - application/json; charset=UTF-8 Date: - - Tue, 25 Nov 2025 18:28:28 GMT + - Thu, 04 Dec 2025 02:10:54 GMT ETag: - - CO334pH3jZEDEAE= + - CPjt97XtopEDEAE= Expires: - Mon, 01 Jan 1990 00:00:00 GMT Pragma: @@ -1407,7 +1407,7 @@ interactions: - Origin - X-Origin X-GUploader-UploadID: - - AOCedOEDQbvo4mWIjiqImC2E7hdR3Hm2Jjs8JE_7YSvnnmbqOKiBPfedQfjZgCeMjw4OKr-FVMqKZA + - AOCedOH3g_HKwP_H1Tw7EYnt6qMorcZ5ONckqB2Enc3dDFQe87V2VbxcP8IQ57xiuu7qWRyM status: code: 200 message: OK @@ -1421,10 +1421,10 @@ interactions: Connection: - keep-alive User-Agent: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 X-Goog-API-Client: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 - gccl-invocation-id/c6d9b6a3-0479-402a-9573-4947c4c0129c + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/040c6854-630c-47c6-9215-fd45c877caaf accept-encoding: - gzip content-type: @@ -1438,7 +1438,7 @@ interactions: response: body: string: !!binary | - H4sIAEv1JWkC/+2aW2/bRhCF3/srAr3Wofd+0Vtat6kfJLe2mjQuCoIRaVsJRakU5Sv83zuUE0eU + H4sIAKztMGkC/+2aW2/bRhCF3/srAr3Wofd+0Vtat6kfJLe2mjQuCoIRaVsJRakU5Sv83zuUE0eU zyrrQi8BAiQBQnIPPw5n58wuddebFk2WZ03W69/1zpuzRXqZlRM6MKvTy6JeTGZVr9+71AlLWG+v V1w3dTZu0vGsOpuct2OyZXORXhRZThfT/+/3Ho78uyzqm3Se1dn00+HxbDpfNkXe659l5aJ41Cry NGvoHoIJ/ZLzl1yNmOgzRn9+XP1Ltz0r6KrmZl7QdYvxRZEvy4IOV9m0PXKSVU324l1V3L4YFOOM @@ -1482,13 +1482,13 @@ interactions: Content-Type: - application/jsonl Date: - - Tue, 25 Nov 2025 18:28:29 GMT + - Thu, 04 Dec 2025 02:10:55 GMT ETag: - - CIKys5H3jZEDEAE= + - CJDEqrXtopEDEAE= Expires: - Mon, 01 Jan 1990 00:00:00 GMT Last-Modified: - - Tue, 25 Nov 2025 18:28:27 GMT + - Thu, 04 Dec 2025 02:10:53 GMT Pragma: - no-cache Server: @@ -1497,11 +1497,11 @@ interactions: - Origin - X-Origin X-GUploader-UploadID: - - AOCedOGqfrDZNlFWOEKH0QnhPEcd5hQcvk1Jf2PJpBR62cPF5CWRZ1x0ctotkd9d2AY_TDSEMo8bHA + - AOCedOHfIFUhEVZQhaenc5t8DVc_QQd9L9LkmeSLCmHcm9gtQAGNhQvEk0NDQb6O2-c8z4La X-Goog-Generation: - - '1764095307864322' + - '1764814253367824' X-Goog-Hash: - - crc32c=h/gD3Q==,md5=LLY1Jeci6aQWBws7gt5rHw== + - crc32c=oC6a5w==,md5=tLR324Rkd8cbu3hUcVTqVg== X-Goog-Metageneration: - '1' X-Goog-Storage-Class: @@ -1525,17 +1525,17 @@ interactions: Connection: - keep-alive User-Agent: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 X-Goog-API-Client: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 - gccl-invocation-id/d7c29b96-64a0-4b70-9964-d0aafcc5e920 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/d1408e04-3f31-4f88-b3ba-2fec56db9947 x-goog-user-project: - cal-itp-data-infra-staging method: GET uri: https://storage.googleapis.com/storage/v1/b/calitp-staging-pytest/o/validation_notices%2Fdt%3D2025-06-02%2Fts%3D2025-06-02T00%3A00%3A00%2B00%3A00%2Fbase64_url%3DaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA%3D%3D%2Fvalidation_notices_v5-0-0.jsonl.gz?prettyPrint=false&projection=noAcl response: body: - string: '{"kind":"storage#object","id":"calitp-staging-pytest/validation_notices/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/validation_notices_v5-0-0.jsonl.gz/1764095307864322","selfLink":"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/validation_notices%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fvalidation_notices_v5-0-0.jsonl.gz","mediaLink":"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/validation_notices%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fvalidation_notices_v5-0-0.jsonl.gz?generation=1764095307864322&alt=media","name":"validation_notices/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/validation_notices_v5-0-0.jsonl.gz","bucket":"calitp-staging-pytest","generation":"1764095307864322","metageneration":"1","contentType":"application/jsonl","storageClass":"STANDARD","size":"1812","md5Hash":"LLY1Jeci6aQWBws7gt5rHw==","crc32c":"h/gD3Q==","etag":"CIKys5H3jZEDEAE=","timeCreated":"2025-11-25T18:28:27.876Z","updated":"2025-11-25T18:28:27.876Z","timeStorageClassUpdated":"2025-11-25T18:28:27.876Z","timeFinalized":"2025-11-25T18:28:27.876Z","metadata":{"PARTITIONED_ARTIFACT_METADATA":"{\"filename\": + string: '{"kind":"storage#object","id":"calitp-staging-pytest/validation_notices/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/validation_notices_v5-0-0.jsonl.gz/1764814253367824","selfLink":"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/validation_notices%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fvalidation_notices_v5-0-0.jsonl.gz","mediaLink":"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/validation_notices%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2Fbase64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==%2Fvalidation_notices_v5-0-0.jsonl.gz?generation=1764814253367824&alt=media","name":"validation_notices/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/validation_notices_v5-0-0.jsonl.gz","bucket":"calitp-staging-pytest","generation":"1764814253367824","metageneration":"1","contentType":"application/jsonl","storageClass":"STANDARD","size":"1812","md5Hash":"tLR324Rkd8cbu3hUcVTqVg==","crc32c":"oC6a5w==","etag":"CJDEqrXtopEDEAE=","timeCreated":"2025-12-04T02:10:53.376Z","updated":"2025-12-04T02:10:53.376Z","timeStorageClassUpdated":"2025-12-04T02:10:53.376Z","timeFinalized":"2025-12-04T02:10:53.376Z","metadata":{"PARTITIONED_ARTIFACT_METADATA":"{\"filename\": \"validation_notices_v5-0-0.jsonl.gz\", \"system_errors\": {\"notices\": []}, \"validator_version\": \"v5.0.0\", \"extract_config\": {\"auth_headers\": {}, \"auth_query_params\": {}, \"computed\": false, \"extracted_at\": \"2025-11-14T02:00:00+00:00\", @@ -1552,18 +1552,18 @@ interactions: Content-Type: - application/json; charset=UTF-8 Date: - - Tue, 25 Nov 2025 18:28:29 GMT + - Thu, 04 Dec 2025 02:10:56 GMT ETag: - - CIKys5H3jZEDEAE= + - CJDEqrXtopEDEAE= Expires: - - Tue, 25 Nov 2025 18:28:29 GMT + - Thu, 04 Dec 2025 02:10:56 GMT Server: - UploadServer Vary: - Origin - X-Origin X-GUploader-UploadID: - - AOCedOEXd-vRDbuHWeZbQAv2qGuF3VEbYWyjSMUuRA84w1SpKuAb6bgYDKqhqZVglyTvw2Bk5Dy3yQ + - AOCedOF0rAT5JpPQowhBFvDIhnC4ApzQEqen6oSDjUkPJ9R2XFFQkrw9vPmu99w-psuACLXI status: code: 200 message: OK @@ -1577,10 +1577,10 @@ interactions: Connection: - keep-alive User-Agent: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 X-Goog-API-Client: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 - gccl-invocation-id/790b7231-1381-4ee6-a60f-0f3c417a0418 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/8f0ebae5-a636-441f-a93a-ffc2b1290c06 accept-encoding: - gzip content-type: @@ -1609,13 +1609,13 @@ interactions: Content-Type: - application/jsonl Date: - - Tue, 25 Nov 2025 18:28:29 GMT + - Thu, 04 Dec 2025 02:10:56 GMT ETag: - - CO334pH3jZEDEAE= + - CPjt97XtopEDEAE= Expires: - Mon, 01 Jan 1990 00:00:00 GMT Last-Modified: - - Tue, 25 Nov 2025 18:28:28 GMT + - Thu, 04 Dec 2025 02:10:54 GMT Pragma: - no-cache Server: @@ -1624,9 +1624,9 @@ interactions: - Origin - X-Origin X-GUploader-UploadID: - - AOCedOGDCOu-j0y4jcaxa2OwX6PJ1hKdgUwaRI_Q_IMycCKmNRVTSWZOGsfuyX_IlMfbzhYx4WaZKQ + - AOCedOH3zBT2IMf4sjQNefHmZOqSacOc0jRKZKrzU1p8UwN7QGCopx3ovmTJQluq5cmONOu_ X-Goog-Generation: - - '1764095308643309' + - '1764814254634744' X-Goog-Hash: - crc32c=9tz06A==,md5=yGGdPvzq9NT41IIhtuXVSg== X-Goog-Metageneration: @@ -1652,17 +1652,17 @@ interactions: Connection: - keep-alive User-Agent: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 X-Goog-API-Client: - - gcloud-python/2.19.0 gl-python/3.11.6 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 - gccl-invocation-id/8bf60960-6e0b-4440-a929-8f95433dde87 + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/4bc87c45-f65e-4b5f-b1f7-1cdd1c1d12bd x-goog-user-project: - cal-itp-data-infra-staging method: GET uri: https://storage.googleapis.com/storage/v1/b/calitp-staging-pytest/o/validation_job_results%2Fdt%3D2025-06-02%2Fts%3D2025-06-02T00%3A00%3A00%2B00%3A00%2FaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA%3D%3D.jsonl?prettyPrint=false&projection=noAcl response: body: - string: '{"kind":"storage#object","id":"calitp-staging-pytest/validation_job_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl/1764095308643309","selfLink":"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/validation_job_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2FaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl","mediaLink":"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/validation_job_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2FaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl?generation=1764095308643309&alt=media","name":"validation_job_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl","bucket":"calitp-staging-pytest","generation":"1764095308643309","metageneration":"1","contentType":"application/jsonl","storageClass":"STANDARD","size":"1144","md5Hash":"yGGdPvzq9NT41IIhtuXVSg==","crc32c":"9tz06A==","etag":"CO334pH3jZEDEAE=","timeCreated":"2025-11-25T18:28:28.654Z","updated":"2025-11-25T18:28:28.654Z","timeStorageClassUpdated":"2025-11-25T18:28:28.654Z","timeFinalized":"2025-11-25T18:28:28.654Z","metadata":{"PARTITIONED_ARTIFACT_METADATA":"{\"filename\": + string: '{"kind":"storage#object","id":"calitp-staging-pytest/validation_job_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl/1764814254634744","selfLink":"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/validation_job_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2FaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl","mediaLink":"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/validation_job_results%2Fdt=2025-06-02%2Fts=2025-06-02T00:00:00%2B00:00%2FaHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl?generation=1764814254634744&alt=media","name":"validation_job_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl","bucket":"calitp-staging-pytest","generation":"1764814254634744","metageneration":"1","contentType":"application/jsonl","storageClass":"STANDARD","size":"1144","md5Hash":"yGGdPvzq9NT41IIhtuXVSg==","crc32c":"9tz06A==","etag":"CPjt97XtopEDEAE=","timeCreated":"2025-12-04T02:10:54.643Z","updated":"2025-12-04T02:10:54.643Z","timeStorageClassUpdated":"2025-12-04T02:10:54.643Z","timeFinalized":"2025-12-04T02:10:54.643Z","metadata":{"PARTITIONED_ARTIFACT_METADATA":"{\"filename\": \"results.jsonl\", \"ts\": \"2025-06-03T00:00:00+00:00\"}"}}' headers: Alt-Svc: @@ -1674,18 +1674,18 @@ interactions: Content-Type: - application/json; charset=UTF-8 Date: - - Tue, 25 Nov 2025 18:28:29 GMT + - Thu, 04 Dec 2025 02:10:56 GMT ETag: - - CO334pH3jZEDEAE= + - CPjt97XtopEDEAE= Expires: - - Tue, 25 Nov 2025 18:28:29 GMT + - Thu, 04 Dec 2025 02:10:56 GMT Server: - UploadServer Vary: - Origin - X-Origin X-GUploader-UploadID: - - AOCedOGHFNuuwUqeqCrkyvFNhGqqYJucMNA6MgWK_qfPlqUG5QpXryEHS9y3l9FSxjDVtHYF5lePHQ + - AOCedOFmsUH5nV_w-A6RWI3pGp6TEyNgc6JKy3i9llAfBuoz3NmEAy7ykWr7okuKbuQ8sU4 status: code: 200 message: OK diff --git a/airflow/tests/operators/cassettes/test_validate_gtfs_to_gcs_operator/TestValidateGTFSToGCSOperatorCalendarDatesEmpty.test_execute.yaml b/airflow/tests/operators/cassettes/test_validate_gtfs_to_gcs_operator/TestValidateGTFSToGCSOperatorCalendarDatesEmpty.test_execute.yaml new file mode 100644 index 0000000000..1ccbe1e12a --- /dev/null +++ b/airflow/tests/operators/cassettes/test_validate_gtfs_to_gcs_operator/TestValidateGTFSToGCSOperatorCalendarDatesEmpty.test_execute.yaml @@ -0,0 +1,539 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Authorization: + - FILTERED + Connection: + - keep-alive + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/7bc61ac4-f211-4ebb-ac3c-5dcf201c331c + accept-encoding: + - gzip + content-type: + - application/json; charset=UTF-8 + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - application/json; charset=UTF-8 + method: GET + uri: https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/schedule%2Fdt%3D2025-11-13%2Fts%3D2025-11-13T03%3A02%3A04.189504%2B00%3A00%2Fbase64_url%3DaHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc%3D%2Fschedule-27.zip?alt=media + response: + body: + string: !!binary | + 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 + LnR4dFBLBQYAAAAACQAJAAcCAADIBQAAAAA= + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Disposition: + - attachment + Content-Length: + - '2021' + Content-Type: + - application/octet-stream + Date: + - Thu, 04 Dec 2025 02:02:45 GMT + ETag: + - CImN3PSMoJEDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Last-Modified: + - Tue, 02 Dec 2025 23:53:48 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AOCedOFZqxz3OXAXBUxhBu_LaseMIA7ln3PawHc3L0eT0imSKSa64Fganap7CEwiM-voS6aJs-pC0g + X-Goog-Generation: + - '1764719628584585' + X-Goog-Hash: + - crc32c=F3bKVw==,md5=6mIsSfEakt9Z1A6l2fy9Eg== + X-Goog-Metageneration: + - '1' + X-Goog-Storage-Class: + - STANDARD + X-Goog-Stored-Content-Encoding: + - identity + X-Goog-Stored-Content-Length: + - '2021' + status: + code: 200 + message: OK +- request: + body: "--===============7933551281109335274==\r\ncontent-type: application/json; + charset=UTF-8\r\n\r\n{\"name\": \"validation_job_results/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl\", + \"metadata\": {\"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"results.jsonl\\\", + \\\"ts\\\": \\\"2025-11-13T00:00:00+00:00\\\"}\"}}\r\n--===============7933551281109335274==\r\ncontent-type: + application/jsonl\r\n\r\n{\"validation\":{\"filename\":\"validation_notices_v5-0-0.jsonl.gz\",\"system_errors\":{\"notices\":[]},\"validator_version\":\"v5.0.0\",\"extract_config\":{\"auth_headers\":{},\"auth_query_params\":{},\"computed\":false,\"extracted_at\":\"2025-11-12T02:00:00+00:00\",\"feed_type\":\"schedule\",\"name\":\"Fric + and Frac Schedule\",\"schedule_url_for_validation\":null,\"url\":\"https://www.ips-systems.com/GTFS/Schedule/27\"},\"ts\":\"2025-11-13T00:00:00+00:00\"},\"extract\":{\"filename\":\"schedule-27.zip\",\"ts\":\"2025-11-13T03:02:04.189504+00:00\",\"config\":{\"auth_headers\":{},\"auth_query_params\":{},\"computed\":false,\"extracted_at\":\"2025-11-12T02:00:00+00:00\",\"feed_type\":\"schedule\",\"name\":\"Fric + and Frac Schedule\",\"schedule_url_for_validation\":null,\"url\":\"https://www.ips-systems.com/GTFS/Schedule/27\"},\"response_code\":200,\"response_headers\":{\"Content-Type\":\"application/zip\",\"Content-Disposition\":\"attachment; + filename=schedule-27.zip\"},\"reconstructed\":false},\"success\":true,\"exception\":null}\r\n--===============7933551281109335274==--" + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - FILTERED + Connection: + - keep-alive + Content-Length: + - '1427' + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/1ffc91cd-97f6-4444-8c51-5754fbc8875f + content-type: + - !!binary | + bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT03OTMzNTUxMjgxMTA5 + MzM1Mjc0PT0i + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - application/jsonl + method: POST + uri: https://storage.googleapis.com/upload/storage/v1/b/calitp-staging-pytest/o?uploadType=multipart + response: + body: + string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/validation_job_results/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl/1764813768454012\",\n + \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/validation_job_results%2Fdt=2025-11-13%2Fts=2025-11-13T03:02:04.189504%2B00:00%2FaHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl\",\n + \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/validation_job_results%2Fdt=2025-11-13%2Fts=2025-11-13T03:02:04.189504%2B00:00%2FaHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl?generation=1764813768454012&alt=media\",\n + \ \"name\": \"validation_job_results/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl\",\n + \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764813768454012\",\n + \ \"metageneration\": \"1\",\n \"contentType\": \"application/jsonl\",\n + \ \"storageClass\": \"STANDARD\",\n \"size\": \"945\",\n \"md5Hash\": \"bYP5Lpih87xLmLCnKD103A==\",\n + \ \"crc32c\": \"35qeqA==\",\n \"etag\": \"CPzejc7ropEDEAE=\",\n \"timeCreated\": + \"2025-12-04T02:02:48.464Z\",\n \"updated\": \"2025-12-04T02:02:48.464Z\",\n + \ \"timeStorageClassUpdated\": \"2025-12-04T02:02:48.464Z\",\n \"timeFinalized\": + \"2025-12-04T02:02:48.464Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": + \"{\\\"filename\\\": \\\"results.jsonl\\\", \\\"ts\\\": \\\"2025-11-13T00:00:00+00:00\\\"}\"\n + \ }\n}\n" + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Length: + - '1485' + Content-Type: + - application/json; charset=UTF-8 + Date: + - Thu, 04 Dec 2025 02:02:48 GMT + ETag: + - CPzejc7ropEDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AOCedOG4939EDKhyLh7eew7qycX451rWTQzg5SQd1WjJD_JpMOIJXG95Bdpojjcvm84QuPd1pvwcAsnQmga2 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Authorization: + - FILTERED + Connection: + - keep-alive + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/f9ef3365-82fc-47bd-a675-4a4f02650eaa + accept-encoding: + - gzip + content-type: + - application/json; charset=UTF-8 + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - application/json; charset=UTF-8 + method: GET + uri: https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/schedule%2Fdt%3D2025-11-13%2Fts%3D2025-11-13T03%3A02%3A04.189504%2B00%3A00%2Fbase64_url%3DaHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc%3D%2Fschedule-27.zip?alt=media + response: + body: + string: !!binary | + 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 + LnR4dFBLBQYAAAAACQAJAAcCAADIBQAAAAA= + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Disposition: + - attachment + Content-Length: + - '2021' + Content-Type: + - application/octet-stream + Date: + - Thu, 04 Dec 2025 02:02:49 GMT + ETag: + - CImN3PSMoJEDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Last-Modified: + - Tue, 02 Dec 2025 23:53:48 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AOCedOFGvM9Two4aYSmo1M9I0DHwdP6jkiyBaIQXOKB1efARIQSgm31zH1b3ikalTEqV_zvtWgdQxA + X-Goog-Generation: + - '1764719628584585' + X-Goog-Hash: + - crc32c=F3bKVw==,md5=6mIsSfEakt9Z1A6l2fy9Eg== + X-Goog-Metageneration: + - '1' + X-Goog-Storage-Class: + - STANDARD + X-Goog-Stored-Content-Encoding: + - identity + X-Goog-Stored-Content-Length: + - '2021' + status: + code: 200 + message: OK +- request: + body: "--===============3437061753296095667==\r\ncontent-type: application/json; + charset=UTF-8\r\n\r\n{\"name\": \"validation_job_results/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl\", + \"metadata\": {\"PARTITIONED_ARTIFACT_METADATA\": \"{\\\"filename\\\": \\\"results.jsonl\\\", + \\\"ts\\\": \\\"2025-11-14T00:00:00+00:00\\\"}\"}}\r\n--===============3437061753296095667==\r\ncontent-type: + application/jsonl\r\n\r\n{\"validation\":{\"filename\":\"validation_notices_v5-0-0.jsonl.gz\",\"system_errors\":{\"notices\":[]},\"validator_version\":\"v5.0.0\",\"extract_config\":{\"auth_headers\":{},\"auth_query_params\":{},\"computed\":false,\"extracted_at\":\"2025-11-12T02:00:00+00:00\",\"feed_type\":\"schedule\",\"name\":\"Fric + and Frac Schedule\",\"schedule_url_for_validation\":null,\"url\":\"https://www.ips-systems.com/GTFS/Schedule/27\"},\"ts\":\"2025-11-14T00:00:00+00:00\"},\"extract\":{\"filename\":\"schedule-27.zip\",\"ts\":\"2025-11-13T03:02:04.189504+00:00\",\"config\":{\"auth_headers\":{},\"auth_query_params\":{},\"computed\":false,\"extracted_at\":\"2025-11-12T02:00:00+00:00\",\"feed_type\":\"schedule\",\"name\":\"Fric + and Frac Schedule\",\"schedule_url_for_validation\":null,\"url\":\"https://www.ips-systems.com/GTFS/Schedule/27\"},\"response_code\":200,\"response_headers\":{\"Content-Type\":\"application/zip\",\"Content-Disposition\":\"attachment; + filename=schedule-27.zip\"},\"reconstructed\":false},\"success\":true,\"exception\":null}\r\n--===============3437061753296095667==--" + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Authorization: + - FILTERED + Connection: + - keep-alive + Content-Length: + - '1427' + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/e2b06f2a-0376-4ec0-b743-edd1895dbf04 + content-type: + - !!binary | + bXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT0zNDM3MDYxNzUzMjk2 + MDk1NjY3PT0i + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - application/jsonl + method: POST + uri: https://storage.googleapis.com/upload/storage/v1/b/calitp-staging-pytest/o?uploadType=multipart + response: + body: + string: "{\n \"kind\": \"storage#object\",\n \"id\": \"calitp-staging-pytest/validation_job_results/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl/1764813771611722\",\n + \ \"selfLink\": \"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/validation_job_results%2Fdt=2025-11-13%2Fts=2025-11-13T03:02:04.189504%2B00:00%2FaHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl\",\n + \ \"mediaLink\": \"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/validation_job_results%2Fdt=2025-11-13%2Fts=2025-11-13T03:02:04.189504%2B00:00%2FaHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl?generation=1764813771611722&alt=media\",\n + \ \"name\": \"validation_job_results/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl\",\n + \ \"bucket\": \"calitp-staging-pytest\",\n \"generation\": \"1764813771611722\",\n + \ \"metageneration\": \"1\",\n \"contentType\": \"application/jsonl\",\n + \ \"storageClass\": \"STANDARD\",\n \"size\": \"945\",\n \"md5Hash\": \"26g06gkQOcYKcKNXF2hI2Q==\",\n + \ \"crc32c\": \"aDM82g==\",\n \"etag\": \"CMq8zs/ropEDEAE=\",\n \"timeCreated\": + \"2025-12-04T02:02:51.621Z\",\n \"updated\": \"2025-12-04T02:02:51.621Z\",\n + \ \"timeStorageClassUpdated\": \"2025-12-04T02:02:51.621Z\",\n \"timeFinalized\": + \"2025-12-04T02:02:51.621Z\",\n \"metadata\": {\n \"PARTITIONED_ARTIFACT_METADATA\": + \"{\\\"filename\\\": \\\"results.jsonl\\\", \\\"ts\\\": \\\"2025-11-14T00:00:00+00:00\\\"}\"\n + \ }\n}\n" + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Length: + - '1485' + Content-Type: + - application/json; charset=UTF-8 + Date: + - Thu, 04 Dec 2025 02:02:51 GMT + ETag: + - CMq8zs/ropEDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AOCedOG-68aVHuquRdlHwBvixqdehpteLu1ssjw0HhCWN5V5YRoeyfU-Tx6ubPn2tu0szQk + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip + Authorization: + - FILTERED + Connection: + - keep-alive + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/ce38e909-d240-4a9b-a879-d58fbb88f0b2 + x-goog-user-project: + - cal-itp-data-infra-staging + method: GET + uri: https://storage.googleapis.com/storage/v1/b/calitp-staging-pytest/o/validation_notices%2Fdt%3D2025-11-13%2Fts%3D2025-11-13T03%3A02%3A04.189504%2B00%3A00%2Fbase64_url%3DaHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc%3D%2Fvalidation_notices_v5-0-0.jsonl.gz?fields=name&prettyPrint=false + response: + body: + string: '{"error":{"code":404,"message":"No such object: calitp-staging-pytest/validation_notices/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/base64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=/validation_notices_v5-0-0.jsonl.gz","errors":[{"message":"No + such object: calitp-staging-pytest/validation_notices/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/base64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=/validation_notices_v5-0-0.jsonl.gz","domain":"global","reason":"notFound"}]}}' + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Length: + - '525' + Content-Type: + - application/json; charset=UTF-8 + Date: + - Thu, 04 Dec 2025 02:02:52 GMT + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AOCedOE4Sfu26WYFllJ6W-X1hzUO2vF4BhXzp3WQ9yNPJ73ZG_Ox6MX8rJf8QahXdsHuMtuQme1yI-oPHIa2 + status: + code: 404 + message: Not Found +- request: + body: null + headers: + Accept: + - application/json + Authorization: + - FILTERED + Connection: + - keep-alive + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/a77e1130-d567-4c9b-8a03-8fdc96287ac3 + accept-encoding: + - gzip + content-type: + - application/json; charset=UTF-8 + x-goog-user-project: + - cal-itp-data-infra-staging + x-upload-content-type: + - application/json; charset=UTF-8 + method: GET + uri: https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/validation_job_results%2Fdt%3D2025-11-13%2Fts%3D2025-11-13T03%3A02%3A04.189504%2B00%3A00%2FaHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc%3D.jsonl?alt=media + response: + body: + string: '{"validation":{"filename":"validation_notices_v5-0-0.jsonl.gz","system_errors":{"notices":[]},"validator_version":"v5.0.0","extract_config":{"auth_headers":{},"auth_query_params":{},"computed":false,"extracted_at":"2025-11-12T02:00:00+00:00","feed_type":"schedule","name":"Fric + and Frac Schedule","schedule_url_for_validation":null,"url":"https://www.ips-systems.com/GTFS/Schedule/27"},"ts":"2025-11-14T00:00:00+00:00"},"extract":{"filename":"schedule-27.zip","ts":"2025-11-13T03:02:04.189504+00:00","config":{"auth_headers":{},"auth_query_params":{},"computed":false,"extracted_at":"2025-11-12T02:00:00+00:00","feed_type":"schedule","name":"Fric + and Frac Schedule","schedule_url_for_validation":null,"url":"https://www.ips-systems.com/GTFS/Schedule/27"},"response_code":200,"response_headers":{"Content-Type":"application/zip","Content-Disposition":"attachment; + filename=schedule-27.zip"},"reconstructed":false},"success":true,"exception":null}' + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Content-Disposition: + - attachment + Content-Length: + - '945' + Content-Type: + - application/jsonl + Date: + - Thu, 04 Dec 2025 02:02:53 GMT + ETag: + - CMq8zs/ropEDEAE= + Expires: + - Mon, 01 Jan 1990 00:00:00 GMT + Last-Modified: + - Thu, 04 Dec 2025 02:02:51 GMT + Pragma: + - no-cache + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AOCedOEasnUL7QMi4OYXHXGoYUrchTuhSMIjjC1ikZF5k6cS_luMqBcbef8D5hh_8qq-fB4bQqg6OA + X-Goog-Generation: + - '1764813771611722' + X-Goog-Hash: + - crc32c=aDM82g==,md5=26g06gkQOcYKcKNXF2hI2Q== + X-Goog-Metageneration: + - '1' + X-Goog-Storage-Class: + - STANDARD + X-Goog-Stored-Content-Encoding: + - identity + X-Goog-Stored-Content-Length: + - '945' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip + Authorization: + - FILTERED + Connection: + - keep-alive + User-Agent: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + X-Goog-API-Client: + - gcloud-python/2.19.0 gl-python/3.11.13 grpc/1.75.1 gax/2.25.1 gccl/2.19.0 + gccl-invocation-id/21e0989f-74a2-46cf-b815-5360110d5656 + x-goog-user-project: + - cal-itp-data-infra-staging + method: GET + uri: https://storage.googleapis.com/storage/v1/b/calitp-staging-pytest/o/validation_job_results%2Fdt%3D2025-11-13%2Fts%3D2025-11-13T03%3A02%3A04.189504%2B00%3A00%2FaHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc%3D.jsonl?prettyPrint=false&projection=noAcl + response: + body: + string: '{"kind":"storage#object","id":"calitp-staging-pytest/validation_job_results/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl/1764813771611722","selfLink":"https://www.googleapis.com/storage/v1/b/calitp-staging-pytest/o/validation_job_results%2Fdt=2025-11-13%2Fts=2025-11-13T03:02:04.189504%2B00:00%2FaHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl","mediaLink":"https://storage.googleapis.com/download/storage/v1/b/calitp-staging-pytest/o/validation_job_results%2Fdt=2025-11-13%2Fts=2025-11-13T03:02:04.189504%2B00:00%2FaHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl?generation=1764813771611722&alt=media","name":"validation_job_results/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl","bucket":"calitp-staging-pytest","generation":"1764813771611722","metageneration":"1","contentType":"application/jsonl","storageClass":"STANDARD","size":"945","md5Hash":"26g06gkQOcYKcKNXF2hI2Q==","crc32c":"aDM82g==","etag":"CMq8zs/ropEDEAE=","timeCreated":"2025-12-04T02:02:51.621Z","updated":"2025-12-04T02:02:51.621Z","timeStorageClassUpdated":"2025-12-04T02:02:51.621Z","timeFinalized":"2025-12-04T02:02:51.621Z","metadata":{"PARTITIONED_ARTIFACT_METADATA":"{\"filename\": + \"results.jsonl\", \"ts\": \"2025-11-14T00:00:00+00:00\"}"}}' + headers: + Alt-Svc: + - h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + Cache-Control: + - private, max-age=0, must-revalidate, no-transform + Content-Length: + - '1398' + Content-Type: + - application/json; charset=UTF-8 + Date: + - Thu, 04 Dec 2025 02:02:53 GMT + ETag: + - CMq8zs/ropEDEAE= + Expires: + - Thu, 04 Dec 2025 02:02:53 GMT + Server: + - UploadServer + Vary: + - Origin + - X-Origin + X-GUploader-UploadID: + - AOCedOFUv4Er5AuhWBiXxnbxs4qUQkNg4QqkENvCL9lmnfErVuR45fXovsxqdoFf82mtnkoxRjHbNw + status: + code: 200 + message: OK +version: 1 diff --git a/airflow/tests/operators/test_gtfs_csv_to_jsonl_operator.py b/airflow/tests/operators/test_gtfs_csv_to_jsonl_operator.py index 348500e3b7..388dfbb95e 100644 --- a/airflow/tests/operators/test_gtfs_csv_to_jsonl_operator.py +++ b/airflow/tests/operators/test_gtfs_csv_to_jsonl_operator.py @@ -21,16 +21,16 @@ def gcs_hook(self) -> GCSHook: return GCSHook() @pytest.fixture - def source_path(self) -> str: - return "agency.txt/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/agency.txt" + def source_path_fragment(self) -> str: + return "dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==" @pytest.fixture - def destination_path(self) -> str: - return "agency/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/agency.jsonl.gz" + def destination_path_fragment(self) -> str: + return "dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==" @pytest.fixture - def results_path(self) -> str: - return "agency.txt_parsing_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/agency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl" + def results_path_fragment(self) -> str: + return "dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl" @pytest.fixture def unzip_results(self) -> dict: @@ -108,9 +108,9 @@ def test_dag(self, execution_date: datetime) -> DAG: def operator( self, test_dag: DAG, - source_path: str, - destination_path: str, - results_path: str, + source_path_fragment: str, + destination_path_fragment: str, + results_path_fragment: str, unzip_results: dict, ) -> GTFSCSVToJSONLOperator: return GTFSCSVToJSONLOperator( @@ -120,12 +120,12 @@ def operator( source_bucket=os.environ.get( "CALITP_BUCKET__GTFS_SCHEDULE_UNZIPPED_HOURLY" ), - source_path=source_path, + source_path_fragment=source_path_fragment, destination_bucket=os.environ.get( "CALITP_BUCKET__GTFS_SCHEDULE_PARSED_HOURLY" ), - destination_path=destination_path, - results_path=results_path, + destination_path_fragment=destination_path_fragment, + results_path_fragment=results_path_fragment, dag=test_dag, ) @@ -135,8 +135,8 @@ def test_execute( test_dag: DAG, operator: GTFSCSVToJSONLOperator, execution_date: datetime, - destination_path: str, - results_path: str, + destination_path_fragment: str, + results_path_fragment: str, gcs_hook: GCSHook, ): operator.run( @@ -148,26 +148,28 @@ def test_execute( task = test_dag.get_task("convert_agency_to_jsonl") task_instance = TaskInstance(task, execution_date=execution_date) xcom_value = task_instance.xcom_pull() - assert xcom_value["results_path"] == os.path.join( - os.environ.get("CALITP_BUCKET__GTFS_SCHEDULE_PARSED_HOURLY"), - "agency.txt_parsing_results", - "dt=2025-06-02", - "ts=2025-06-02T00:00:00+00:00", - "agency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl", - ) - assert xcom_value["destination_path"] == os.path.join( - os.environ.get("CALITP_BUCKET__GTFS_SCHEDULE_PARSED_HOURLY"), - "agency", - "dt=2025-06-02", - "ts=2025-06-02T00:00:00+00:00", - "base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==", - "agency.jsonl.gz", - ) + assert xcom_value[0] == { + "results_path": os.path.join( + "agency.txt_parsing_results", + "dt=2025-06-02", + "ts=2025-06-02T00:00:00+00:00", + "aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl", + ), + "destination_path": os.path.join( + "agency", + "dt=2025-06-02", + "ts=2025-06-02T00:00:00+00:00", + "base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==", + "agency.jsonl.gz", + ), + } compressed_result = gcs_hook.download( bucket_name=os.environ.get( "CALITP_BUCKET__GTFS_SCHEDULE_PARSED_HOURLY" ).replace("gs://", ""), - object_name=destination_path, + object_name=os.path.join( + "agency", destination_path_fragment, "agency.jsonl.gz" + ), ) decompressed_result = gzip.decompress(compressed_result) result = [json.loads(x) for x in decompressed_result.splitlines()] @@ -188,7 +190,9 @@ def test_execute( bucket_name=os.environ.get( "CALITP_BUCKET__GTFS_SCHEDULE_PARSED_HOURLY" ).replace("gs://", ""), - object_name=destination_path, + object_name=os.path.join( + "agency", destination_path_fragment, "agency.jsonl.gz" + ), ) assert json.loads(metadata["PARTITIONED_ARTIFACT_METADATA"]) == { "filename": "agency.jsonl.gz", @@ -212,7 +216,9 @@ def test_execute( bucket_name=os.environ.get( "CALITP_BUCKET__GTFS_SCHEDULE_PARSED_HOURLY" ).replace("gs://", ""), - object_name=results_path, + object_name=os.path.join( + "agency.txt_parsing_results", results_path_fragment + ), ) results = json.loads(unparsed_results) assert results == { @@ -267,7 +273,9 @@ def test_execute( bucket_name=os.environ.get( "CALITP_BUCKET__GTFS_SCHEDULE_PARSED_HOURLY" ).replace("gs://", ""), - object_name=results_path, + object_name=os.path.join( + "agency.txt_parsing_results", results_path_fragment + ), ) assert json.loads(metadata["PARTITIONED_ARTIFACT_METADATA"]) == { "filename": "results.jsonl", diff --git a/airflow/tests/operators/test_unzip_gtfs_to_gcs_operator.py b/airflow/tests/operators/test_unzip_gtfs_to_gcs_operator.py index 2a46255d8f..4a986dbc9c 100644 --- a/airflow/tests/operators/test_unzip_gtfs_to_gcs_operator.py +++ b/airflow/tests/operators/test_unzip_gtfs_to_gcs_operator.py @@ -30,12 +30,12 @@ def source_path(self) -> str: return "schedule/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/gtfs.zip" @pytest.fixture - def destination_path(self) -> str: - return "agency.txt/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==/agency.txt" + def destination_path_fragment(self) -> str: + return "dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==" @pytest.fixture def results_path(self) -> str: - return "unzipping_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/agency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl" + return "unzipping_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl" @pytest.fixture def download_schedule_feed_results(self) -> dict: @@ -93,22 +93,22 @@ def operator( test_dag: DAG, base64_url: str, source_path: str, - destination_path: str, + destination_path_fragment: str, results_path: str, download_schedule_feed_results: dict, ) -> UnzipGTFSToGCSOperator: return UnzipGTFSToGCSOperator( - task_id="unzip_agency_to_gcs", + task_id="unzip_gtfs_to_gcs", gcp_conn_id="google_cloud_default", base64_url=base64_url, download_schedule_feed_results=download_schedule_feed_results, - filename="agency.txt", + filenames=["agency.txt", "calendar.txt"], source_bucket=os.environ.get("CALITP_BUCKET__GTFS_SCHEDULE_RAW"), source_path=source_path, destination_bucket=os.environ.get( "CALITP_BUCKET__GTFS_SCHEDULE_UNZIPPED_HOURLY" ), - destination_path=destination_path, + destination_path_fragment=destination_path_fragment, results_path=results_path, dag=test_dag, ) @@ -119,7 +119,7 @@ def test_execute( test_dag: DAG, operator: UnzipGTFSToGCSOperator, execution_date: datetime, - destination_path: str, + destination_path_fragment: str, results_path: str, gcs_hook: GCSHook, ): @@ -129,26 +129,12 @@ def test_execute( ignore_first_depends_on_past=True, ) - task = test_dag.get_task("unzip_agency_to_gcs") + task = test_dag.get_task("unzip_gtfs_to_gcs") task_instance = TaskInstance(task, execution_date=execution_date) xcom_value = task_instance.xcom_pull() assert xcom_value == { "base64_url": "aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==", - "results_path": os.path.join( - os.environ.get("CALITP_BUCKET__GTFS_SCHEDULE_UNZIPPED_HOURLY"), - "unzipping_results", - "dt=2025-06-02", - "ts=2025-06-02T00:00:00+00:00", - "agency.txt_aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl", - ), - "destination_path": os.path.join( - os.environ.get("CALITP_BUCKET__GTFS_SCHEDULE_UNZIPPED_HOURLY"), - "agency.txt", - "dt=2025-06-02", - "ts=2025-06-02T00:00:00+00:00", - "base64_url=aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==", - "agency.txt", - ), + "results_path": "unzipping_results/dt=2025-06-02/ts=2025-06-02T00:00:00+00:00/aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl", "unzip_results": { "exception": None, "extract": { @@ -186,7 +172,22 @@ def test_execute( "filename": "agency.txt", "original_filename": "agency.txt", "ts": "2025-06-02T00:00:00+00:00", - } + }, + { + "extract_config": { + "auth_headers": {}, + "auth_query_params": {}, + "computed": False, + "extracted_at": "2025-06-01T00:00:00+00:00", + "feed_type": "schedule", + "name": "Santa Ynez Mecatran Schedule", + "schedule_url_for_validation": None, + "url": "http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0", + }, + "filename": "calendar.txt", + "original_filename": "calendar.txt", + "ts": "2025-06-02T00:00:00+00:00", + }, ], "success": True, "zipfile_dirs": [], @@ -212,7 +213,7 @@ def test_execute( bucket_name=os.environ.get( "CALITP_BUCKET__GTFS_SCHEDULE_UNZIPPED_HOURLY" ).replace("gs://", ""), - object_name=destination_path, + object_name=f"agency.txt/{destination_path_fragment}/agency.txt", ) reader = DictReader(StringIO(file_content.decode())) assert list(reader)[0] == { @@ -231,7 +232,7 @@ def test_execute( bucket_name=os.environ.get( "CALITP_BUCKET__GTFS_SCHEDULE_UNZIPPED_HOURLY" ).replace("gs://", ""), - object_name=destination_path, + object_name=f"agency.txt/{destination_path_fragment}/agency.txt", ) assert json.loads(metadata["PARTITIONED_ARTIFACT_METADATA"]) == { "filename": "agency.txt", @@ -249,6 +250,49 @@ def test_execute( "original_filename": "agency.txt", } + file_content = gcs_hook.download( + bucket_name=os.environ.get( + "CALITP_BUCKET__GTFS_SCHEDULE_UNZIPPED_HOURLY" + ).replace("gs://", ""), + object_name=f"calendar.txt/{destination_path_fragment}/calendar.txt", + ) + reader = DictReader(StringIO(file_content.decode())) + assert list(reader)[0] == { + "service_id": "11219341", + "service_name": "mon-sat_ends_50325", + "start_date": "20250401", + "end_date": "20250503", + "sunday": "0", + "monday": "1", + "tuesday": "1", + "wednesday": "1", + "thursday": "1", + "friday": "1", + "saturday": "1", + } + + metadata = gcs_hook.get_metadata( + bucket_name=os.environ.get( + "CALITP_BUCKET__GTFS_SCHEDULE_UNZIPPED_HOURLY" + ).replace("gs://", ""), + object_name=f"calendar.txt/{destination_path_fragment}/calendar.txt", + ) + assert json.loads(metadata["PARTITIONED_ARTIFACT_METADATA"]) == { + "filename": "calendar.txt", + "ts": "2025-06-03T00:00:00+00:00", + "extract_config": { + "extracted_at": "2025-06-01T00:00:00+00:00", + "name": "Santa Ynez Mecatran Schedule", + "url": "http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0", + "feed_type": "schedule", + "schedule_url_for_validation": None, + "auth_query_params": {}, + "auth_headers": {}, + "computed": False, + }, + "original_filename": "calendar.txt", + } + unparsed_results = gcs_hook.download( bucket_name=os.environ.get( "CALITP_BUCKET__GTFS_SCHEDULE_UNZIPPED_HOURLY" @@ -311,6 +355,456 @@ def test_execute( "computed": False, }, "original_filename": "agency.txt", + }, + { + "filename": "calendar.txt", + "ts": "2025-06-03T00:00:00+00:00", + "extract_config": { + "extracted_at": "2025-06-01T00:00:00+00:00", + "name": "Santa Ynez Mecatran Schedule", + "url": "http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0", + "feed_type": "schedule", + "schedule_url_for_validation": None, + "auth_query_params": {}, + "auth_headers": {}, + "computed": False, + }, + "original_filename": "calendar.txt", + }, + ], + } + + @pytest.fixture + def nonexistent_operator( + self, + test_dag: DAG, + base64_url: str, + source_path: str, + destination_path_fragment: str, + results_path: str, + download_schedule_feed_results: dict, + ) -> UnzipGTFSToGCSOperator: + return UnzipGTFSToGCSOperator( + task_id="nonexistent_unzip_gtfs_to_gcs", + gcp_conn_id="google_cloud_default", + base64_url=base64_url, + download_schedule_feed_results=download_schedule_feed_results, + filenames=["areas.txt"], + source_bucket=os.environ.get("CALITP_BUCKET__GTFS_SCHEDULE_RAW"), + source_path=source_path, + destination_bucket=os.environ.get( + "CALITP_BUCKET__GTFS_SCHEDULE_UNZIPPED_HOURLY" + ), + destination_path_fragment=destination_path_fragment, + results_path=results_path, + dag=test_dag, + ) + + @pytest.mark.vcr + def test_nonexistent_execute( + self, + test_dag: DAG, + nonexistent_operator: UnzipGTFSToGCSOperator, + execution_date: datetime, + destination_path_fragment: str, + results_path: str, + gcs_hook: GCSHook, + ): + nonexistent_operator.run( + start_date=execution_date, + end_date=execution_date + timedelta(days=1), + ignore_first_depends_on_past=True, + ) + + task = test_dag.get_task("nonexistent_unzip_gtfs_to_gcs") + task_instance = TaskInstance(task, execution_date=execution_date) + xcom_value = task_instance.xcom_pull() + assert xcom_value == { + "base64_url": "aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==", + "results_path": os.path.join( + "unzipping_results", + "dt=2025-06-02", + "ts=2025-06-02T00:00:00+00:00", + "aHR0cDovL2FwcC5tZWNhdHJhbi5jb20vdXJiL3dzL2ZlZWQvYzJsMFpUMXplWFowTzJOc2FXVnVkRDF6Wld4bU8yVjRjR2x5WlQwN2RIbHdaVDFuZEdaek8ydGxlVDAwTWpjd056UTBaVFk0TlRBek9UTXlNREl4TURkak56STBNRFJrTXpZeU5UTTRNekkwWXpJMA==.jsonl", + ), + "unzip_results": { + "exception": None, + "extract": { + "config": { + "auth_headers": {}, + "auth_query_params": {}, + "computed": False, + "extracted_at": "2025-06-01T00:00:00+00:00", + "feed_type": "schedule", + "name": "Santa Ynez Mecatran Schedule", + "schedule_url_for_validation": None, + "url": "http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0", + }, + "filename": "gtfs.zip", + "reconstructed": False, + "response_code": 200, + "response_headers": { + "Content-Disposition": "attachment; filename=gtfs.zip", + "Content-Type": "application/zip", + }, + "ts": "2025-06-03T00:00:00+00:00", + }, + "extracted_files": [], + "success": True, + "zipfile_dirs": [], + "zipfile_extract_md5hash": "4f72c84bd3f053ddb929289fa2de7879", + "zipfile_files": [ + "agency.txt", + "calendar.txt", + "calendar_dates.txt", + "fare_attributes.txt", + "feed_info.txt", + "route_directions.txt", + "routes.txt", + "shapes.txt", + "stop_times.txt", + "stops.txt", + "transfers.txt", + "trips.txt", + ], + }, + } + + file_content = gcs_hook.exists( + bucket_name=os.environ.get( + "CALITP_BUCKET__GTFS_SCHEDULE_UNZIPPED_HOURLY" + ).replace("gs://", ""), + object_name=f"areas.txt/{destination_path_fragment}/areas.txt", + ) + assert not file_content + + unparsed_results = gcs_hook.download( + bucket_name=os.environ.get( + "CALITP_BUCKET__GTFS_SCHEDULE_UNZIPPED_HOURLY" + ).replace("gs://", ""), + object_name=results_path, + ) + results = json.loads(unparsed_results) + assert results == { + "success": True, + "exception": None, + "extract": { + "filename": "gtfs.zip", + "ts": "2025-06-03T00:00:00+00:00", + "config": { + "extracted_at": "2025-06-01T00:00:00+00:00", + "name": "Santa Ynez Mecatran Schedule", + "url": "http://app.mecatran.com/urb/ws/feed/c2l0ZT1zeXZ0O2NsaWVudD1zZWxmO2V4cGlyZT07dHlwZT1ndGZzO2tleT00MjcwNzQ0ZTY4NTAzOTMyMDIxMDdjNzI0MDRkMzYyNTM4MzI0YzI0", + "feed_type": "schedule", + "schedule_url_for_validation": None, + "auth_query_params": {}, + "auth_headers": {}, + "computed": False, + }, + "response_code": 200, + "response_headers": results["extract"]["response_headers"] + | { + "Content-Type": "application/zip", + "Content-Disposition": "attachment; filename=gtfs.zip", + }, + "reconstructed": False, + }, + "zipfile_extract_md5hash": "4f72c84bd3f053ddb929289fa2de7879", + "zipfile_files": [ + "agency.txt", + "calendar.txt", + "calendar_dates.txt", + "fare_attributes.txt", + "feed_info.txt", + "route_directions.txt", + "routes.txt", + "shapes.txt", + "stop_times.txt", + "stops.txt", + "transfers.txt", + "trips.txt", + ], + "zipfile_dirs": [], + "extracted_files": [], + } + + @pytest.fixture + def empty_execution_date(self) -> datetime: + return datetime.fromisoformat("2025-11-13").replace(tzinfo=timezone.utc) + + @pytest.fixture + def empty_base64_url(self) -> str: + return "aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=" + + @pytest.fixture + def empty_source_path(self) -> str: + return "schedule/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/base64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=/schedule-27.zip" + + @pytest.fixture + def empty_destination_path_fragment(self) -> str: + return "dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/base64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=" + + @pytest.fixture + def empty_results_path(self) -> str: + return "unzipping_results/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl" + + @pytest.fixture + def empty_download_schedule_feed_results(self) -> dict: + return { + "backfilled": False, + "config": { + "auth_headers": {}, + "auth_query_params": {}, + "computed": False, + "extracted_at": "2025-11-25T00:00:00+00:00", + "feed_type": "schedule", + "name": "Fric and Frac Schedule", + "schedule_url_for_validation": None, + "url": "https://www.ips-systems.com/GTFS/Schedule/27", + }, + "exception": None, + "extract": { + "filename": "gtfs.zip", + "ts": "2025-11-14T00:00:00+00:00", + "config": { + "auth_headers": {}, + "auth_query_params": {}, + "computed": False, + "extracted_at": "2025-11-25T00:00:00+00:00", + "feed_type": "schedule", + "name": "Fric and Frac Schedule", + "schedule_url_for_validation": None, + "url": "https://www.ips-systems.com/GTFS/Schedule/27", + }, + "response_code": 200, + "response_headers": { + "Content-Type": "application/zip", + "Content-Disposition": "attachment; filename=schedule-27.zip", + }, + "reconstructed": False, + }, + "success": True, + } + + @pytest.fixture + def empty_test_dag(self, empty_execution_date: datetime) -> DAG: + return DAG( + "test_dag", + default_args={ + "owner": "airflow", + "start_date": empty_execution_date, + "end_date": empty_execution_date + timedelta(days=1), + }, + schedule=timedelta(days=1), + ) + + @pytest.fixture + def empty_operator( + self, + empty_test_dag: DAG, + empty_base64_url: str, + empty_source_path: str, + empty_destination_path_fragment: str, + empty_results_path: str, + empty_download_schedule_feed_results: dict, + ) -> UnzipGTFSToGCSOperator: + return UnzipGTFSToGCSOperator( + task_id="empty_unzip_gtfs_to_gcs", + gcp_conn_id="google_cloud_default", + base64_url=empty_base64_url, + download_schedule_feed_results=empty_download_schedule_feed_results, + filenames=["calendar_dates.txt"], + source_bucket=os.environ.get("CALITP_BUCKET__GTFS_SCHEDULE_RAW"), + source_path=empty_source_path, + destination_bucket=os.environ.get( + "CALITP_BUCKET__GTFS_SCHEDULE_UNZIPPED_HOURLY" + ), + destination_path_fragment=empty_destination_path_fragment, + results_path=empty_results_path, + dag=empty_test_dag, + ) + + @pytest.mark.vcr + def test_empty_execute( + self, + empty_test_dag: DAG, + empty_operator: UnzipGTFSToGCSOperator, + empty_execution_date: datetime, + empty_destination_path_fragment: str, + empty_results_path: str, + gcs_hook: GCSHook, + ): + empty_operator.run( + start_date=empty_execution_date, + end_date=empty_execution_date + timedelta(days=1), + ignore_first_depends_on_past=True, + ) + + task = empty_test_dag.get_task("empty_unzip_gtfs_to_gcs") + task_instance = TaskInstance(task, execution_date=empty_execution_date) + xcom_value = task_instance.xcom_pull() + assert xcom_value == { + "base64_url": "aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=", + "results_path": os.path.join( + "unzipping_results", + "dt=2025-11-13", + "ts=2025-11-13T03:02:04.189504+00:00", + "aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl", + ), + "unzip_results": { + "exception": None, + "extract": { + "config": { + "auth_headers": {}, + "auth_query_params": {}, + "computed": False, + "extracted_at": "2025-11-25T00:00:00+00:00", + "feed_type": "schedule", + "name": "Fric and Frac Schedule", + "schedule_url_for_validation": None, + "url": "https://www.ips-systems.com/GTFS/Schedule/27", + }, + "filename": "gtfs.zip", + "reconstructed": False, + "response_code": 200, + "response_headers": { + "Content-Disposition": "attachment; filename=schedule-27.zip", + "Content-Type": "application/zip", + }, + "ts": "2025-11-14T00:00:00+00:00", + }, + "extracted_files": [ + { + "extract_config": { + "auth_headers": {}, + "auth_query_params": {}, + "computed": False, + "extracted_at": "2025-11-25T00:00:00+00:00", + "feed_type": "schedule", + "name": "Fric and Frac Schedule", + "schedule_url_for_validation": None, + "url": "https://www.ips-systems.com/GTFS/Schedule/27", + }, + "filename": "calendar_dates.txt", + "original_filename": "calendar_dates.txt", + "ts": "2025-11-13T00:00:00+00:00", + } + ], + "success": True, + "zipfile_dirs": [], + "zipfile_extract_md5hash": "833f5a292eed717823acf709b2548a2b", + "zipfile_files": [ + "agency.txt", + "calendar.txt", + "calendar_dates.txt", + "feed_info.txt", + "routes.txt", + "shapes.txt", + "stop_times.txt", + "stops.txt", + "trips.txt", + ], + }, + } + + file_content = gcs_hook.download( + bucket_name=os.environ.get( + "CALITP_BUCKET__GTFS_SCHEDULE_UNZIPPED_HOURLY" + ).replace("gs://", ""), + object_name=os.path.join( + "calendar_dates.txt", + empty_destination_path_fragment, + "calendar_dates.txt", + ), + ) + reader = DictReader(StringIO(file_content.decode())) + assert list(reader) == [] + + metadata = gcs_hook.get_metadata( + bucket_name=os.environ.get( + "CALITP_BUCKET__GTFS_SCHEDULE_UNZIPPED_HOURLY" + ).replace("gs://", ""), + object_name=os.path.join( + "calendar_dates.txt", + empty_destination_path_fragment, + "calendar_dates.txt", + ), + ) + assert json.loads(metadata["PARTITIONED_ARTIFACT_METADATA"]) == { + "filename": "calendar_dates.txt", + "ts": "2025-11-14T00:00:00+00:00", + "extract_config": { + "auth_headers": {}, + "auth_query_params": {}, + "computed": False, + "extracted_at": "2025-11-25T00:00:00+00:00", + "feed_type": "schedule", + "name": "Fric and Frac Schedule", + "schedule_url_for_validation": None, + "url": "https://www.ips-systems.com/GTFS/Schedule/27", + }, + "original_filename": "calendar_dates.txt", + } + + unparsed_results = gcs_hook.download( + bucket_name=os.environ.get( + "CALITP_BUCKET__GTFS_SCHEDULE_UNZIPPED_HOURLY" + ).replace("gs://", ""), + object_name=empty_results_path, + ) + results = json.loads(unparsed_results) + assert results == { + "success": True, + "exception": None, + "extract": { + "filename": "gtfs.zip", + "ts": "2025-11-14T00:00:00+00:00", + "config": { + "auth_headers": {}, + "auth_query_params": {}, + "computed": False, + "extracted_at": "2025-11-25T00:00:00+00:00", + "feed_type": "schedule", + "name": "Fric and Frac Schedule", + "schedule_url_for_validation": None, + "url": "https://www.ips-systems.com/GTFS/Schedule/27", + }, + "response_code": 200, + "response_headers": results["extract"]["response_headers"] + | { + "Content-Type": "application/zip", + "Content-Disposition": "attachment; filename=schedule-27.zip", + }, + "reconstructed": False, + }, + "zipfile_extract_md5hash": "833f5a292eed717823acf709b2548a2b", + "zipfile_files": [ + "agency.txt", + "calendar.txt", + "calendar_dates.txt", + "feed_info.txt", + "routes.txt", + "shapes.txt", + "stop_times.txt", + "stops.txt", + "trips.txt", + ], + "zipfile_dirs": [], + "extracted_files": [ + { + "extract_config": { + "auth_headers": {}, + "auth_query_params": {}, + "computed": False, + "extracted_at": "2025-11-25T00:00:00+00:00", + "feed_type": "schedule", + "name": "Fric and Frac Schedule", + "schedule_url_for_validation": None, + "url": "https://www.ips-systems.com/GTFS/Schedule/27", + }, + "filename": "calendar_dates.txt", + "original_filename": "calendar_dates.txt", + "ts": "2025-11-14T00:00:00+00:00", } ], } diff --git a/airflow/tests/operators/test_validate_gtfs_to_gcs_operator.py b/airflow/tests/operators/test_validate_gtfs_to_gcs_operator.py index bc876ea6a0..16c829740e 100644 --- a/airflow/tests/operators/test_validate_gtfs_to_gcs_operator.py +++ b/airflow/tests/operators/test_validate_gtfs_to_gcs_operator.py @@ -250,3 +250,201 @@ def test_execute( "filename": "results.jsonl", "ts": "2025-06-03T00:00:00+00:00", } + + +class TestValidateGTFSToGCSOperatorCalendarDatesEmpty: + @pytest.fixture + def execution_date(self) -> datetime: + return datetime.fromisoformat("2025-11-13").replace(tzinfo=timezone.utc) + + @pytest.fixture + def gcs_hook(self) -> GCSHook: + return GCSHook() + + @pytest.fixture + def source_path(self) -> str: + return "schedule/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/base64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=/schedule-27.zip" + + @pytest.fixture + def destination_path(self) -> str: + return "validation_notices/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/base64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=" + + @pytest.fixture + def results_path(self) -> str: + return "validation_job_results/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl" + + @pytest.fixture + def download_schedule_feed_results(self) -> dict: + return { + "backfilled": False, + "config": { + "auth_headers": {}, + "auth_query_params": {}, + "computed": False, + "extracted_at": "2025-11-12T02:00:00+00:00", + "feed_type": "schedule", + "name": "Fric and Frac Schedule", + "schedule_url_for_validation": None, + "url": "https://www.ips-systems.com/GTFS/Schedule/27", + }, + "exception": None, + "extract": { + "filename": "schedule-27.zip", + "ts": "2025-11-13T03:02:04.189504+00:00", + "config": { + "auth_headers": {}, + "auth_query_params": {}, + "computed": False, + "extracted_at": "2025-11-12T02:00:00+00:00", + "feed_type": "schedule", + "name": "Fric and Frac Schedule", + "schedule_url_for_validation": None, + "url": "https://www.ips-systems.com/GTFS/Schedule/27", + }, + "response_code": 200, + "response_headers": { + "Content-Type": "application/zip", + "Content-Disposition": "attachment; filename=schedule-27.zip", + }, + "reconstructed": False, + }, + "success": True, + } + + @pytest.fixture + def test_dag(self, execution_date: datetime) -> DAG: + return DAG( + "test_dag", + default_args={ + "owner": "airflow", + "start_date": execution_date, + "end_date": execution_date + timedelta(days=1), + }, + schedule=timedelta(days=1), + ) + + @pytest.fixture + def operator( + self, + test_dag: DAG, + source_path: str, + destination_path: str, + results_path: str, + download_schedule_feed_results: dict, + ) -> ValidateGTFSToGCSOperator: + return ValidateGTFSToGCSOperator( + task_id="validate_gtfs_to_gcs", + gcp_conn_id="google_cloud_default", + source_bucket=os.environ.get("CALITP_BUCKET__GTFS_SCHEDULE_RAW"), + source_path=source_path, + destination_bucket=os.environ.get( + "CALITP_BUCKET__GTFS_SCHEDULE_VALIDATION_HOURLY" + ), + destination_path=destination_path, + results_path=results_path, + download_schedule_feed_results=download_schedule_feed_results, + dag=test_dag, + ) + + @pytest.mark.vcr + def test_execute( + self, + test_dag: DAG, + operator: ValidateGTFSToGCSOperator, + execution_date: datetime, + source_path: str, + gcs_hook: GCSHook, + ): + operator.run( + start_date=execution_date, + end_date=execution_date + timedelta(days=1), + ignore_first_depends_on_past=True, + ) + + task = test_dag.get_task("validate_gtfs_to_gcs") + task_instance = TaskInstance(task, execution_date=execution_date) + xcom_value = task_instance.xcom_pull() + assert xcom_value == { + "destination_path": os.path.join( + os.environ.get("CALITP_BUCKET__GTFS_SCHEDULE_VALIDATION_HOURLY"), + "validation_notices", + "dt=2025-11-13", + "ts=2025-11-13T03:02:04.189504+00:00", + "base64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=", + "validation_notices_v5-0-0.jsonl.gz", + ), + "results_path": os.path.join( + os.environ.get("CALITP_BUCKET__GTFS_SCHEDULE_VALIDATION_HOURLY"), + "validation_job_results", + "dt=2025-11-13", + "ts=2025-11-13T03:02:04.189504+00:00", + "aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl", + ), + } + + compressed_notices = gcs_hook.exists( + bucket_name=os.environ.get( + "CALITP_BUCKET__GTFS_SCHEDULE_VALIDATION_HOURLY" + ).replace("gs://", ""), + object_name="validation_notices/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/base64_url=aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=/validation_notices_v5-0-0.jsonl.gz", + ) + assert not compressed_notices + + unparsed_results = gcs_hook.download( + bucket_name=os.environ.get( + "CALITP_BUCKET__GTFS_SCHEDULE_VALIDATION_HOURLY" + ).replace("gs://", ""), + object_name="validation_job_results/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl", + ) + results = json.loads(unparsed_results) + assert results == { + "validation": { + "filename": "validation_notices_v5-0-0.jsonl.gz", + "system_errors": {"notices": []}, + "validator_version": "v5.0.0", + "extract_config": { + "auth_headers": {}, + "auth_query_params": {}, + "computed": False, + "extracted_at": "2025-11-12T02:00:00+00:00", + "feed_type": "schedule", + "name": "Fric and Frac Schedule", + "schedule_url_for_validation": None, + "url": "https://www.ips-systems.com/GTFS/Schedule/27", + }, + "ts": "2025-11-14T00:00:00+00:00", + }, + "extract": { + "filename": "schedule-27.zip", + "ts": "2025-11-13T03:02:04.189504+00:00", + "config": { + "auth_headers": {}, + "auth_query_params": {}, + "computed": False, + "extracted_at": "2025-11-12T02:00:00+00:00", + "feed_type": "schedule", + "name": "Fric and Frac Schedule", + "schedule_url_for_validation": None, + "url": "https://www.ips-systems.com/GTFS/Schedule/27", + }, + "response_code": 200, + "response_headers": { + "Content-Type": "application/zip", + "Content-Disposition": "attachment; filename=schedule-27.zip", + }, + "reconstructed": False, + }, + "success": True, + "exception": None, + } + + metadata = gcs_hook.get_metadata( + bucket_name=os.environ.get( + "CALITP_BUCKET__GTFS_SCHEDULE_VALIDATION_HOURLY" + ).replace("gs://", ""), + object_name="validation_job_results/dt=2025-11-13/ts=2025-11-13T03:02:04.189504+00:00/aHR0cHM6Ly93d3cuaXBzLXN5c3RlbXMuY29tL0dURlMvU2NoZWR1bGUvMjc=.jsonl", + ) + assert json.loads(metadata["PARTITIONED_ARTIFACT_METADATA"]) == { + "filename": "results.jsonl", + "ts": "2025-11-14T00:00:00+00:00", + }