-
Notifications
You must be signed in to change notification settings - Fork 0
/
WolframServerService.wl
85 lines (54 loc) · 1.32 KB
/
WolframServerService.wl
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
(* ::Package:: *)
(* ::Section:: *)
(*Prerequisite *)
Needs["WolframServerUserService`"]
BeginPackage["WolframServerService`"]
$ServerRootDirectory = ".";
(* ::Section:: *)
(*Dispatcher*)
$MainURLDispatcher = URLDispatcher@{
"/api" -> $APIDispatcher,
"/svc" -> $ServiceDispatcher,
"/usr" :> WolframServerUserService`$Index,
StartOfString ~~ ""|"/" ~~ EndOfString -> IndexService,
path__ :> `Basic`GetResource@path
};
$APIDispatcher = URLDispatcher@{
"/eval" -> EvaluationAPI
};
$ServiceDispatcher = URLDispatcher@{
"/eval" -> EvaluationService
};
(* ::Section:: *)
(*Service*)
(* ::Subsection:: *)
(*Basic Service*)
Begin["`Basic`"]
GetResource[path_String] := With[
{
localpath = FileNameJoin@{Sequence@@FileNameSplit@$ServerRootDirectory, Sequence@@FileNameSplit@path}
},
If[FileExistsQ@localpath,
HTTPResponse[
Import[localpath, "String"],
<|"ContentType" -> WolframServerTool`ToMIME@FileFormat@localpath|>
],
HTTPErrorResponse[404]
]
]
IndexService = FormPage[
{{"expr", "Expression"} -> ToExpression},
ExportForm[#expr, "HTML"]&
];
EvaluationAPI = APIFunction[
{{"expr", "Expression"} -> ToExpression},
ResponseForm[#expr, "JSON"] &
];
EvaluationService = FormFunction[
{{"expr", "Expression"} -> ToExpression},
ResponseForm[#expr, "HTML"]&
];
End[]
(* ::Section:: *)
(*End*)
EndPackage[]