on master help sign in
add basic example import so that websocket server can import Date's examples while retaining safe operations (no file I/O)
commit2e87d05075a46d989b75ae24f6ebb76788222b3d authorAgentM <agentm@themactionfaction.com> dateThu 4 Aug 2016, 13:32 (10 years ago) parent0358e29
4 files changed+30−5
ProjectM36/DatabaseContext.hs+1−1 ProjectM36/Server/websocket-client.html−3 TutorialD/Interpreter.hs+7−1 TutorialD/Interpreter/Import/BasicExamples.hs+22
ProjectM36/DatabaseContext.hs+1−1
@@ -16,7 +16,7 @@ empty = DatabaseContext { inclusionDependencies = M.empty,
1616
1717-- | convert an existing database context into its constituent expression.
1818databaseContextAsDatabaseContextExpr :: DatabaseContext -> DatabaseContextExpr
19−databaseContextAsDatabaseContextExpr context = MultipleExpr $ incDepsExprs ++ relVarsExprs ++ funcsExprs
19+databaseContextAsDatabaseContextExpr context = MultipleExpr $ relVarsExprs ++ incDepsExprs ++ funcsExprs
2020 where
2121 relVarsExprs = map (\(name, rel) -> Assign name (ExistingRelation rel)) (M.toList (relationVariables context))
2222 incDepsExprs :: [DatabaseContextExpr]
ProjectM36/Server/websocket-client.html−3
@@ -1,7 +1,4 @@
11<html>
2−<!-- add server-side security (no file access but allowing date examples loading)
3−add connection parameters with reasonable defaults
4−-->
52<head>
63<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
74<title>Project:M36 WebSocket Client</title>
TutorialD/Interpreter.hs+7−1
@@ -8,6 +8,7 @@ import TutorialD.Interpreter.InformationOperator
88
99import TutorialD.Interpreter.Import.CSV
1010import TutorialD.Interpreter.Import.TutorialD
11+import TutorialD.Interpreter.Import.BasicExamples
1112import TutorialD.Interpreter.Import.Base
1213
1314import TutorialD.Interpreter.Export.CSV
@@ -40,6 +41,7 @@ data ParsedOperation = RODatabaseContextOp RODatabaseContextOperator |
4041 ROGraphOp ROTransactionGraphOperator |
4142 ImportRelVarOp RelVarDataImportOperator |
4243 ImportDBContextOp DatabaseContextDataImportOperator |
44+ ImportBasicExampleOp ImportBasicExampleOperator |
4345 RelVarExportOp RelVarDataExportOperator
4446
4547interpreterParserP :: Parser ParsedOperation
@@ -54,7 +56,8 @@ safeInterpreterParserP = liftM RODatabaseContextOp (roDatabaseContextOperatorP <
5456 liftM InfoOp (infoOpP <* eof) <|>
5557 liftM GraphOp (transactionGraphOpP <* eof) <|>
5658 liftM ROGraphOp (roTransactionGraphOpP <* eof) <|>
57− liftM DatabaseContextExprOp (databaseExprOpP <* eof)
59+ liftM DatabaseContextExprOp (databaseExprOpP <* eof) <|>
60+ liftM ImportBasicExampleOp (importBasicExampleOperatorP <* eof)
5861
5962
6063promptText :: Maybe HeadName -> StringType
@@ -143,6 +146,9 @@ evalTutorialD sessionId conn safe expr = case expr of
143146 case exportResult of
144147 Just err -> barf err
145148 Nothing -> pure QuietSuccessResult
149+ (ImportBasicExampleOp execOp) -> do
150+ let dbcontextexpr = evalImportBasicExampleOperator execOp
151+ evalTutorialD sessionId conn safe (DatabaseContextExprOp dbcontextexpr)
146152 where
147153 needsSafe = safe == SafeEvaluation
148154 unsafeError = pure $ DisplayErrorResult "File I/O operation prohibited."
TutorialD/Interpreter/Import/BasicExamples.hsnew file+22
@@ -0,0 +1,22 @@
1+--includes some hardcoded examples which can be imported even during safe evaluation (no file I/O)
2+module TutorialD.Interpreter.Import.BasicExamples where
3+import ProjectM36.DateExamples
4+import ProjectM36.Base
5+import ProjectM36.DatabaseContext
6+import TutorialD.Interpreter.Base
7+import Text.Parsec.String
8+
9+data ImportBasicExampleOperator = ImportBasicDateExampleOperator
10+
11+evalImportBasicExampleOperator :: ImportBasicExampleOperator -> DatabaseContextExpr
12+evalImportBasicExampleOperator ImportBasicDateExampleOperator = databaseContextAsDatabaseContextExpr dateExamples
13+
14+importBasicExampleOperatorP :: Parser ImportBasicExampleOperator
15+importBasicExampleOperatorP = do
16+ reservedOp ":importexample"
17+ example <- identifier
18+ if example == "date" then
19+ pure ImportBasicDateExampleOperator
20+ else
21+ fail "Unknown example name"
22+