From c4fdd68af24d824f31d15cdd40ac1da20ecb6dbc Mon Sep 17 00:00:00 2001 From: Josh Burman Date: Sat, 4 Sep 2021 23:50:22 -0400 Subject: [PATCH] moved models to separate folder --- app/main.py | 60 ++------------------------------ app/models/advanced_options.py | 12 +++++++ app/models/constraint.py | 10 ++++++ app/models/irt_model.py | 7 ++++ app/models/item.py | 8 +++++ app/models/metadata.py | 8 +++++ app/models/objective_function.py | 12 +++++++ app/models/solver_content.py | 17 +++++++++ app/models/targets.py | 8 +++++ 9 files changed, 84 insertions(+), 58 deletions(-) create mode 100644 app/models/advanced_options.py create mode 100644 app/models/constraint.py create mode 100644 app/models/irt_model.py create mode 100644 app/models/item.py create mode 100644 app/models/metadata.py create mode 100644 app/models/objective_function.py create mode 100644 app/models/solver_content.py create mode 100644 app/models/targets.py diff --git a/app/main.py b/app/main.py index 83c3a4e..e39822c 100644 --- a/app/main.py +++ b/app/main.py @@ -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"} diff --git a/app/models/advanced_options.py b/app/models/advanced_options.py new file mode 100644 index 0000000..9df8cac --- /dev/null +++ b/app/models/advanced_options.py @@ -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]] diff --git a/app/models/constraint.py b/app/models/constraint.py new file mode 100644 index 0000000..df98e20 --- /dev/null +++ b/app/models/constraint.py @@ -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 diff --git a/app/models/irt_model.py b/app/models/irt_model.py new file mode 100644 index 0000000..4751ba9 --- /dev/null +++ b/app/models/irt_model.py @@ -0,0 +1,7 @@ +from pydantic import BaseModel + +class IRTModel(BaseModel): + a_param: float + b_param: float + c_param: float + model: str diff --git a/app/models/item.py b/app/models/item.py new file mode 100644 index 0000000..ede564b --- /dev/null +++ b/app/models/item.py @@ -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] diff --git a/app/models/metadata.py b/app/models/metadata.py new file mode 100644 index 0000000..34866ca --- /dev/null +++ b/app/models/metadata.py @@ -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] diff --git a/app/models/objective_function.py b/app/models/objective_function.py new file mode 100644 index 0000000..75b1d88 --- /dev/null +++ b/app/models/objective_function.py @@ -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} diff --git a/app/models/solver_content.py b/app/models/solver_content.py new file mode 100644 index 0000000..89586d1 --- /dev/null +++ b/app/models/solver_content.py @@ -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 diff --git a/app/models/targets.py b/app/models/targets.py new file mode 100644 index 0000000..c50f39f --- /dev/null +++ b/app/models/targets.py @@ -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