Skip to content

Commit 3baf8e5

Browse files
authored
Merge pull request #17 from nasa/add-harmony-filename-generator
Added use of harmony filename generator for CASPER created files
2 parents 6c068f3 + 8e3e9c7 commit 3baf8e5

6 files changed

Lines changed: 18 additions & 15 deletions

casper/convert_to_csv.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
import sys
44
import zipfile
55
from logging import Logger
6+
from pathlib import Path
67

78
import xarray as xr
9+
from harmony_service_lib.util import generate_output_filename
810

911
from casper.file_ops import (
1012
valid_input_file,
@@ -120,7 +122,7 @@ def convert_to_csv(fname: str, zip_file: str, logger: Logger = default_logger) -
120122
schemas[dims] = []
121123
schemas[dims].append(varname)
122124

123-
input_filename = fname.split("/")[-1]
125+
input_filename = Path(fname).name
124126
vals = list(schemas.items())
125127

126128
# Create the zip file object in write mode
@@ -131,7 +133,9 @@ def convert_to_csv(fname: str, zip_file: str, logger: Logger = default_logger) -
131133

132134
for idx in range(len(vals)):
133135
dims, vvs = vals[idx]
136+
# Use Harmony generated filename
134137
op_file = f"{input_filename}-{idx}.csv"
138+
op_file = generate_output_filename(op_file, ext="csv", is_reformatted=True)
135139
with zf.open(op_file, "w", force_zip64=True) as csv_file:
136140
ds = xr.combine_by_coords([data[vv].rename(vv) for vv in vvs])
137141
# Order columns: dimensions, non-dimensional coordinates, rest of variables

casper/harmony/service_adapter.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
from uuid import uuid4
3333

3434
from harmony_service_lib.adapter import BaseHarmonyAdapter
35-
from harmony_service_lib.util import stage
35+
from harmony_service_lib.util import generate_output_filename, stage
3636
from pystac import Catalog, Item
3737
from pystac.item import Asset
3838

@@ -98,7 +98,6 @@ def process_file(self, catalog: Catalog) -> list[Catalog]:
9898
netcdf_url = _get_item_url(items[0])
9999
if netcdf_url is None:
100100
raise ValueError("No URL found for item")
101-
filename = Path(netcdf_url).stem
102101

103102
with TemporaryDirectory() as temp_dir:
104103
# Download file
@@ -107,24 +106,25 @@ def process_file(self, catalog: Catalog) -> list[Catalog]:
107106
)
108107

109108
# Zip filename is the input filename without the file extension
110-
zip_file_name = input_file.split("/")[-1].split(".")[0]
109+
zip_file_name = Path(input_file).stem
111110

112111
# Create the subdirectory
113112
self.logger.info("Running Casper.")
114113

114+
# Use Harmony generated filename
115+
zip_file = generate_output_filename(zip_file_name, ext="zip", is_reformatted=True)
116+
zip_file = Path(temp_dir) / zip_file
117+
115118
# --- Run Casper ---
116-
zip_file = f"{temp_dir}/{zip_file_name}.zip"
117119
convert_to_csv(
118120
input_file,
119121
zip_file,
120122
logger=self.logger,
121123
)
122124

123-
self.logger.info(
124-
f"Casper conversion completed. Zip file created {zip_file_name}.zip"
125-
)
126-
staged_url = self._stage(zip_file, f"{zip_file_name}.zip", "application/zip")
125+
self.logger.info(f"Casper conversion completed. Zip file created {zip_file}")
127126

127+
staged_url = self._stage(zip_file, zip_file.name, "application/zip")
128128
# -- Output to STAC catalog --
129129
result.clear_items()
130130
properties = {
@@ -138,11 +138,10 @@ def process_file(self, catalog: Catalog) -> list[Catalog]:
138138
None,
139139
properties,
140140
)
141-
filename = f"{zip_file_name}.zip"
142141

143142
asset = Asset(
144143
staged_url,
145-
title=filename,
144+
title=zip_file.name,
146145
media_type="application/zip",
147146
roles=["data"],
148147
)

tests/data/unit-test-data/Readme.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
{
22
"Notice": "The Readme.md file includes the same information",
3-
"TEMPO_HCHO_L3_V04_20250912T210435Z_S012_subsetted.nc4-0.csv": {
3+
"TEMPO_HCHO_L3_V04_20250912T210435Z_S012_subsetted.nc4-0_reformatted.csv": {
44
"dimensions": "latitude,longitude",
55
"non-dimensional coordinates": "",
66
"variables": [
77
"/weight"
88
]
99
},
10-
"TEMPO_HCHO_L3_V04_20250912T210435Z_S012_subsetted.nc4-1.csv": {
10+
"TEMPO_HCHO_L3_V04_20250912T210435Z_S012_subsetted.nc4-1_reformatted.csv": {
1111
"dimensions": "time,latitude,longitude",
1212
"non-dimensional coordinates": "",
1313
"variables": [

tests/data/unit-test-data/Readme.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
# 2 CSV files created for TEMPO_HCHO_L3_V04_20250912T210435Z_S012_subsetted.nc4 based on dimensional schemas
22

33

4-
## TEMPO_HCHO_L3_V04_20250912T210435Z_S012_subsetted.nc4-0.csv
4+
## TEMPO_HCHO_L3_V04_20250912T210435Z_S012_subsetted.nc4-0_reformatted.csv
55
dimensions: latitude, longitude
66
non-dimension coordinates:
77
1 variables:
88
/weight
99

10-
## TEMPO_HCHO_L3_V04_20250912T210435Z_S012_subsetted.nc4-1.csv
10+
## TEMPO_HCHO_L3_V04_20250912T210435Z_S012_subsetted.nc4-1_reformatted.csv
1111
dimensions: time, latitude, longitude
1212
non-dimension coordinates:
1313
20 variables:

tests/data/unit-test-data/TEMPO_HCHO_L3_V04_20250912T210435Z_S012_subsetted.nc4-0.csv renamed to tests/data/unit-test-data/TEMPO_HCHO_L3_V04_20250912T210435Z_S012_subsetted.nc4-0_reformatted.csv

File renamed without changes.

tests/data/unit-test-data/TEMPO_HCHO_L3_V04_20250912T210435Z_S012_subsetted.nc4-1.csv renamed to tests/data/unit-test-data/TEMPO_HCHO_L3_V04_20250912T210435Z_S012_subsetted.nc4-1_reformatted.csv

File renamed without changes.

0 commit comments

Comments
 (0)