class JavaCapturer(object): def __init__(self, stdout=True): if stdout: self._original = System.out self._set_stream = System.setOut else: self._original = System.err self._set_stream = System.setErr self._bytes = ByteArrayOutputStream() self._stream = PrintStream(self._bytes, False, 'UTF-8') self._set_stream(self._stream) def release(self): # Original stream must be restored before closing the current self._set_stream(self._original) self._stream.close() output = self._bytes.toString('UTF-8') self._bytes.reset() return output
class JavaCapturer(object): def __init__(self, stdout=True): if stdout: self._original = System.out self._set_stream = System.setOut else: self._original = System.err self._set_stream = System.setErr self._bytes = ByteArrayOutputStream() self._stream = PrintStream(self._bytes, False, "UTF-8") self._set_stream(self._stream) def release(self): # Original stream must be restored before closing the current self._set_stream(self._original) self._stream.close() output = self._bytes.toString("UTF-8") self._bytes.reset() return output
class VTLKernel(Kernel): implementation = 'VTL Engine' implementation_version = '${python.package.version}' language = 'VTL' language_version = '2.1' language_info = { 'name': 'VTL', 'mimetype': 'text/x-vtl', 'file_extension': '.vtl', } banner = "${project.description}" queryPattern = re.compile(r"^\s*\?\s*(\S+)\s*$") def __init__(self, *args, **kwargs): super(VTLKernel, self).__init__(*args, **kwargs) startJVM() from java.lang import System from java.io import ByteArrayOutputStream from java.io import PrintStream self.baos = ByteArrayOutputStream() ps = PrintStream(self.baos) System.setOut(ps) System.setErr(ps) it = JPackage('it') self.VTLSession = it.bancaditalia.oss.vtl.config.ConfigurationManager.getDefault().createSession() def sendLog(self): self.send_response(self.iopub_socket, 'stream', { 'name':'Log', 'text':str(self.baos.toString()) }) self.baos.reset() def sendData(self, alias, value): if isinstance(value, JPackage('it').bancaditalia.oss.vtl.model.data.DataSet): html = convertDataSet(value) else: html = convertScalar(alias, value) self.send_response(self.iopub_socket, 'display_data', { 'data': { 'text/html': html }, 'metadata': {}, 'transient': {} }) def do_execute(self, code, silent, store_history=True, user_expressions=None, allow_stdin=False): from java.lang import Exception matcher = self.queryPattern.fullmatch(code) try: user_expressions = {} if matcher is not None: name = matcher.group(1) self.sendData(name, self.VTLSession.resolve(name)) self.sendLog() else: statements = self.VTLSession.addStatements(code).getWorkspace().getRules() self.sendLog() self.VTLSession.compile() self.sendLog() for statement in statements: name = statement.getId() self.sendData(name, self.VTLSession.resolve(name)) self.sendLog() user_expressions = { str(statement.getId()): str(statement.getExpression().toString()) for statement in statements } response = { 'status': 'ok', 'execution_count': self.execution_count, 'user_expressions': user_expressions } except Exception as ex: ex.printStackTrace() self.sendLog() traceback = [str(tr.toString()) for tr in ex.getStackTrace()] while ex.getCause() != None: ex = ex.getCause() traceback.append("Caused by " + str(ex.getClass().getName()) + ": " + str(ex.getMessage())) traceback.append([str(tr.toString()) for tr in ex.getStackTrace()]) response = { 'status' : 'error', 'ename' : str(ex.getClass().getName()), 'evalue' : str(ex.getMessage()), 'traceback' : traceback } return response def do_shutdown(self, restart): if restart: if not jpype.isJVMStarted(): startJVM() self.VTLSession = JPackage('it').bancaditalia.oss.vtl.config.ConfigurationManager.getDefault().createSession() else: jpype.shutdownJVM()