+package org.simantics.pythonlink;\r
+\r
+import org.simantics.scl.runtime.SCLContext;\r
+import org.simantics.scl.runtime.function.Function;\r
+import org.simantics.scl.runtime.tuple.Tuple0;\r
+\r
+public class Python {\r
+ private static final String PYTHON_CONTEXT = "Simantics/Python/Python";\r
+\r
+ public static PythonContext openPythonContext() {\r
+ return new PythonContext();\r
+ }\r
+ \r
+ @SuppressWarnings( { "unchecked", "rawtypes" } )\r
+ public static Object runPython(Function f) {\r
+ SCLContext sclContext = SCLContext.getCurrent();\r
+ Object oldContext = sclContext.get(PYTHON_CONTEXT);\r
+ try (PythonContext newContext = openPythonContext()) {\r
+ sclContext.put(PYTHON_CONTEXT, newContext);\r
+ return f.apply(Tuple0.INSTANCE);\r
+ }\r
+ finally {\r
+ sclContext.put(PYTHON_CONTEXT, oldContext);\r
+ }\r
+ }\r
+ \r
+ @SuppressWarnings( { "unchecked", "rawtypes" } )\r
+ public static Object runWithPythonContext(PythonContext context, Function f) {\r
+ SCLContext sclContext = SCLContext.getCurrent();\r
+ Object oldContext = sclContext.get(PYTHON_CONTEXT);\r
+ try {\r
+ sclContext.put(PYTHON_CONTEXT, context);\r
+ return f.apply(Tuple0.INSTANCE);\r
+ }\r
+ finally {\r
+ sclContext.put(PYTHON_CONTEXT, oldContext);\r
+ }\r
+ } \r
+}\r