Exemple #1
0
def ioserveServerOpen(self, buffer=False, **kwa):
    """
    Setup and open a rest server

    Ioinit attributes
        valet is Valet instance (wsgi server)
        mock is Flag if True load mock service endpoints
        test if Flag if True load test endpoints

    Parameters:
        buffer is boolean If True then create wire log buffer for Valet

    Context: enter

    Example:
        do ioserve server open at enter
    """
    if buffer:
        wlog = WireLog(buffify=True, same=True)
        result = wlog.reopen()
    else:
        wlog = None

    port = int(self.port.value)
    app = bottle.app() # create bottle app
    test = True if self.test.value else False
    ending.loadAll(app, self.store, test=test)
    self.valet.value = Valet(port=port,
                             bufsize=131072,
                             wlog=wlog,
                             store=self.store,
                             app=app,
                             )

    result = self.valet.value.servant.reopen()
    if not result:
        console.terse("Error opening server '{0}' at '{1}'\n".format(
                            self.valet.name,
                            self.valet.value.servant.eha))
        return


    console.concise("Opened server '{0}' at '{1}'\n".format(
                            self.valet.name,
                            self.valet.value.servant.eha,))
Exemple #2
0
def reputationServerOpen(self, buffer=False, **kwa):
    if buffer:
        wlog = WireLog(buffify=True, same=True)
        result = wlog.reopen()
    else:
        wlog = None

    port = int(self.port.value)
    test = True if self.test.value else False
    preload = True if self.preload.value else False

    if test:
        priming.setupTest()
        if preload:
            dbing.preloadTestDbs()

    else:
        dbDirPath = self.dbDirPath.value if self.dbDirPath.value else None
        dbDirPath = os.path.abspath(os.path.expanduser(dbDirPath)) if dbDirPath else None
        priming.setup(dbDirPath)

        self.dbDirPath.value = dbing.gDbDirPath

        app = falcon.API()
        ending.loadEnds(app, store=self.store)

        self.valet.value = Valet(port=port,
                                 bufsize=131072,
                                 wlog=wlog,
                                 store=self.store,
                                 app=app,
                                 timeout=0.5)

        result = self.valet.value.servant.reopen()
        if not result:
            console.terse("Error opening server '{0}' at '{1}'\n".format(
                self.valet.name,
                self.valet.value.servant.ha))

            return

        console.concise("Opened server '{0} at '{1}'\n".format(
            self.valet.name,
            self.valet.value.servant.ha))
Exemple #3
0
def reputationServerOpen(self, buffer=False, **kwa):
    """
    Sets up and opens a rest server.

        Ioinit Attributes:
        valet - Valet instance (wsgi server)
        port - Server port number
        dbDirPath - Directory path for the database
        test - Flag; If True, uses a test configuration if any is
        available
        preload - Flag; If True (and test is True), preloads the
        database for testing

        Parameters:
        buffer - Flag; If True, creates wire log buffer for Valet

        Context:
        enter

        Example Usage:
        do reputation server open at enter
    """
    if buffer:
        wireLog = WireLog(buffify=True, same=True)
        result = wireLog.reopen()
    else:
        wireLog = None

    port = int(self.port.value)
    test = True if self.test.value else False
    preload = True if self.preload.value else False

    if test:
        priming.setupTest()
        if preload:
            dbing.preloadTestDbs()

    else:
        dbDirPath = self.dbDirPath.value if self.dbDirPath.value else None
        dbDirPath = os.path.abspath(os.path.expanduser(dbDirPath)) if dbDirPath else None
        priming.setup(dbDirPath)

        self.dbDirPath.value = dbing.gDbDirPath

        app = falcon.API()
        ending.loadEnds(app, store=self.store)

        self.valet.value = Valet(port=port,
                                 bufsize=131072,
                                 wlog=wireLog,
                                 store=self.store,
                                 app=app,
                                 timeout=0.5)

        result = self.valet.value.servant.reopen()
        if not result:
            console.terse("Error opening server '{0}' at '{1}'\n".format(
                self.valet.name,
                self.valet.value.servant.ha))

            return

        console.concise("Opened server '{0} at '{1}'\n".format(
            self.valet.name,
            self.valet.value.servant.ha))
