Skip to content

Commit 6641a78

Browse files
authored
refactor: explicitly define ONE_OF to avoid type checking errors (#273)
* refactor: explicitly define ONE_OF to avoid type checking errors * refactor: remove dynamic codegen from remaining types
1 parent 296467c commit 6641a78

File tree

11 files changed

+303
-12
lines changed

11 files changed

+303
-12
lines changed

src/aind_data_schema_models/_generators/templates/harp_types.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,4 @@ class HarpDeviceType:
2626

2727
ALL = tuple(HarpDeviceTypeModel.__subclasses__())
2828

29-
ONE_OF = Annotated[Union[tuple(HarpDeviceTypeModel.__subclasses__())], Field(discriminator="name")]
29+
ONE_OF = Annotated[Union[{% for _, row in data.iterrows() %}{{ row['name'] | to_class_name_underscored }}{{ ", " if not loop.last else "" }}{% endfor %}], Field(discriminator="name")]

src/aind_data_schema_models/_generators/templates/modalities.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class Modality:
2727

2828
ALL = tuple(ModalityModel.__subclasses__())
2929

30-
ONE_OF = Annotated[Union[tuple(ModalityModel.__subclasses__())], Field(discriminator="abbreviation")]
30+
ONE_OF = Annotated[Union[{% for _, row in data.iterrows() %}{{ row['abbreviation'] | to_class_name_underscored }}{{ ", " if not loop.last else "" }}{% endfor %}], Field(discriminator="abbreviation")]
3131

3232
abbreviation_map = {m().abbreviation: m() for m in ALL}
3333

src/aind_data_schema_models/_generators/templates/organizations.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class Organization:
3636

3737
ALL = tuple(OrganizationModel.__subclasses__())
3838

39-
ONE_OF = Annotated[Union[tuple(OrganizationModel.__subclasses__())], Field(discriminator="name")]
39+
ONE_OF = Annotated[Union[{% for _, row in data.iterrows() %}{{ row['name'] | to_class_name_underscored }}{{ ", " if not loop.last else "" }}{% endfor %}], Field(discriminator="name")]
4040

4141
abbreviation_map = {m().abbreviation: m() for m in ALL if m().abbreviation is not None}
4242

src/aind_data_schema_models/_generators/templates/protocols.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class Protocols:
3535

3636
ALL = tuple(ProtocolModel.__subclasses__())
3737

38-
ONE_OF = Annotated[Union[tuple(ProtocolModel.__subclasses__())], Field(discriminator="title")]
38+
ONE_OF = Annotated[Union[{% for _, row in data.iterrows() %}{{ row['title'] | to_class_name_underscored }}_V{{ row['version'] }}{{ ", " if not loop.last else "" }}{% endfor %}], Field(discriminator="title")]
3939

4040
doi_map = {m().registry_identifier: m() for m in ALL if getattr(m(), "registry_identifier", None)}
4141

src/aind_data_schema_models/_generators/templates/species.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class Strain:
3737

3838
ALL = tuple(StrainModel.__subclasses__())
3939

40-
ONE_OF = Annotated[Union[tuple(StrainModel.__subclasses__())], Field(discriminator="name")]
40+
ONE_OF = Annotated[Union[{% for _, row in strain_data.iterrows() %}{% if row['strain'] != 'default' %}{{ row['strain'] | to_class_name_underscored }}{{ ", " if not loop.last else "" }}{% endif %}{% endfor %}], Field(discriminator="name")]
4141

4242

4343
class SpeciesModel(BaseModel):
@@ -65,7 +65,7 @@ class Species:
6565

6666
ALL = tuple(SpeciesModel.__subclasses__())
6767

68-
ONE_OF = Annotated[Union[tuple(SpeciesModel.__subclasses__())], Field(discriminator="name")]
68+
ONE_OF = Annotated[Union[{% for _, row in species_data.iterrows() %}{{ row['name'] | to_class_name_underscored }}{{ ", " if not loop.last else "" }}{% endfor %}], Field(discriminator="name")]
6969

7070
name_map = {m().name: m() for m in ALL}
7171
common_name_map = {m().common_name: m() for m in ALL}

src/aind_data_schema_models/harp_types.py

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -348,4 +348,49 @@ class HarpDeviceType:
348348

349349
ALL = tuple(HarpDeviceTypeModel.__subclasses__())
350350

351-
ONE_OF = Annotated[Union[tuple(HarpDeviceTypeModel.__subclasses__())], Field(discriminator="name")]
351+
ONE_OF = Annotated[
352+
Union[
353+
_Analoginput,
354+
_Archimedes,
355+
_Behavior,
356+
_Cameracontroller,
357+
_Cameracontrollergen2,
358+
_Clocksynchronizer,
359+
_Driver12Volts,
360+
_Environmentsensor,
361+
_Flypad,
362+
_Hobgoblin,
363+
_Ibl_Behavior_Control,
364+
_Inputexpander,
365+
_Ledcontroller,
366+
_Licketysplit,
367+
_Loadcells,
368+
_Multipwmgenerator,
369+
_Neurophotometricsfp3002,
370+
_Olfactometer,
371+
_Outputexpander,
372+
_Pluma,
373+
_Poke,
374+
_Pycontroladapter,
375+
_Rfidreader,
376+
_Rgbarray,
377+
_Simpleanaloggenerator,
378+
_Sniffdetector,
379+
_Soundcard,
380+
_Stepperdriver,
381+
_Synchronizer,
382+
_Syringepump,
383+
_Timestampgeneratorgen1,
384+
_Timestampgeneratorgen3,
385+
_Treadmill,
386+
_Usbhub,
387+
_Vestibularh1,
388+
_Vestibularh2,
389+
_Wear,
390+
_Wearbasestationgen2,
391+
_Whiterabbit,
392+
_Cuttlefish,
393+
_Cuttlefishfip,
394+
],
395+
Field(discriminator="name"),
396+
]

src/aind_data_schema_models/modalities.py

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,31 @@ class Modality:
188188

189189
ALL = tuple(ModalityModel.__subclasses__())
190190

191-
ONE_OF = Annotated[Union[tuple(ModalityModel.__subclasses__())], Field(discriminator="abbreviation")]
191+
ONE_OF = Annotated[
192+
Union[
193+
_Barseq,
194+
_Behavior,
195+
_Behavior_Videos,
196+
_Brightfield,
197+
_Confocal,
198+
_Emg,
199+
_Em,
200+
_Ecephys,
201+
_Fib,
202+
_Fmost,
203+
_Icephys,
204+
_Isi,
205+
_Mri,
206+
_Mapseq,
207+
_Merfish,
208+
_Pophys,
209+
_Slap2,
210+
_Spim,
211+
_Stpt,
212+
_Scrnaseq,
213+
],
214+
Field(discriminator="abbreviation"),
215+
]
192216

193217
abbreviation_map = {m().abbreviation: m() for m in ALL}
194218

src/aind_data_schema_models/organizations.py

Lines changed: 120 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1181,7 +1181,126 @@ class Organization:
11811181

11821182
ALL = tuple(OrganizationModel.__subclasses__())
11831183

1184-
ONE_OF = Annotated[Union[tuple(OrganizationModel.__subclasses__())], Field(discriminator="name")]
1184+
ONE_OF = Annotated[
1185+
Union[
1186+
_Aa_Opto_Electronic,
1187+
_Asus,
1188+
_Abcam,
1189+
_Addgene,
1190+
_Ailipu_Technology_Co,
1191+
_Allen_Institute,
1192+
_Allen_Institute_For_Brain_Science,
1193+
_Allen_Institute_For_Neural_Dynamics,
1194+
_Allied,
1195+
_Applied_Scientific_Instrumentation,
1196+
_Arduino,
1197+
_Arecont_Vision_Costar,
1198+
_Basler,
1199+
_Baylor_College_Of_Medicine,
1200+
_Boston_University,
1201+
_Cajal_Neuroscience,
1202+
_Cambridge_Technology,
1203+
_Carl_Zeiss,
1204+
_Champalimaud_Foundation,
1205+
_Chan_Zuckerberg_Initiative,
1206+
_Charles_River_Laboratories,
1207+
_Chroma,
1208+
_Coherent_Scientific,
1209+
_Columbia_University,
1210+
_Computar,
1211+
_Conoptics,
1212+
_Crestoptics,
1213+
_Custom,
1214+
_Digikey,
1215+
_Dodotronic,
1216+
_Doric,
1217+
_Ealing,
1218+
_Edmund_Optics,
1219+
_Emory_University,
1220+
_Euresys,
1221+
_Fujinon,
1222+
_Hamamatsu,
1223+
_Hamilton,
1224+
_Huazhong_University_Of_Science_And_Technology,
1225+
_Ir_Robot_Co,
1226+
_Isl_Products_International,
1227+
_Infinity_Photo_Optical,
1228+
_Integrated_Dna_Technologies,
1229+
_Interuniversity_Microelectronics_Center,
1230+
_Invitrogen,
1231+
_Item,
1232+
_Jackson_Laboratory,
1233+
_Janelia_Research_Campus,
1234+
_Jenoptik,
1235+
_Johns_Hopkins_University,
1236+
_Julabo,
1237+
_Kowa,
1238+
_Lasos_Lasertechnik,
1239+
_Lg,
1240+
_Leica,
1241+
_Lifecanvas,
1242+
_Lumen_Dynamics,
1243+
_Lumencor,
1244+
_Mbf_Bioscience,
1245+
_Mit_Department_Of_Brain_And_Cognitive_Sciences,
1246+
_Mks_Newport,
1247+
_Mpi,
1248+
_Massachusetts_Institute_Of_Technology,
1249+
_Mcgovern_Institute_For_Brain_Research,
1250+
_Meadowlark_Optics,
1251+
_Michael_J_Fox_Foundation_For_Parkinson_S_Research,
1252+
_Midwest_Optical_Systems_Inc_,
1253+
_Mitutuyo,
1254+
_Nresearch_Inc,
1255+
_National_Center_For_Complementary_And_Integrative_Health,
1256+
_National_Institute_Of_Mental_Health,
1257+
_National_Institute_Of_Neurological_Disorders_And_Stroke,
1258+
_National_Instruments,
1259+
_Navitar,
1260+
_Neuralynx,
1261+
_Neurophotometrics,
1262+
_New_Scale_Technologies,
1263+
_New_York_University,
1264+
_Nikon,
1265+
_Olympus,
1266+
_Open_Ephys_Production_Site,
1267+
_Optotune,
1268+
_Other,
1269+
_Oxxius,
1270+
_Placid_Industries,
1271+
_Prizmatix,
1272+
_Quantifi,
1273+
_Raspberry_Pi,
1274+
_Sicgen,
1275+
_Same_Sky,
1276+
_Schneider_Kreuznach,
1277+
_Second_Order_Effects,
1278+
_Semrock,
1279+
_Sigma_Aldrich,
1280+
_Simons_Foundation,
1281+
_Spectra_Physics,
1282+
_Spinnaker,
1283+
_Te_Connectivity,
1284+
_Tamron,
1285+
_Technical_Manufacturing_Corporation,
1286+
_Teledyne_Flir,
1287+
_Teledyne_Vision_Solutions,
1288+
_Templeton_World_Charity_Foundation,
1289+
_The_Imaging_Source,
1290+
_The_Lee_Company,
1291+
_Thermo_Fisher_Scientific,
1292+
_Thorlabs,
1293+
_Transducer_Techniques,
1294+
_Tymphany,
1295+
_University_Of_California_San_Diego,
1296+
_University_Of_Pennsylvania,
1297+
_Unknown,
1298+
_Vieworks,
1299+
_Vortran,
1300+
_Ams_Osram,
1301+
],
1302+
Field(discriminator="name"),
1303+
]
11851304

11861305
abbreviation_map = {m().abbreviation: m() for m in ALL if m().abbreviation is not None}
11871306

src/aind_data_schema_models/protocols.py

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -816,7 +816,78 @@ class Protocols:
816816

817817
ALL = tuple(ProtocolModel.__subclasses__())
818818

819-
ONE_OF = Annotated[Union[tuple(ProtocolModel.__subclasses__())], Field(discriminator="title")]
819+
ONE_OF = Annotated[
820+
Union[
821+
_Solenoid_Valve_Calibration_For_Behavior_Rigs_Utilizing_Water_Reward_V1,
822+
_Running_A_Dynamic_Foraging_Behavior_Task_In_Mice_V1,
823+
_Whole_Brain_Embedding_For_Smartspim_Easyindex_With_2_Agarose_V1,
824+
_Stereotaxic_Injection_By_Nanoject_Protocol_V1,
825+
_Stereotaxic_Injection_By_Nanoject_Protocol_V2,
826+
_Stereotaxic_Injection_By_Nanoject_Protocol_V3,
827+
_Stereotaxic_Injection_By_Nanoject_Protocol_V4,
828+
_Stereotaxic_Injection_By_Nanoject_Protocol_V5,
829+
_Stereotaxic_Injection_By_Nanoject_Protocol_V6,
830+
_Stereotaxic_Injection_By_Nanoject_Protocol_V7,
831+
_Stereotaxic_Injection_By_Iontophoresis_V1,
832+
_Stereotaxic_Injection_By_Iontophoresis_V2,
833+
_Stereotaxic_Injection_By_Iontophoresis_V3,
834+
_Stereotaxic_Injection_By_Iontophoresis_V4,
835+
_Stereotaxic_Injection_By_Iontophoresis_V5,
836+
_Stereotaxic_Injection_By_Iontophoresis_V6,
837+
_Stereotaxic_Injection_By_Iontophoresis_V7,
838+
_Mouse_Habituation_Head_Fixation_Into_Tube_V1,
839+
_Mouse_Water_Restriction_V1,
840+
_Modified_Frame_Projected_Independent_Fiber_Photometry_Fip_System_Hardware_V1,
841+
_Modified_Frame_Projected_Independent_Fiber_Photometry_Fip_System_Hardware_V2,
842+
_Making_Agarose_For_Use_In_Acute_In_Vivo_Electrophysiology_Experiments__V1,
843+
_Plug_Removal_For_Acute_In_Vivo_Electrophysiology_Experiments_V1,
844+
_Intraperitoneal_Injection_In_An_Adult_Mouse_V1,
845+
_Intraperitoneal_Injection_In_An_Adult_Mouse_V2,
846+
_Multiplexed_Rna_Fish_On_Expanded_Mouse_Brain_Slices_V1,
847+
_General_Setup_And_Takedown_Procedures_For_Rodent_Neurosurgery_V1,
848+
_General_Setup_And_Takedown_Procedures_For_Rodent_Neurosurgery_V2,
849+
_Dual_Hemisphere_Craniotomy_For_Electrophysiology_V1,
850+
_Aqueous_Sbip_Delipidation_For_Whole_Mouse_Brain_After_Morphofish_Perfusion__V1,
851+
_Mouse_Habituation_Head_Fixation_On_Disk_V1,
852+
_Mouse_Habituation_Head_Fixation_On_Disk_V2,
853+
_Preparation_Of_Lipopolysaccharide_For_Intraperitoneal_Injection_V1,
854+
_Temporal_Assessment_Of_Immune_Response_V1,
855+
_Mouse_Vab_Catheter_Maintenance_V1,
856+
_Processing_Blood_Intended_For_Olink_Assay_V1,
857+
_Barseq_2_5_V1,
858+
_Aqueous_Sbip_Delipidation_Of_A_Whole_Mouse_Brain_V1,
859+
_Aqueous_Sbip_Delipidation_Of_A_Whole_Mouse_Brain_V2,
860+
_Tetrahydrofuran_And_Dichloromethane_Delipidation_Of_A_Whole_Mouse_Brain_V1,
861+
_Tetrahydrofuran_And_Dichloromethane_Delipidation_Of_A_Whole_Mouse_Brain_V2,
862+
_Whole_Mouse_Brain_Delipidation_Dichloromethane_V1,
863+
_Whole_Mouse_Brain_Delipidation_Immunolabeling_And_Expansion_Microscopy_V1,
864+
_Immunolabeling_Of_A_Whole_Mouse_Brain_V1,
865+
_Structural_Mri_Using_The_University_Of_Washington_14T_Vertical_Bore_Bruker_Mri_V1,
866+
_Duragel_Application_For_Acute_Electrophysiology_Recordings_V1,
867+
_Smartspim_Setup_And_Alignment_V1,
868+
_Refractive_Index_Matching_Easyindex_V1,
869+
_Preparing_A_3D_Printed_Implant_For_Acute_In_Vivo_Electrophysiology_V1,
870+
_Imaging_Cleared_Mouse_Brains_On_Smartspim_V1,
871+
_Refractive_Index_Matching_Ethyl_Cinnamate_V1,
872+
_Dapi_Staining_Mouse_Brain_Sections_V1,
873+
_Modified_Frame_Projected_Independent_Fiber_Photometry_Fip_System_Triggering_System_V1,
874+
_Multi_Site_Optic_Fiber_Implants_V1,
875+
_Immunohistochemistry_Ihc_Staining_Mouse_Brain_Sections_V1,
876+
_Sectioning_Mouse_Brain_With_Sliding_Microtome_V1,
877+
_Mounting_And_Coverslipping_Mouse_Brain_Sections_V1,
878+
_Stereotactic_Injections_With_Headframe_Implant_V1,
879+
_Protocol_Collection_Perfusing_Sectioning_Ihc_Mounting_And_Coverslipping_Mouse_Brain_Specimens_V1,
880+
_Mouse_Cardiac_Perfusion_Fixation_And_Brain_Collection_V1,
881+
_Mouse_Cardiac_Perfusion_Fixation_And_Brain_Collection_V2,
882+
_Mouse_Cardiac_Perfusion_Fixation_And_Brain_Collection_V3,
883+
_Mouse_Cardiac_Perfusion_Fixation_And_Brain_Collection_V4,
884+
_Mouse_Cardiac_Perfusion_Fixation_And_Brain_Collection_V5,
885+
_Mouse_Cardiac_Perfusion_Fixation_And_Brain_Collection_V6,
886+
_Mouse_Cardiac_Perfusion_Fixation_And_Brain_Collection_V7,
887+
_Mouse_Cardiac_Perfusion_Fixation_And_Brain_Collection_V8,
888+
],
889+
Field(discriminator="title"),
890+
]
820891

821892
doi_map = {m().registry_identifier: m() for m in ALL if getattr(m(), "registry_identifier", None)}
822893

src/aind_data_schema_models/species.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class Strain:
5656

5757
ALL = tuple(StrainModel.__subclasses__())
5858

59-
ONE_OF = Annotated[Union[tuple(StrainModel.__subclasses__())], Field(discriminator="name")]
59+
ONE_OF = Annotated[Union[_C57Bl_6J, _Balb_C, _Unknown], Field(discriminator="name")]
6060

6161

6262
class SpeciesModel(BaseModel):
@@ -195,7 +195,23 @@ class Species:
195195

196196
ALL = tuple(SpeciesModel.__subclasses__())
197197

198-
ONE_OF = Annotated[Union[tuple(SpeciesModel.__subclasses__())], Field(discriminator="name")]
198+
ONE_OF = Annotated[
199+
Union[
200+
_Callithrix_Jacchus,
201+
_Carpa_Hircus,
202+
_Cavia_Porcellus,
203+
_Equus_Asinus,
204+
_Gallus_Gallus,
205+
_Homo_Sapiens,
206+
_Lama_Glama,
207+
_Macaca_Mulatta,
208+
_Mus_Musculus,
209+
_Oryctolagus_Cuniculus,
210+
_Rattus_Norvegicus,
211+
_Vicuna_Pacos,
212+
],
213+
Field(discriminator="name"),
214+
]
199215

200216
name_map = {m().name: m() for m in ALL}
201217
common_name_map = {m().common_name: m() for m in ALL}

0 commit comments

Comments
 (0)