44from pygeometa .schemas .iso19139 import ISO19139OutputSchema
55
66from .libs .helpers import get_anytext
7- from .settings import DMS_DATASETS_BASE , log
7+ from .settings import (
8+ DMS_ACCESS_KEY ,
9+ DMS_AWS_ENDPOINT ,
10+ DMS_BUCKET ,
11+ DMS_CSW_PREFIX ,
12+ DMS_DATASETS_BASE ,
13+ DMS_GEOAPI_PREFIX ,
14+ DMS_SECRET_KEY ,
15+ log ,
16+ )
817
918app = typer .Typer ()
1019
@@ -28,12 +37,31 @@ def to_iso19139(metadata: dict) -> str:
2837
2938
3039@app .command ()
31- def generate_csw_metadata (base_url : str = DMS_DATASETS_BASE , lang = "en" ):
40+ def generate_csw_metadata (
41+ base_url : str = DMS_DATASETS_BASE ,
42+ access_key = DMS_ACCESS_KEY ,
43+ secret_key = DMS_SECRET_KEY ,
44+ endpoint = DMS_AWS_ENDPOINT ,
45+ bucket = DMS_BUCKET ,
46+ prefix = DMS_CSW_PREFIX ,
47+ lang = "en" ,
48+ ):
3249 # TODO: localize the output based on the language in input
3350
3451 conn = duckdb .connect ()
3552 conn .sql ("INSTALL yaml FROM community; LOAD yaml; Install spatial; load spatial" )
3653
54+ conn .execute (f"""
55+ CREATE OR REPLACE SECRET secret (
56+ TYPE s3,
57+ REGION 'eu-west-1',
58+ KEY_ID '{ access_key } ',
59+ SECRET '{ secret_key } ',
60+ ENDPOINT '{ endpoint .replace (r"https://" , "" )} ',
61+ URL_STYLE 'path'
62+ );
63+ """ ).fetchall ()
64+
3765 conn .create_function ("to_iso19139" , to_iso19139 )
3866 conn .create_function ("xml_bag" , get_anytext )
3967
@@ -355,17 +383,40 @@ def generate_csw_metadata(base_url: str = DMS_DATASETS_BASE, lang="en"):
355383
356384 log .debug (csw )
357385
358- csw .write_parquet ("dms-metadata.parquet" )
386+ csw .write_parquet (
387+ f"s3://{ bucket } { prefix } " ,
388+ compression = "zstd" ,
389+ overwrite = True ,
390+ )
359391
360392
361393@app .command ()
362- def generate_geoapi_config (base_url : str = DMS_DATASETS_BASE , lang = "en" ):
394+ def generate_geoapi_config (
395+ base_url : str = DMS_DATASETS_BASE ,
396+ access_key = DMS_ACCESS_KEY ,
397+ secret_key = DMS_SECRET_KEY ,
398+ endpoint = DMS_AWS_ENDPOINT ,
399+ bucket = DMS_BUCKET ,
400+ prefix = DMS_GEOAPI_PREFIX ,
401+ lang = "en" ,
402+ ):
363403 # TODO: localize the output based on the language in input
364404
365405 conn = duckdb .connect ()
366406 conn .sql ("Install spatial; load spatial" )
367407 conn .create_function ("guess_type" , guess_type )
368408
409+ conn .execute (f"""
410+ CREATE OR REPLACE SECRET secret (
411+ TYPE s3,
412+ REGION 'eu-west-1',
413+ KEY_ID '{ access_key } ',
414+ SECRET '{ secret_key } ',
415+ ENDPOINT '{ endpoint .replace (r"https://" , "" )} ',
416+ URL_STYLE 'path'
417+ );
418+ """ ).fetchall ()
419+
369420 datasets = conn .read_parquet (base_url + "datasets_dataset.parquet" ).filter (
370421 "json_keys(metadata) <> []"
371422 )
@@ -450,8 +501,9 @@ def generate_geoapi_config(base_url: str = DMS_DATASETS_BASE, lang="en"):
450501 """ )
451502
452503 log .debug (geo_raster )
453- conn .sql ("copy geo_raster to 'dms-raster.json' (FORMAT json, ARRAY true)" )
454-
504+ conn .sql (f"""
505+ COPY geo_raster to 's3://{ bucket } { prefix } /dms-raster.json' (FORMAT json, ARRAY true)
506+ """ ) # noqa: E501
455507 descriptions = (
456508 (
457509 vectors .set_alias ("r" )
@@ -519,7 +571,9 @@ def generate_geoapi_config(base_url: str = DMS_DATASETS_BASE, lang="en"):
519571 """ )
520572 log .debug (geo_vector )
521573
522- conn .sql ("copy geo_vector to 'dms-vector.json' (FORMAT json, ARRAY true)" )
574+ conn .sql (f"""
575+ COPY geo_vector to 's3://{ bucket } { prefix } /dms-vector.json' (FORMAT json, ARRAY true)
576+ """ ) # noqa: E501
523577
524578
525579if __name__ == "__main__" :
0 commit comments