def backendRequest(
    method=u'GET',
    scheme=u'',  #default if not in path
    host=u'localhost',  # default if not in path
    port=None,  # default if not in path
    path=u'/',
    qargs=None,
    data=None,
    store=None,
    timeout=2.0,
    buffer=False,
):
    """
    Perform Async ReST request to Backend Server

    Parameters:

    Usage: (Inside a generator function)

        response = yield from backendRequest()

    response is the response if valid else None
    before response is completed the yield from yields up an empty string ''
    once completed then response has a value

    path can be full url with host port etc  path takes precedence over others


    """
    store = store if store is not None else Store(stamp=0.0)
    if buffer:
        wlog = WireLog(buffify=buffify, same=True)
        wlog.reopen()
    else:
        wlog = None

    headers = odict([('Accept', 'application/json'), ('Connection', 'close')])

    client = Patron(
        bufsize=131072,
        wlog=wlog,
        store=store,
        scheme=scheme,
        hostname=host,
        port=port,
        method=method,
        path=path,
        qargs=qargs,
        headers=headers,
        data=data,
        reconnectable=False,
    )

    console.concise("Making Backend Request {0} {1} ...\n".format(
        method, path))

    client.transmit()
    # assumes store clock is advanced elsewhere
    timer = timing.StoreTimer(store=store, duration=timeout)
    while ((client.requests or client.connector.txes or not client.responses)
           and not timer.expired):
        try:
            client.serviceAll()
        except Exception as ex:
            console.terse(
                "Error: Servicing backend client. '{0}'\n".format(ex))
            raise ex
        yield b''  # this is eventually yielded by wsgi app while waiting

    response = None  # in case timed out
    if client.responses:
        response = client.responses.popleft()
    client.close()
    if wlog:
        wlog.close()

    return response
def microserviceServerOpen(self, buffer=False, **kwa):
    """
    Setup and open a rest server

    Ioinit attributes
        valet is Valet instance (wsgi server)
        port is server port
        dbDirPath is directory path for database
        keepDirPath is directory path for private key files
        test is Flag if True load test endpoints and test database
        test is Flag if True and if test is True then preload database for testing
        fakeHidKind is Flag IF True then enable "fake" HID kind that does not require validation

    Parameters:
        buffer is boolean If True then create wire log buffer for Valet

    Context: enter

    Example:
        do bluepea server open at enter
    """

    if buffer:
        wlog = WireLog(buffify=True, same=True)
        result = wlog.reopen()
    else:
        wlog = None

    microserviceconstnclass.fakeHidKind = self.fakeHidKind.value  # set global flag

    port = int(self.port.value)
    '''
    test = True if self.test.value else False  # use to load test environment
    preload = True if self.preload.value else False  # load test db if test and True

    if test:
        priming.setupTest()
        if preload:
            dbing.preloadTestDbs()
    else:
        keepDirPath = self.keepDirPath.value if self.keepDirPath.value else None  # None is default
        keepDirPath = os.path.abspath(os.path.expanduser(keepDirPath)) if keepDirPath else None
        dbDirPath = self.dbDirPath.value if self.dbDirPath.value else None  # None is default
        dbDirPath = os.path.abspath(os.path.expanduser(dbDirPath)) if dbDirPath else None
        priming.setup(keepDirPath=keepDirPath, dbDirPath=dbDirPath)
    
    self.dbDirPath.value = dbing.gDbDirPath
    self.keepDirPath.value = keeping.gKeepDirPath
    '''
    app = falcon.API()  # falcon.API instances are callable WSGI apps
    ending.loadEnds(app, store=self.store)

    self.valet.value = Valet(
        port=port,
        bufsize=131072,
        wlog=wlog,
        store=None,
        app=app,
        timeout=0.5,
    )

    result = self.valet.value.servant.reopen()
    if not result:
        console.terse("Error opening server '{0}' at '{1}'\n".format(
            self.valet.name, self.valet.value.servant.ha))
        return

    console.concise("Opened server '{0}' at '{1}'\n".format(
        self.valet.name,
        self.valet.value.servant.ha,
    ))
Exemple #6
0
    def testBasic(self):
        """
        Test Valet Patron and Bottle
        """
        console.terse("{0}\n".format(self.testBasic.__doc__))

        store = Store(stamp=0.0)

        app = bottle.default_app() # create bottle app

        @app.get('/echo')
        @app.get('/echo/<action>')
        @app.post('/echo')
        @app.post('/echo/<action>')
        def echoGet(action=None):
            """
            Echo back request data
            """
            query = dict(bottle.request.query.items())
            body = bottle.request.json
            raw = bottle.request.body.read()
            form = odict(bottle.request.forms)

            data = odict(verb=bottle.request.method,
                        url=bottle.request.url,
                        action=action,
                        query=query,
                        form=form,
                        content=body)
            return data


        console.terse("{0}\n".format("Building Valet ...\n"))
        wireLogAlpha = WireLog(buffify=True, same=True)
        result = wireLogAlpha.reopen()

        alpha = Valet(port = 6101,
                              bufsize=131072,
                              wlog=wireLogAlpha,
                              store=store,
                              app=app)
        self.assertIs(alpha.servant.reopen(), True)
        self.assertEqual(alpha.servant.ha, ('0.0.0.0', 6101))
        self.assertEqual(alpha.servant.eha, ('127.0.0.1', 6101))

        console.terse("{0}\n".format("Building Patron ...\n"))
        wireLogBeta = WireLog(buffify=True,  same=True)
        result = wireLogBeta.reopen()

        path = "http://{0}:{1}/".format('localhost', alpha.servant.eha[1])

        beta = Patron(bufsize=131072,
                      wlog=wireLogBeta,
                      store=store,
                      path=path,
                      reconnectable=True)

        self.assertIs(beta.connector.reopen(), True)
        self.assertIs(beta.connector.accepted, False)
        self.assertIs(beta.connector.connected, False)
        self.assertIs(beta.connector.cutoff, False)

        request = odict([('method', u'GET'),
                         ('path', u'/echo?name=fame'),
                         ('qargs', odict()),
                         ('fragment', u''),
                         ('headers', odict([('Accept', 'application/json'),
                                            ('Content-Length', 0)])),
                        ])

        beta.requests.append(request)
        timer = StoreTimer(store, duration=1.0)
        while (beta.requests or beta.connector.txes or not beta.responses or
               not alpha.idle()):
            alpha.serviceAll()
            time.sleep(0.05)
            beta.serviceAll()
            time.sleep(0.05)
            store.advanceStamp(0.1)

        self.assertIs(beta.connector.accepted, True)
        self.assertIs(beta.connector.connected, True)
        self.assertIs(beta.connector.cutoff, False)

        self.assertEqual(len(alpha.servant.ixes), 1)
        self.assertEqual(len(alpha.reqs), 1)
        self.assertEqual(len(alpha.reps), 1)
        requestant = alpha.reqs.values()[0]
        self.assertEqual(requestant.method, request['method'])
        self.assertEqual(requestant.url, request['path'])
        self.assertEqual(requestant.headers, {'accept': 'application/json',
                                                'accept-encoding': 'identity',
                                                'content-length': '0',
                                                'host': 'localhost:6101'})

        self.assertEqual(len(beta.responses), 1)
        response = beta.responses.popleft()
        self.assertEqual(response['status'], 200)
        self.assertEqual(response['reason'], 'OK')
        self.assertEqual(response['body'],bytearray(b''))
        self.assertEqual(response['data'],{'action': None,
                                            'content': None,
                                            'form': {},
                                            'query': {'name': 'fame'},
                                            'url': 'http://localhost:6101/echo?name=fame',
                                            'verb': 'GET'},)

        responder = alpha.reps.values()[0]
        self.assertTrue(responder.status.startswith, str(response['status']))
        self.assertEqual(responder.headers, response['headers'])

        alpha.servant.closeAll()
        beta.connector.close()

        wireLogAlpha.close()
        wireLogBeta.close()
Exemple #7
0
    def testTestStream(self):
        """
        Test Valet WSGI service request response stream sse
        """
        console.terse("{0}\n".format(self.testTestStream.__doc__))

        store = Store(stamp=0.0)

        app = bottle.default_app() # create bottle app

        ending.loadTest(app, store)

        console.terse("{0}\n".format("Building Valet ...\n"))
        wireLogAlpha = WireLog(buffify=True, same=True)
        result = wireLogAlpha.reopen()

        alpha = Valet(port = 6101,
                              bufsize=131072,
                              wlog=wireLogAlpha,
                              store=store,
                              app=app)
        self.assertIs(alpha.servant.reopen(), True)
        self.assertEqual(alpha.servant.ha, ('0.0.0.0', 6101))
        self.assertEqual(alpha.servant.eha, ('127.0.0.1', 6101))

        console.terse("{0}\n".format("Building Patron ...\n"))
        wireLogBeta = WireLog(buffify=True,  same=True)
        result = wireLogBeta.reopen()

        path = "http://{0}:{1}/".format('localhost', alpha.servant.eha[1])

        beta = Patron(bufsize=131072,
                                     wlog=wireLogBeta,
                                     store=store,
                                     path=path,
                                     reconnectable=True)

        self.assertIs(beta.connector.reopen(), True)
        self.assertIs(beta.connector.accepted, False)
        self.assertIs(beta.connector.connected, False)
        self.assertIs(beta.connector.cutoff, False)

        request = odict([('method', u'GET'),
                         ('path', u'/test/stream'),
                         ('qargs', odict()),
                         ('fragment', u''),
                         ('headers', odict([('Accept', 'application/json'),
                                            ('Content-Length', 0)])),
                         ('body', None),
                        ])

        beta.requests.append(request)
        timer = StoreTimer(store, duration=1.0)
        while (not timer.expired):
            alpha.serviceAll()
            time.sleep(0.05)
            beta.serviceAll()
            time.sleep(0.05)
            store.advanceStamp(0.1)

        self.assertIs(beta.connector.accepted, True)
        self.assertIs(beta.connector.connected, True)
        self.assertIs(beta.connector.cutoff, False)

        self.assertEqual(len(alpha.servant.ixes), 1)
        self.assertEqual(len(alpha.reqs), 1)
        self.assertEqual(len(alpha.reps), 1)
        requestant = alpha.reqs.values()[0]
        self.assertEqual(requestant.method, request['method'])
        self.assertEqual(requestant.url, request['path'])
        self.assertEqual(requestant.headers, {'accept': 'application/json',
                                                'accept-encoding': 'identity',
                                                'content-length': '0',
                                                'host': 'localhost:6101'})


        #timed out while stream still open so no responses in .responses
        self.assertIs(beta.waited, True)
        self.assertIs(beta.respondent.ended, False)
        self.assertEqual(len(beta.responses), 0)
        self.assertIn('content-type', beta.respondent.headers)
        self.assertEqual(beta.respondent.headers['content-type'], 'text/event-stream')
        self.assertIn('transfer-encoding', beta.respondent.headers)
        self.assertEqual(beta.respondent.headers['transfer-encoding'], 'chunked')

        self.assertTrue(len(beta.events) >= 3)
        self.assertEqual(beta.respondent.retry, 1000)
        self.assertTrue(int(beta.respondent.leid) >= 2)
        event = beta.events.popleft()
        self.assertEqual(event, {'id': '0', 'name': '', 'data': 'START'})
        event = beta.events.popleft()
        self.assertEqual(event, {'id': '1', 'name': '', 'data': '1'})
        event = beta.events.popleft()
        self.assertEqual(event, {'id': '2', 'name': '', 'data': '2'})
        beta.events.clear()

        #keep going until ended
        timer.restart(duration=1.5)
        while (not timer.expired):
            alpha.serviceAll()
            time.sleep(0.05)
            beta.serviceAll()
            time.sleep(0.05)
            store.advanceStamp(0.1)

        self.assertTrue(len(beta.events) >= 3)
        self.assertEqual(beta.respondent.leid,  '9')
        self.assertEqual(beta.events[-2], {'id': '9', 'name': '', 'data': '9'})
        self.assertEqual(beta.events[-1], {'id': '9', 'name': '', 'data': 'END'})
        beta.events.clear()

        alpha.servant.closeAll()
        beta.connector.close()

        wireLogAlpha.close()
        wireLogBeta.close()
