Skip to content
Snippets Groups Projects
Commit a055d8d4 authored by Cain, Payton David's avatar Cain, Payton David
Browse files

Create table, update table for PUT request, read table from entrypoint

parent 5460867f
No related branches found
No related tags found
2 merge requests!146Release CMO metadata to production,!78Metadata History
...@@ -3,6 +3,7 @@ import sqlalchemy ...@@ -3,6 +3,7 @@ import sqlalchemy
from .common import database, sqlalchemy_metadata from .common import database, sqlalchemy_metadata
# register models with sqlalchemy_metadata by importing # register models with sqlalchemy_metadata by importing
from .metadata_history import metadata_history
from .metadata_table import metadata from .metadata_table import metadata
from .session_table import session from .session_table import session
......
from sqlalchemy import Column, ForeignKey, Integer
from ...metadata import Metadata
from .common import database, sqlalchemy_metadata
from .metadata_table import metadata
# create copy of original metadata table and add to sqlalchemy metadata
metadata_history = metadata.tometadata(
metadata=sqlalchemy_metadata, name="metadata_history"
)
metadata_history.append_column(
Column(
"metadata_id",
Integer,
ForeignKey("metadata.id"),
nullable=False,
),
)
metadata_history.indexes.clear()
async def create_metadata(meta: Metadata) -> Metadata:
query = metadata_history.insert()
meta.metadata_id = meta.id
values = meta.datetime_dict(exclude={"id"}, exclude_none=True)
query = query.values(**values)
meta.id = await database.execute(query)
return meta
async def get_metadata(metadata_id: int):
query = metadata_history.select()
query = query.where(metadata_history.c.metadata_id == metadata_id)
rows = await database.fetch_all(query)
return [Metadata(**row) for row in rows]
...@@ -21,7 +21,7 @@ from obspy import UTCDateTime ...@@ -21,7 +21,7 @@ from obspy import UTCDateTime
from ...metadata import Metadata, MetadataCategory, MetadataQuery from ...metadata import Metadata, MetadataCategory, MetadataQuery
from ... import pydantic_utcdatetime from ... import pydantic_utcdatetime
from ..db import metadata_table from ..db import metadata_history, metadata_table
from .login import require_user, User from .login import require_user, User
# routes for login/logout # routes for login/logout
...@@ -45,6 +45,14 @@ async def delete_metadata( ...@@ -45,6 +45,14 @@ async def delete_metadata(
await metadata_table.delete_metadata(id) await metadata_table.delete_metadata(id)
@router.get("/metadata/{id}/history", response_model=List[Metadata])
async def get_history_by_metadata_id(
metadata_id: int,
user: User = Depends(require_user([os.getenv("REVIEWER_GROUP", "reviewer")])),
):
return await metadata_history.get_metadata(metadata_id=metadata_id)
@router.get("/metadata", response_model=List[Metadata]) @router.get("/metadata", response_model=List[Metadata])
async def get_metadata( async def get_metadata(
category: MetadataCategory = None, category: MetadataCategory = None,
...@@ -93,6 +101,9 @@ async def update_metadata( ...@@ -93,6 +101,9 @@ async def update_metadata(
metadata: Metadata = Body(...), metadata: Metadata = Body(...),
user: User = Depends(require_user([os.getenv("REVIEWER_GROUP", "reviewer")])), user: User = Depends(require_user([os.getenv("REVIEWER_GROUP", "reviewer")])),
): ):
original_metadata = await get_metadata_by_id(metadata.id)
await metadata_history.create_metadata(original_metadata)
metadata.updated_by = user.nickname
metadata.updated_time = UTCDateTime()
await metadata_table.update_metadata(metadata) await metadata_table.update_metadata(metadata)
# should be same, but read from database
return await get_metadata_by_id(metadata.id) return await get_metadata_by_id(metadata.id)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment