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