@Override public <C extends AbstractGeoGigOp<?>> C pre(C command) throws CannotRunGeogigOperationException { if (preScript == null) { return command; } Scripting.runShellScript(preScript); return command; }
@SuppressWarnings("unchecked") @Override public <T> T post( AbstractGeoGigOp<T> command, @Nullable Object retVal, @Nullable RuntimeException exception) throws Exception { if (postScript == null) { return (T) retVal; } boolean success = exception == null; if (success) { Scripting.runShellScript(preScript); } return (T) retVal; }
/** Gather types, etc. */ public static void init() { if (TYPES == null) { TYPES = new HashMap<>(); WRAPPERS = new HashMap<>(); Scripting.forEachType( Functional.propagate( aClass -> { final PythonType type = new PythonType(aClass); TYPES.put(type.getName(), type); if (WrapperObject.class.isAssignableFrom(aClass)) { final Class<?> wrappedClass = (Class<?>) ((ParameterizedType) TypeToken.of(aClass).getSupertype(WrapperObject.class).getType()) .getActualTypeArguments()[0]; final Constructor constructor = aClass.getConstructor(wrappedClass); WRAPPERS.put(wrappedClass, constructor); } })); } }
public PythonRunner( Map<String, String> environment, Repositories repositories, Scheduler scheduler, Hierarchy loggerRepository, String pythonPath, BufferedWriter out, BufferedWriter err) throws Exception { init(); this.staticContext = new StaticContext(scheduler, loggerRepository).repository(repositories); this.environment = environment; final PySystemState systemState = new PySystemState(); interpreter = new PythonInterpreter(null, systemState); for (String path : pythonPath.split(":")) { systemState.path.add(new PyString(path)); } interpreter.setOut(out); interpreter.setErr(err); scriptContext = staticContext.scriptContext(); // XPM module final PyModule xpmModule = new PyModule("xpm", (PyObject) null); systemState.modules.__setitem__("xpm", xpmModule); // Add classes for (PyType type : TYPES.values()) { xpmModule.__setattr__(type.getName(), type); } // Add constants Scripting.forEachConstant( (name, value) -> { xpmModule.__setattr__(name, wrap(value)); }); // Add functions Scripting.forEachFunction( m -> { xpmModule.__setattr__(m.getKey(), new PythonMethod(null, m)); }); // Add Python specific functions for (MethodFunction m : Scripting.getMethodFunctions(PythonFunctions.class)) { xpmModule.__setattr__(m.getKey(), new PythonMethod(null, m)); } // XPM object: wrap properties final XPM xpm = new XPM(); ClassDescription xpmDescription = ClassDescription.analyzeClass(XPM.class); for (Map.Entry<Object, MethodFunction> x : xpmDescription.getMethods().entrySet()) { final Object key = x.getKey(); if (key instanceof String) { xpmModule.__setattr__((String) key, new PythonMethod(xpm, x.getValue())); } else { throw new XPMRuntimeException("Could not handle key ", key); } } // Add properties xpmModule.__setattr__("tasks", wrap(new Tasks())); xpmModule.__setattr__("logger", wrap(new ScriptingLogger("xpm"))); xpmModule.__setattr__("env", wrap(environment)); }
public void result(Object result) { hasResult = true; Scripting.onScriptResult(req, result); }