Exemple #8
0
    def testLoadTestEnds(self):
        """
        Test behavior
        """
        console.terse("{0}\n".format(self.testLoadTestEnds.__doc__))

        store = Store(stamp=0.0)

        app = bottle.default_app() # create bottle app

        ending.loadTest(app, store)

        console.terse("{0}\n".format("Building Valet ...\n"))
        wireLogAlpha = WireLog(buffify=True, same=True)
        result = wireLogAlpha.reopen()

        alpha = Valet(port = 6101,
                              bufsize=131072,
                              wlog=wireLogAlpha,
                              store=store,
                              app=app)
        self.assertIs(alpha.servant.reopen(), True)
        self.assertEqual(alpha.servant.ha, ('0.0.0.0', 6101))
        self.assertEqual(alpha.servant.eha, ('127.0.0.1', 6101))

        console.terse("{0}\n".format("Building Patron ...\n"))
        wireLogBeta = WireLog(buffify=True,  same=True)
        result = wireLogBeta.reopen()

        path = "http://{0}:{1}/".format('localhost', alpha.servant.eha[1])

        beta = Patron(bufsize=131072,
                      wlog=wireLogBeta,
                      store=store,
                      path=path,
                      reconnectable=True)

        self.assertIs(beta.connector.reopen(), True)
        self.assertIs(beta.connector.accepted, False)
        self.assertIs(beta.connector.connected, False)
        self.assertIs(beta.connector.cutoff, False)

        # get echo
        request = odict([('method', u'GET'),
                         ('path', u'/test/echo?name=fame'),
                         ('qargs', odict()),
                         ('fragment', u''),
                         ('headers', odict([('Accept', 'application/json'),
                                            ('Content-Length', 0)])),
                        ])

        beta.requests.append(request)
        timer = StoreTimer(store, duration=1.0)
        while (beta.requests or beta.connector.txes or not beta.responses or
               not alpha.idle()):
            alpha.serviceAll()
            time.sleep(0.05)
            beta.serviceAll()
            time.sleep(0.05)
            store.advanceStamp(0.1)

        self.assertIs(beta.connector.accepted, True)
        self.assertIs(beta.connector.connected, True)
        self.assertIs(beta.connector.cutoff, False)

        self.assertEqual(len(alpha.servant.ixes), 1)
        self.assertEqual(len(alpha.reqs), 1)
        self.assertEqual(len(alpha.reps), 1)
        requestant = alpha.reqs.values()[0]
        self.assertEqual(requestant.method, request['method'])
        self.assertEqual(requestant.url, request['path'])
        self.assertEqual(requestant.headers, {'accept': 'application/json',
                                                'accept-encoding': 'identity',
                                                'content-length': '0',
                                                'host': 'localhost:6101'})

        self.assertEqual(len(beta.responses), 1)
        response = beta.responses.popleft()
        self.assertEqual(response['status'], 200)
        self.assertEqual(response['reason'], 'OK')
        self.assertEqual(response['body'],bytearray(b''))
        self.assertEqual(response['data'],{'action': None,
                                            'body': '',
                                            'data': None,
                                            'form': odict([]),
                                            'headers': {'Accept': 'application/json',
                                                        'Accept-Encoding': 'identity',
                                                        'Content-Length': '0',
                                                        'Content-Type': '',
                                                        'Host': 'localhost:6101'},
                                            'query': odict([('name', 'fame')]),
                                            'url': 'http://localhost:6101/test/echo?name=fame',
                                            'verb': 'GET'},)

        responder = alpha.reps.values()[0]
        self.assertTrue(responder.status.startswith, str(response['status']))
        self.assertEqual(responder.headers, response['headers'])

        # get routes
        request = odict([('method', u'GET'),
                         ('path', u'/test/route'),
                         ('qargs', odict()),
                         ('fragment', u''),
                         ('headers', odict([('Accept', 'application/json'),
                                            ('Content-Length', 0)])),
                        ])

        beta.requests.append(request)
        timer = StoreTimer(store, duration=1.0)
        while (beta.requests or beta.connector.txes or not beta.responses or
               not alpha.idle()):
            alpha.serviceAll()
            time.sleep(0.05)
            beta.serviceAll()
            time.sleep(0.05)
            store.advanceStamp(0.1)

        self.assertIs(beta.connector.accepted, True)
        self.assertIs(beta.connector.connected, True)
        self.assertIs(beta.connector.cutoff, False)

        self.assertEqual(len(alpha.servant.ixes), 1)
        self.assertEqual(len(alpha.reqs), 1)
        self.assertEqual(len(alpha.reps), 1)
        requestant = alpha.reqs.values()[0]
        self.assertEqual(requestant.method, request['method'])
        self.assertEqual(requestant.url, request['path'])
        self.assertEqual(requestant.headers, {'accept': 'application/json',
                                                'accept-encoding': 'identity',
                                                'content-length': '0',
                                                'host': 'localhost:6101'})

        self.assertEqual(len(beta.responses), 1)
        response = beta.responses.popleft()
        self.assertEqual(response['status'], 200)
        self.assertEqual(response['reason'], 'OK')
        self.assertEqual(response['body'], bytearray(
                b'Web app file is located at /Data/Code/public/ioserve/ios'
                b'erve/end\n/echo/<action> POST\n/echo POST\n/echo/<actio'
                b'n> GET\n/echo GET\n/ GET\n/test GET\n/test/route GET\n/te'
                b'st/echo POST\n/test/echo/<action> POST\n/test/echo GET'
                b'\n/test/echo/<action> GET\n/test/auth POST\n/test/auth/'
                b'<token> POST\n/test/auth GET\n/test/auth/<token> GET\n/'
                b'test/stream GET'))
        self.assertEqual(response['data'],{
                            'action': None,
                            'body': '',
                            'data': None,
                            'form': odict([]),
                            'headers': {'Accept': 'application/json',
                                        'Accept-Encoding': 'identity',
                                        'Content-Length': '0',
                                        'Content-Type': '',
                                        'Host': 'localhost:6101'},
                            'query': odict([('name', 'fame')]),
                            'url': 'http://localhost:6101/test/echo?name=fame',
                            'verb': 'GET'},)

        responder = alpha.reps.values()[0]
        self.assertTrue(responder.status.startswith, str(response['status']))
        self.assertEqual(responder.headers, response['headers'])

        alpha.servant.closeAll()
        beta.connector.close()

        wireLogAlpha.close()
        wireLogBeta.close()