Ejemplo n.º 1
0
    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
Ejemplo n.º 3
0
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()