moved models to separate folder

This commit is contained in:
Josh Burman 2021-09-04 23:50:22 -04:00
parent 1b7c56ac3e
commit c4fdd68af2
9 changed files with 84 additions and 58 deletions

View File

@ -2,66 +2,10 @@ from fastapi import FastAPI, __version__
from pydantic import BaseModel
from typing import Set, List, Optional, Dict
from models.solver_content import SolverContent
app = FastAPI()
class MetaData(BaseModel):
key: str
value: str
field_id: Optional[int]
option_id: Optional[int]
class Item(BaseModel):
id: int
metadata: List[MetaData]
class Constraint(BaseModel):
key: str
value: str
field_id: Optional[int]
option_id: Optional[int]
minimum: int
maximum: int
class IRTModel(BaseModel):
a_param: float
b_param: float
c_param: float
model: str
class Targets(BaseModel):
neg_2_5: int
neg_1_5: int
neg_0_5: int
_0_5: int
_1: int
class ObjectiveFunction(BaseModel):
# minimizing tif/tcc target value is only option currently
# as we add more we can build this out to be more dynamic
# likely with models representing each objective function type
tif_targets: Targets
tcc_targets: Targets
weight: Dict = {'tif': 1, 'tcc': 1}
class AdvancedOptions(BaseModel):
# will supported currently
linearity_check: bool
show_progress: bool
max_solution_time: Optional[int]
brand_bound_tolerance: Optional[float]
max_forms: Optional[int]
precision: Optional[float]
extra_param_range: Optional[List[Dict]]
class SolverContent(BaseModel):
items: List[Item]
constraints: List[Constraint]
irt_model: IRTModel
objective_fuction: ObjectiveFunction
total_form_items: int
advanced_options: Optional[List[AdvancedOptions]]
engine: str
@app.get("/")
async def root():
return {"message": "Welcome to Measures LOFT solver service. v0.1"}

View File

@ -0,0 +1,12 @@
from pydantic import BaseModel
from typing import List, Optional, Dict
class AdvancedOptions(BaseModel):
# will supported currently
linearity_check: bool
show_progress: bool
max_solution_time: Optional[int]
brand_bound_tolerance: Optional[float]
max_forms: Optional[int]
precision: Optional[float]
extra_param_range: Optional[List[Dict]]

10
app/models/constraint.py Normal file
View File

@ -0,0 +1,10 @@
from pydantic import BaseModel
from typing import Optional
class Constraint(BaseModel):
key: str
value: str
field_id: Optional[int]
option_id: Optional[int]
minimum: int
maximum: int

7
app/models/irt_model.py Normal file
View File

@ -0,0 +1,7 @@
from pydantic import BaseModel
class IRTModel(BaseModel):
a_param: float
b_param: float
c_param: float
model: str

8
app/models/item.py Normal file
View File

@ -0,0 +1,8 @@
from pydantic import BaseModel
from typing import List
from models.metadata import MetaData
class Item(BaseModel):
id: int
metadata: List[MetaData]

8
app/models/metadata.py Normal file
View File

@ -0,0 +1,8 @@
from pydantic import BaseModel
from typing import Optional
class MetaData(BaseModel):
key: str
value: str
field_id: Optional[int]
option_id: Optional[int]

View File

@ -0,0 +1,12 @@
from pydantic import BaseModel
from typing import Dict
from models.targets import Targets
class ObjectiveFunction(BaseModel):
# minimizing tif/tcc target value is only option currently
# as we add more we can build this out to be more dynamic
# likely with models representing each objective function type
tif_targets: Targets
tcc_targets: Targets
weight: Dict = {'tif': 1, 'tcc': 1}

View File

@ -0,0 +1,17 @@
from pydantic import BaseModel
from typing import List, Optional
from models.item import Item
from models.constraint import Constraint
from models.irt_model import IRTModel
from models.objective_function import ObjectiveFunction
from models.advanced_options import AdvancedOptions
class SolverContent(BaseModel):
items: List[Item]
constraints: List[Constraint]
irt_model: IRTModel
objective_fuction: ObjectiveFunction
total_form_items: int
advanced_options: Optional[List[AdvancedOptions]]
engine: str

8
app/models/targets.py Normal file
View File

@ -0,0 +1,8 @@
from pydantic import BaseModel
class Targets(BaseModel):
neg_2_5: int
neg_1_5: int
neg_0_5: int
_0_5: int
_1: int