From 970705c13c49cc62fbe43ded315bf810228d5e2b Mon Sep 17 00:00:00 2001 From: pcain-usgs <pcain@usgs.gov> Date: Tue, 23 Mar 2021 09:33:11 -0600 Subject: [PATCH] _get_header, get_metadata_by_id, allow exception for no data, move query --- debugger.py | 3 -- geomagio/api/secure/metadata.py | 5 +- geomagio/api/ws/metadata.py | 3 +- geomagio/apiclient/MetadataFactory.py | 46 +++++++++---------- geomagio/apiclient/metadata.py | 10 ++-- .../{api/secure => metadata}/MetadataQuery.py | 4 +- geomagio/metadata/__init__.py | 3 +- 7 files changed, 34 insertions(+), 40 deletions(-) delete mode 100644 debugger.py rename geomagio/{api/secure => metadata}/MetadataQuery.py (91%) diff --git a/debugger.py b/debugger.py deleted file mode 100644 index e62088d4b..000000000 --- a/debugger.py +++ /dev/null @@ -1,3 +0,0 @@ -from geomagio.apiclient.metadata import create - -create(station="BOU", category="reading") diff --git a/geomagio/api/secure/metadata.py b/geomagio/api/secure/metadata.py index 227ce65d0..e619c6636 100644 --- a/geomagio/api/secure/metadata.py +++ b/geomagio/api/secure/metadata.py @@ -19,11 +19,10 @@ from typing import List from fastapi import APIRouter, Body, Depends, Request, Response from obspy import UTCDateTime -from ...metadata import Metadata, MetadataCategory +from ...metadata import Metadata, MetadataCategory, MetadataQuery +from ... import pydantic_utcdatetime from ..db import metadata_table from .login import require_user, User -from .MetadataQuery import MetadataQuery -from ... import pydantic_utcdatetime # routes for login/logout router = APIRouter() diff --git a/geomagio/api/ws/metadata.py b/geomagio/api/ws/metadata.py index 9f4febeb9..655c33e59 100644 --- a/geomagio/api/ws/metadata.py +++ b/geomagio/api/ws/metadata.py @@ -3,8 +3,7 @@ from typing import List from fastapi import APIRouter from obspy import UTCDateTime -from ...metadata import Metadata, MetadataCategory -from ..secure.MetadataQuery import MetadataQuery +from ...metadata import Metadata, MetadataCategory, MetadataQuery from ..db import metadata_table router = APIRouter() diff --git a/geomagio/apiclient/MetadataFactory.py b/geomagio/apiclient/MetadataFactory.py index 1d8ded018..288901c68 100644 --- a/geomagio/apiclient/MetadataFactory.py +++ b/geomagio/apiclient/MetadataFactory.py @@ -5,8 +5,7 @@ from typing import List, Union from obspy import UTCDateTime from pydantic import parse_obj_as -from ..api.secure.MetadataQuery import MetadataQuery -from ..metadata import Metadata +from ..metadata import Metadata, MetadataQuery class MetadataFactory(object): @@ -19,7 +18,10 @@ class MetadataFactory(object): ): self.url = url self.token = token - self.header = {"Authorization": self.token} if token else None + self.header = self._get_headers() + + def _get_headers(self): + return {"Authorization": self.token} if self.token else None def delete_metadata(self, metadata: Metadata) -> bool: response = requests.delete(url=f"{self.url}/{metadata.id}", headers=self.header) @@ -28,19 +30,19 @@ class MetadataFactory(object): return False def get_metadata(self, query: MetadataQuery) -> List[Metadata]: - args = parse_params(query=query) - if "id" in args: - self.url = f"{self.url}/{args['id']}" - args = {} - response = requests.get(url=self.url, params=args, headers=self.header) - try: - metadata = parse_obj_as(Union[List[Metadata], Metadata], response.json()) - except: - return [] + if query.id: + response = self.get_metadata_by_id(id=query.id) + else: + args = parse_params(query=query) + response = requests.get(url=self.url, params=args, headers=self.header) + metadata = parse_obj_as(Union[List[Metadata], Metadata], response.json()) if isinstance(metadata, Metadata): metadata = [metadata] return metadata + def get_metadata_by_id(self, id: int) -> requests.Response: + return requests.get(f"{self.url}/{id}", headers=self.header) + def create_metadata(self, metadata: Metadata) -> Metadata: response = requests.post( url=self.url, data=metadata.json(), headers=self.header @@ -55,19 +57,15 @@ class MetadataFactory(object): def parse_params(query: MetadataQuery) -> str: - query = query.dict() + query = query.dict(exclude_none=True) args = {} for key in query.keys(): element = query[key] - if element is not None: - # convert times to strings - if type(element) == UTCDateTime: - element = element.isoformat() - # get string value of metadata category - if key == "category": - element = element.value - elif key == "id": - return {"id": element} - args[key] = element - + # convert times to strings + if isinstance(element, UTCDateTime): + element = element.isoformat() + # get string value of metadata category + if key == "category": + element = element.value + args[key] = element return args diff --git a/geomagio/apiclient/metadata.py b/geomagio/apiclient/metadata.py index 0835d5ae0..afb3ea63e 100644 --- a/geomagio/apiclient/metadata.py +++ b/geomagio/apiclient/metadata.py @@ -6,8 +6,7 @@ from typing import Dict, Optional from obspy import UTCDateTime import typer -from ..api.secure.MetadataQuery import MetadataQuery -from ..metadata import Metadata, MetadataCategory +from ..metadata import Metadata, MetadataCategory, MetadataQuery from .MetadataFactory import MetadataFactory @@ -58,7 +57,7 @@ def create( endtime=UTCDateTime(endtime) if endtime else None, id=id, location=location, - metadata=input_metadata["metadata"], + metadata=input_metadata, metadata_valid=metadata_valid, network=network, starttime=UTCDateTime(starttime) if starttime else None, @@ -78,7 +77,8 @@ def delete( metadata_dict = load_metadata(input_file=input_file) metadata = Metadata(**metadata_dict) deleted = MetadataFactory(url=url).delete_metadata(metadata=metadata) - print(deleted) + if not deleted: + sys.exit(1) @app.command() @@ -124,7 +124,7 @@ def get( raise ValueError("More than one matching record") print(metadata[0].json()) return - print([m.json() for m in metadata]) + print("[" + ",".join([m.json() for m in metadata]) + "]") @app.command() diff --git a/geomagio/api/secure/MetadataQuery.py b/geomagio/metadata/MetadataQuery.py similarity index 91% rename from geomagio/api/secure/MetadataQuery.py rename to geomagio/metadata/MetadataQuery.py index f414dd478..36e6c3ebe 100644 --- a/geomagio/api/secure/MetadataQuery.py +++ b/geomagio/metadata/MetadataQuery.py @@ -4,8 +4,8 @@ from obspy import UTCDateTime from pydantic import BaseModel from typing import Optional -from ...metadata import MetadataCategory -from ... import pydantic_utcdatetime +from .. import pydantic_utcdatetime +from .MetadataCategory import MetadataCategory class MetadataQuery(BaseModel): diff --git a/geomagio/metadata/__init__.py b/geomagio/metadata/__init__.py index 7502db024..37b2adc33 100644 --- a/geomagio/metadata/__init__.py +++ b/geomagio/metadata/__init__.py @@ -1,5 +1,6 @@ from .Metadata import Metadata from .MetadataCategory import MetadataCategory +from .MetadataQuery import MetadataQuery -__all__ = ["Metadata", "MetadataCategory"] +__all__ = ["Metadata", "MetadataCategory", "MetadataQuery"] -- GitLab