Skip to content
Snippets Groups Projects

Add spreadsheet factory functionality to copy_absolutes.py

@@ -7,17 +7,24 @@ Created on Thu Jul 7 11:05:19 2022
@@ -7,17 +7,24 @@ Created on Thu Jul 7 11:05:19 2022
import json
import json
import os
import os
from datetime import date, datetime, time, timedelta
from datetime import date, datetime, time, timedelta
from typing import List
from typing import List, Optional
 
from pathlib import Path
import typer
import typer
 
from enum import Enum
from obspy import UTCDateTime
from obspy import UTCDateTime
from ..metadata import Metadata, MetadataCategory, MetadataFactory
from ..metadata import Metadata, MetadataFactory, MetadataCategory
from ..residual import Reading, WebAbsolutesFactory
from ..residual import Reading, WebAbsolutesFactory, SpreadsheetAbsolutesFactory
TODAY = datetime.combine(date.today(), time(0, 0, 0))
TODAY = datetime.combine(date.today(), time(0, 0, 0))
 
class ResidualFactory(str, Enum):
 
SPREADSHEET = "spreadsheet"
 
WEB_ABSOLUTES = "webabsolutes"
 
 
def copy_absolutes(
def copy_absolutes(
observatory: str = typer.Option(..., help="Observatory code"),
observatory: str = typer.Option(..., help="Observatory code"),
starttime: datetime = typer.Option(
starttime: datetime = typer.Option(
@@ -40,17 +47,42 @@ def copy_absolutes(
@@ -40,17 +47,42 @@ def copy_absolutes(
help="URL to web absolutes service",
help="URL to web absolutes service",
metavar="URL",
metavar="URL",
),
),
 
directory: Optional[Path] = typer.Option(
 
None,
 
exists=True,
 
file_okay=False,
 
dir_okay=True,
 
writable=False,
 
readable=False,
 
resolve_path=True,
 
help="Residual spreadsheet directory",
 
),
 
factory: ResidualFactory = ResidualFactory.WEB_ABSOLUTES,
 
force: bool = typer.Option(
 
default=False,
 
help="Force skip the check to copy absolutes",
 
),
):
):
"""Copy absolutes from the web absolutes service into the metadata service."""
"""Copy absolutes from the web absolutes service OR residual spreadsheets into the metadata service."""
# read readings from web absolutes
if factory.value == ResidualFactory.WEB_ABSOLUTES:
web_absolutes_factory = WebAbsolutesFactory(url=web_absolutes_url)
factory = WebAbsolutesFactory(url=web_absolutes_url)
 
else:
 
factory = SpreadsheetAbsolutesFactory(base_directory=directory)
 
readings = get_readings(
readings = get_readings(
factory=web_absolutes_factory,
factory=factory,
observatory=observatory,
observatory=observatory,
starttime=UTCDateTime(starttime),
starttime=UTCDateTime(starttime),
endtime=UTCDateTime(endtime),
endtime=UTCDateTime(endtime),
)
)
print(f"Found {len(readings)} absolutes")
 
# confirm whether or not to copy absolutes
 
if not force:
 
typer.confirm(
 
f"Are you sure you want to copy {len(readings)} absolutes?", abort=True
 
)
 
print("Copying over absolutes")
 
# write readings to metadata service
# write readings to metadata service
metadata_factory = MetadataFactory(token=metadata_token, url=metadata_url)
metadata_factory = MetadataFactory(token=metadata_token, url=metadata_url)
with typer.progressbar(
with typer.progressbar(
@@ -88,17 +120,17 @@ def create_reading_metadata(reading: Reading) -> Metadata:
@@ -88,17 +120,17 @@ def create_reading_metadata(reading: Reading) -> Metadata:
def get_readings(
def get_readings(
factory: WebAbsolutesFactory,
factory: ResidualFactory,
observatory: str,
observatory: str,
starttime: UTCDateTime,
starttime: UTCDateTime,
endtime: UTCDateTime,
endtime: UTCDateTime,
) -> List[Reading]:
) -> List[Reading]:
"""Get readings from web absolutes.
"""Get readings from web absolutes or residual spreadsheets.
Parameters
Parameters
----------
----------
factory
factory
configured WebAbsolutesFactory
configured WebAbsolutesFactory or SpreadsheetAbsolutesFactory
observatory
observatory
search observatory
search observatory
starttime
starttime
Loading