diff --git a/geomagio/processing/copy_observatory.py b/geomagio/processing/copy_observatory.py new file mode 100644 index 0000000000000000000000000000000000000000..c93e2827529d34c87f89b16fadcb16cc3a6554a9 --- /dev/null +++ b/geomagio/processing/copy_observatory.py @@ -0,0 +1,135 @@ +# -*- coding: utf-8 -*- +""" +Created on Thu Jul 7 11:05:19 2022 + +@author: awernle +""" +import os +from typing import List + +import typer + +from geomagio.api.ws.Observatory import OBSERVATORIES +from ..metadata import Metadata, MetadataFactory, MetadataCategory + + +def copy_observatory( + observatory: str = typer.Option(..., help="Observatory code"), + metadata_token: str = typer.Option( + default=os.getenv("GITLAB_API_TOKEN"), + help="Token for metadata web service.", + metavar="TOKEN", + show_default="environment variable GITLAB_API_TOKEN", + ), + metadata_url: str = typer.Option( + default="https://staging-geomag.cr.usgs.gov/ws/secure/metadata", + help="URL to metadata web service", + metavar="URL", + ), +): + """Copy observatory metadata into the metadata webservice.""" + + observatories = get_observatory_metadata( + observatory=observatory, + ) + + # confirm whether or not to copy observatory metadata + typer.confirm(f"Are you sure you want to copy observatory metadata?", abort=True) + print("Copying over observatory metadata") + + # write observatory metadata to metadata service + metadata_factory = MetadataFactory(token=metadata_token, url=metadata_url) + with typer.progressbar( + iterable=observatories, label="Uploading to metadata service" + ) as progressbar: + for observatory in progressbar: + upload_observatory_metdata( + factory=metadata_factory, observatory=observatory + ) + + +def create_observatory_metadata(observatory) -> Metadata: + """Create observatory metadata object. + + Parameters + ---------- + observatory: + observatory to convert to metadata. + + Returns + ------- + metadata object for observatory + """ + # define network based on observatory + network = "NT" + if observatory.agency == "USGS": + network = "NT" + # rest alphabetical by agency + elif observatory.agency == "BGS": + network = "GB" + elif observatory.agency == "GSC": + network = "C2" + elif observatory.agency == "JMA": + network = "JP" + elif observatory.agency == "SANSA": + network = "AF" + + metadata = Metadata( + category=MetadataCategory.OBSERVATORY, + created_by="copy_observatory", + network=network, + station=observatory.id, + metadata=observatory.dict(), + ) + return metadata + + +def get_observatory_metadata( + observatory: str, +): + """Get metadata from OBSERVATORIES list. + + Parameters + ---------- + observatory + search observatory + + Returns + ------- + observatory metadata + """ + observatories = [] + # add observatories + for observatory_ in OBSERVATORIES: + if observatory == observatory_.id: + observatories.append(observatory_) + print(observatories) + return observatories + + +def main() -> None: + """Entrypoint for copy observatory method.""" + # for one command, can use typer.run + typer.run(copy_observatory) + + +def upload_observatory_metdata(factory: MetadataFactory, observatory) -> Metadata: + """Upload observatory to metadata service + + Parameters + ---------- + factory + factory configured for metadata service + observatory + observatory to upload + + Returns + ------- + created metadata object + """ + metadata = create_observatory_metadata(observatory=observatory) + return factory.create_metadata(metadata=metadata) + + +if __name__ == "__main__": + main()