Add a basic Python code generator.
This commit is contained in:
parent
52001a23e5
commit
e0946200ea
35
src/Cdl/Codegen.hs
Normal file
35
src/Cdl/Codegen.hs
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
module Cdl.Codegen where
|
||||||
|
import Cdl.Cow hiding (dataPoints)
|
||||||
|
import Data.Fixed
|
||||||
|
import Data.List
|
||||||
|
|
||||||
|
standard =
|
||||||
|
[ "from server.fgs.model import *"
|
||||||
|
, "from server.fgs import db"
|
||||||
|
, "import datetime"
|
||||||
|
]
|
||||||
|
|
||||||
|
dataPoint :: DataPoint -> String
|
||||||
|
dataPoint (id, Coord{longitude=lo,latitude=la}) =
|
||||||
|
"DataPoint(longitude=" ++ show lo ++
|
||||||
|
", latitude=" ++ show la ++
|
||||||
|
", datetime=datetime.now())"
|
||||||
|
|
||||||
|
dataPointLine :: DataPoint -> String
|
||||||
|
dataPointLine dp = "db.session.add(" ++ dataPoint dp ++ ")"
|
||||||
|
|
||||||
|
commitLine :: String
|
||||||
|
commitLine = "db.session.commit()"
|
||||||
|
|
||||||
|
sleepLine :: Float -> String
|
||||||
|
sleepLine f = "sleep(" ++ show f ++ ")"
|
||||||
|
|
||||||
|
dataPoints :: [DataPoint] -> [String]
|
||||||
|
dataPoints dps = map dataPointLine dps ++ [commitLine]
|
||||||
|
|
||||||
|
dataBatches :: Float -> [[DataPoint]] -> [String]
|
||||||
|
dataBatches f dbs = intercalate [sleepLine f] $ map dataPoints dbs
|
||||||
|
|
||||||
|
outputCow :: String -> Float -> Collar -> IO ()
|
||||||
|
outputCow filename f c =
|
||||||
|
writeFile filename $ intercalate "\n" $ standard ++ (dataBatches f $ runCows f [c])
|
Loading…
Reference in New Issue
Block a user