diff --git a/debugger.py b/debugger.py deleted file mode 100644 index e62088d4b007a9299cc185f1a6525352f457a349..0000000000000000000000000000000000000000 --- 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 227ce65d02699923aed54993f082b2a27b31033c..e619c66362b8b4e960dd92cba5b5d88ff493b6b2 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 9f4febeb93bc0a3b89541697df2bc405a5f9881d..655c33e59f0ec84b4329e5e3c6642c6dbe24882c 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 1d8ded01879bd82921395f0343655b74d0bdbbe5..288901c6856ce2a2a90ec8054555283b301d4d2e 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 0835d5ae0538e2c3bbba9c2d287e4d8b26c70a02..afb3ea63e3c64354553c11c0b8b8cc4773bdb7f3 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 f414dd47829b1d2b0718a0aca063bd5145455ae5..36e6c3ebe3cd20d880c25ff0d683757c84a2d833 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 7502db0243cac6af13d38c8386c3dd292ae386c2..37b2adc332b5f6a90f02c75ac9166cf19de48089 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"]