Skip to content

Commit

Permalink
Clean up and use enum mapper names.
Browse files Browse the repository at this point in the history
  • Loading branch information
mtaghiza committed Mar 13, 2024
1 parent 6de9829 commit ab2d942
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 49 deletions.
9 changes: 8 additions & 1 deletion python/valis/db/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import datetime
from typing import Optional
from pydantic import ConfigDict, BaseModel, Field

from enum import Enum

# for how to specify required, optional, default, etc, see
# https://docs.pydantic.dev/latest/migration/#required-optional-and-nullable-fields
Expand Down Expand Up @@ -143,3 +143,10 @@ class DbMetadata(PeeweeBase):
description: str = Field(..., description='a description of the database column')
unit: Optional[str] = Field(None, description='the unit if any for the database column')
sql_type: Optional[str] = Field(None, description='the data type of the column')


class MapperName(str, Enum):
"""Mapper names"""
MWM: str = 'MWM'
BHM: str = 'BHM'
LVM: str = 'LVM'
50 changes: 15 additions & 35 deletions python/valis/db/queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
from sdssdb.peewee.sdss5db import catalogdb as cat


from valis.db.models import MapperName
from valis.io.spectra import extract_data
from valis.utils.paths import build_boss_path
from valis.utils.versions import get_software_tag
Expand Down Expand Up @@ -499,7 +500,7 @@ def get_db_metadata(schema: str = None) -> peewee.ModelSelect:
query = query.where(vizdb.DbMetadata.schema == schema)
return query

def get_paged_target_list_by_mapper(mapper: Union[str, int] = "MWM", page_number: int = 1, items_per_page: int = 10) -> peewee.ModelSelect:
def get_paged_target_list_by_mapper(mapper: MapperName = MapperName.MWM, page_number: int = 1, items_per_page: int = 10) -> peewee.ModelSelect:
""" Return a paged list of target rows, based on the mapper.
Return paginated and ordered target rows (of a particular mapper)
Expand All @@ -510,8 +511,8 @@ def get_paged_target_list_by_mapper(mapper: Union[str, int] = "MWM", page_number
Parameters
----------
mapper : Union[str, int]
label or integer id (pk) of the mapper from targetdb.Mapper table.
mapper : MapperName
Enum denoting the mapper name.
page_number : int
Page number of the returned target rows.
items_per_page : int
Expand All @@ -522,37 +523,16 @@ def get_paged_target_list_by_mapper(mapper: Union[str, int] = "MWM", page_number
peewee.ModelSelect
the ORM query
"""

where_condition = targetdb.Mapper.pk == mapper if type(mapper) == int else targetdb.Mapper.label == mapper

if mapper is MapperName.MWM:
where_condition = vizdb.SDSSidToPipes.in_apogee == True
elif mapper is MapperName.BHM:
where_condition = vizdb.SDSSidToPipes.in_boss == True
else:
where_condition = False

return vizdb.SDSSidStacked.select()\
.where(\
vizdb.SDSSidStacked.sdss_id.in_(\
vizdb.SDSSidFlat.select(vizdb.SDSSidFlat.sdss_id)\
.join(targetdb.Target, \
on=(vizdb.SDSSidFlat.catalogid == targetdb.Target.catalogid))\
.join(targetdb.CartonToTarget, \
on=(targetdb.Target.pk == targetdb.CartonToTarget.target))\
.join(targetdb.Carton, \
on=(targetdb.Carton.pk == targetdb.CartonToTarget.carton))\
.join(targetdb.Mapper,
on=(targetdb.Mapper.pk == targetdb.Carton.mapper))\
.where(where_condition)\
.order_by(vizdb.SDSSidFlat.sdss_id)\
.paginate(page_number, items_per_page)\
)\
)\
.order_by(vizdb.SDSSidStacked.sdss_id)

def get_mappers() -> peewee.ModelSelect:
"""Return the list of all mapper names.
Return the list of all mapper name labels and their asscociated IDs,
using the peewee ORM. We return the peewee ModelSelect.
Returns
-------
peewee.ModelSelect
the ORM query
"""
return targetdb.Mapper.select().order_by(targetdb.Mapper.pk)
.join(vizdb.SDSSidToPipes, on = (vizdb.SDSSidStacked.sdss_id == vizdb.SDSSidToPipes.sdss_id))\
.where(where_condition)\
.order_by(vizdb.SDSSidStacked.sdss_id)\
.paginate(page_number, items_per_page)
18 changes: 5 additions & 13 deletions python/valis/routes/query.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@

from valis.routes.base import Base
from valis.db.db import get_pw_db
from valis.db.models import SDSSidStackedBase, SDSSidPipesBase
from valis.db.models import SDSSidStackedBase, SDSSidPipesBase, MapperName
from valis.db.queries import (cone_search, append_pipes, carton_program_search,
carton_program_list, carton_program_map,
get_targets_by_sdss_id, get_targets_by_catalog_id,
get_mappers, get_paged_target_list_by_mapper)
get_paged_target_list_by_mapper)

# convert string floats to proper floats
Float = Annotated[Union[float, str], BeforeValidator(lambda x: float(x) if x and isinstance(x, str) else x)]
Expand Down Expand Up @@ -156,12 +156,6 @@ async def program_map(self):

return carton_program_map()

@router.get('/list/mappers', summary='Return list of all mappers',
response_model=List[Mapper], dependencies=[Depends(get_pw_db)])
async def get_mappers_list(self):
""" Return a list of all mappers """
return list(get_mappers())

@router.get('/carton-program', summary='Search for all SDSS targets within a carton or program',
response_model=List[SDSSidStackedBase], dependencies=[Depends(get_pw_db)])
async def carton_program(self,
Expand All @@ -176,11 +170,9 @@ async def carton_program(self,

@router.get('/mapper', summary='Perform a search for SDSS targets based on the mapper',
response_model=List[SDSSidStackedBase], dependencies=[Depends(get_pw_db)])
async def get_target_list_by_mapper(self, mapper: str = Query(default="MWM", description='String (integer) that identifies the name label (id/primary key) of the mapper', example="MWM"),
page_number: int = Query(..., description='Page number of the returned items', gt=0, example=1),
items_per_page: int = Query(..., description='Number of items displayed in a page', gt=0, example=10)):
async def get_target_list_by_mapper(self, mapper: MapperName = Query(default=MapperName.MWM, description='Mapper name', example=MapperName.MWM),
page_number: int = Query(description='Page number of the returned items', gt=0, example=1),
items_per_page: int = Query(description='Number of items displayed in a page', gt=0, example=10)):
""" Return an ordered and paged list of targets based on the mapper."""
targets = get_paged_target_list_by_mapper(mapper, page_number, items_per_page)
return list(targets)


0 comments on commit ab2d942

Please sign in to comment.