Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import numpy as np
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from dsiUnits import dsiUnit
app = FastAPI()
class UnitRequest(BaseModel):
unit_string: str
class UnitComparisonRequest(BaseModel):
unit_string1: str
unit_string2: str
complete: bool = False
@app.post("/convert/utf8/")
async def convert_to_utf8(request: UnitRequest):
try:
unit=dsiUnit(request.unit_string)
if unit.valid:
return {unit.toUTF8()}
else:
raise HTTPException(status_code=500, detail=str(unit.warnings))
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@app.post("/convert/latex/")
async def convert_to_latex(request: UnitRequest):
try:
unit = dsiUnit(request.unit_string)
# Assuming you have a function to convert unit strings to LaTeX
if unit.valid:
return {unit.toLatex()}
else:
raise HTTPException(status_code=500, detail=str(unit.warnings))
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@app.post("/compare/units/")
async def compare_units(request: UnitComparisonRequest):
try:
unit1 = dsiUnit(request.unit_string1)
unit2 = dsiUnit(request.unit_string2)
complete = request.complete
if unit1.valid and unit2.valid:
scale_factor, base_unit = unit1.isScalablyEqualTo(unit2, complete=complete)
if not np.isnan(scale_factor):
return {"scale_factor": scale_factor, "base_unit": str(base_unit)}
else:
return {"error": "Units are not scalably equal try complete conversion instead. "}
else:
warnings = unit1.warnings if not unit1.valid else unit2.warnings
raise HTTPException(status_code=400, detail=str(warnings))
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))