class SpsVisit(BaseModel): exp_type: str exposures: list[SpsExposure] Config = OrmConfig[M.sps_visit]()(lambda row: skip_validation(SpsVisit)( exp_type=row.exp_type, exposures=row.sps_exposure, ))
class VisitSetBase(BaseModel): id: int visit_id: int Config = OrmConfig[M.visit_set]()(lambda row: skip_validation(VisitSetBase) ( id=row.visit_set_id, visit_id=row.pfs_visit_id, ))
class VisitSet(BaseModel): id: int visit_id: int sps_sequence: SpsSequence Config = OrmConfig[M.visit_set]()(lambda row: skip_validation(VisitSet)( id=row.visit_set_id, visit_id=row.pfs_visit_id, sps_sequence=row.iic_sequence, ))
class VisitBase(BaseModel): id: int description: Optional[str] issued_at: Optional[datetime] Config = OrmConfig[M.pfs_visit]()(lambda row: skip_validation(VisitBase)( id=row.pfs_visit_id, description=row.pfs_visit_description, issued_at=row.issued_at, ))
class IicSequenceStatus(BaseModel): visit_set_id: int status_flag: Optional[int] cmd_output: Optional[str] Config = OrmConfig[M.iic_sequence_status]()( lambda row: skip_validation(IicSequenceStatus)( visit_set_id=row.visit_set_id, status_flag=row.status_flag, cmd_output=row.cmd_output, ))
class SpsSequenceDetail(SpsSequence): notes: list[VisitSetNote] Config = OrmConfig[M.iic_sequence]()( lambda row: skip_validation(SpsSequenceDetail)( visit_set_id=row.visit_set_id, sequence_type=row.sequence_type, name=row.name, comments=row.comments, cmd_str=row.cmd_str, status=row.iic_sequence_status, notes=row.obslog_notes, ))
class SpsExposure(BaseModel): camera_id: int exptime: float exp_start: datetime exp_end: datetime annotation: list[SpsAnnotation] Config = OrmConfig[M.sps_exposure]()( lambda row: skip_validation(SpsExposure)( camera_id=row.sps_camera_id, exptime=row.exptime, # type: ignore exp_end=row.time_exp_end, exp_start=row.time_exp_end, annotation=row.sps_annotation, ))
class VisitDetail(VisitBase): notes: list[VisitNote] sps: Optional[SpsVisit] mcs: Optional[McsVisit] agc: Optional[AgcVisit] sps_sequence: Optional[SpsSequenceDetail] Config = OrmConfig[M.pfs_visit]()(lambda row: skip_validation(VisitDetail)( id=row.pfs_visit_id, description=row.pfs_visit_description, issued_at=row.issued_at, notes=row.obslog_notes, sps=row.sps_visit, mcs=None if len(row.mcs_exposure) == 0 else McsVisit(exposures=row. mcs_exposure), agc=None if row.agc_exposure is None else AgcVisit(exposure=row.agc_exposure), sps_sequence=row.visit_set.iic_sequence if row.visit_set else None, ))
class IicSequence(BaseModel): visit_set_id: int sequence_type: Optional[str] name: Optional[str] comments: Optional[str] cmd_str: Optional[str] status: Optional[IicSequenceStatus] notes: list[VisitSetNote] Config = OrmConfig[M.iic_sequence]()( lambda row: skip_validation(SpsSequence)( visit_set_id=row.visit_set_id, sequence_type=row.sequence_type, name=row.name, comments=row.comments, cmd_str=row.cmd_str, status=row.iic_sequence_status, notes=row.obslog_notes, ))
class McsExposure(BaseModel): frame_id: int exptime: Optional[float] altitude: Optional[float] azimuth: Optional[float] insrot: Optional[float] adc_pa: Optional[float] dome_temperature: Optional[float] dome_pressure: Optional[float] dome_humidity: Optional[float] outside_temperature: Optional[float] outside_pressure: Optional[float] outside_humidity: Optional[float] mcs_cover_temperature: Optional[float] mcs_m1_temperature: Optional[float] taken_at: datetime notes: list[McsExposureNote] Config = OrmConfig[M.mcs_exposure]()( lambda row: ( skip_validation(McsExposure)( frame_id=row.mcs_frame_id, exptime=row.mcs_exptime, # type: ignore altitude=row.altitude, # type: ignore azimuth=row.azimuth, # type: ignore insrot=row.insrot, # type: ignore adc_pa=row.adc_pa, # type: ignore dome_temperature=row.dome_temperature, # type: ignore dome_pressure=row.dome_pressure, # type: ignore dome_humidity=row.dome_humidity, # type: ignore outside_temperature=row.outside_temperature, # type: ignore outside_pressure=row.outside_pressure, # type: ignore outside_humidity=row.outside_humidity, # type: ignore mcs_cover_temperature=row. mcs_cover_temperature, # type: ignore mcs_m1_temperature=row.mcs_m1_temperature, # type: ignore taken_at=row.taken_at, notes=row.obslog_notes, )))
class VisitListEntry(VisitBase): visit_set_id: Optional[int] n_sps_exposures: int n_mcs_exposures: int n_agc_exposures: int # 0 or 1 avg_exptime: Optional[float] avg_azimuth: Optional[float] avg_altitude: Optional[float] avg_insrot: Optional[float] notes: list[VisitNote] Config = OrmConfig()(lambda row: skip_validation(VisitListEntry)( **VisitBase.Config.row_to_model(row.pfs_visit).dict(), visit_set_id=row.visit_set_id, n_sps_exposures=row.n_sps_exposures, n_mcs_exposures=row.n_mcs_exposures, n_agc_exposures=row.n_agc_exposures, avg_exptime=row.avg_exptime, avg_azimuth=row.avg_azimuth, avg_altitude=row.avg_altitude, avg_insrot=row.avg_insrot, notes=row.pfs_visit.obslog_notes, ))
class AgcExposure(BaseModel): id: int exptime: Optional[float] altitude: Optional[float] azimuth: Optional[float] insrot: Optional[float] adc_pa: Optional[float] m2_pos3: Optional[float] outside_temperature: Optional[float] outside_pressure: Optional[float] outside_humidity: Optional[float] measurement_algorithm: Optional[str] version_actor: Optional[str] version_instdata: Optional[str] taken_at: Optional[datetime] guide_offset: Optional[AgcGuideOffset] Config = OrmConfig[M.agc_exposure]()( lambda row: ( skip_validation(AgcExposure)( id=row.agc_exposure_id, exptime=row.agc_exptime, # type: ignore altitude=row.altitude, # type: ignore azimuth=row.azimuth, # type: ignore insrot=row.insrot, # type: ignore adc_pa=row.adc_pa, # type: ignore m2_pos3=row.m2_pos3, # type: ignore outside_temperature=row.outside_temperature, # type: ignore outside_pressure=row.outside_pressure, # type: ignore outside_humidity=row.outside_humidity, # type: ignore measurement_algorithm=row.measurement_algorithm, version_actor=row.version_actor, version_instdata=row.version_instdata, taken_at=row.taken_at, guide_offset=row.agc_guide_offset, )))
class AgcGuideOffset(BaseModel): ra: Optional[float] dec: Optional[float] pa: Optional[float] delta_ra: Optional[float] delta_dec: Optional[float] delta_insrot: Optional[float] delta_az: Optional[float] delta_el: Optional[float] delta_z: Optional[float] delta_z1: Optional[float] delta_z2: Optional[float] delta_z3: Optional[float] delta_z4: Optional[float] delta_z5: Optional[float] delta_z6: Optional[float] Config = OrmConfig[M.agc_guide_offset]()( lambda row: ( skip_validation(AgcGuideOffset)( ra=row.guide_ra, # type: ignore dec=row.guide_dec, # type: ignore pa=row.guide_pa, # type: ignore delta_ra=row.guide_delta_ra, # type: ignore delta_dec=row.guide_delta_dec, # type: ignore delta_insrot=row.guide_delta_insrot, # type: ignore delta_az=row.guide_delta_az, # type: ignore delta_el=row.guide_delta_el, # type: ignore delta_z=row.guide_delta_z, # type: ignore delta_z1=row.guide_delta_z1, # type: ignore delta_z2=row.guide_delta_z2, # type: ignore delta_z3=row.guide_delta_z3, # type: ignore delta_z4=row.guide_delta_z4, # type: ignore delta_z5=row.guide_delta_z5, # type: ignore delta_z6=row.guide_delta_z6, # type: ignore )))