コード例 #1
0
 def createService(self, path, serviceFunc, headers=None):
     transport = THttpClient(f"https://gd2.line.naver.jp{path}")
     if headers is None:
         headers = {
             "X-Line-Application": self.account.getLineApplication(),
             "User-Agent": self.account.getUserAgent(),
             "X-Line-Access": self.account.getAuthToken(),
         }
     # setting the headers for the transport
     transport.setCustomHeaders(headers)
     # initiating the factory for CompactProtocol
     factory = TCompactProtocolFactory()
     # getting the CompactProtocol
     protocol = factory.getProtocol(transport)
     # initiating a new client using the protocol provided
     return serviceFunc.Client(protocol)
コード例 #2
0
ファイル: content.py プロジェクト: harryjack2017/bm
        async def g(*args, **kwargs):
            if conf.IS_FAILOVER:
                if downgrade:
                    return await f(None, *args, **kwargs)
                else:
                    return None

            res = None
            opened = False
            re_conn = TTornado.TTornadoStreamTransport(conf.CONTENT_SVC['HOST'], conf.CONTENT_SVC['PORT'])

            try:
                re_conn.open()
                opened = True
                tclient = RecommendService.Client(re_conn, TCompactProtocolFactory())
                res = await timeout(f(tclient, *args, **kwargs), TIMEOUT)
            except Exception as e:
                logger.error(f"{kwargs['log_id']} {e}")

                # 降级到Redis中取数据
                if downgrade:
                    res = await timeout(f(None, *args, **kwargs), 1)
            finally:
                if opened:
                    re_conn.close()

            return res
コード例 #3
0
def get_protocol_factory(protocol):
    """
    Returns a protocol factory associated with the string protocol passed in
    as a command line argument to the cross runner

    :param protocol: string
    :return: Protocol factory
    """
    if protocol == "binary":
        return FProtocolFactory(TBinaryProtocolFactory())
    elif protocol == "compact":
        return FProtocolFactory(TCompactProtocolFactory())
    elif protocol == "json":
        return FProtocolFactory(TJSONProtocolFactory())
    else:
        logging.error("Unknown protocol type: %s", protocol)
        sys.exit(1)
コード例 #4
0
ファイル: content.py プロジェクト: harryjack2017/bm
    async def g(*args, **kwargs):
        if conf.IS_FAILOVER:
            return None

        res = None
        opened = False
        di_conn = TTornado.TTornadoStreamTransport(conf.DI_CONTENT_SVC['HOST'], conf.DI_CONTENT_SVC['PORT'])

        try:
            di_conn.open()
            opened = True
            diclient = DIService.Client(di_conn, TCompactProtocolFactory())
            res = await timeout(f(diclient, *args, **kwargs), TIMEOUT)
        except Exception as e:
            logger.error(f"{kwargs['log_id']} {e}")
        finally:
            if opened:
                di_conn.close()

        return res
コード例 #5
0
def main():
    parser = argparse.ArgumentParser(description="Run a tornado python server")
    parser.add_argument('--port', dest='port', default='9090')
    parser.add_argument('--protocol',
                        dest='protocol_type',
                        default="binary",
                        choices="binary, compact, json")
    parser.add_argument('--transport',
                        dest="transport_type",
                        default="stateless",
                        choices="stateless, http")

    args = parser.parse_args()

    if args.protocol_type == "binary":
        protocol_factory = FProtocolFactory(TBinaryProtocolFactory())
    elif args.protocol_type == "compact":
        protocol_factory = FProtocolFactory(TCompactProtocolFactory())
    elif args.protocol_type == "json":
        protocol_factory = FProtocolFactory(TJSONProtocolFactory())
    else:
        logging.error("Unknown protocol type: %s", args.protocol_type)
        sys.exit(1)

    nats_client = NATS()
    options = {"verbose": True, "servers": ["nats://127.0.0.1:4222"]}
    yield nats_client.connect(**options)

    global port
    port = args.port

    handler = FrugalTestHandler()
    subject = "frugal.*.*.rpc.{}".format(args.port)
    processor = Processor(handler)

    if args.transport_type == "stateless":
        server = FNatsServer(nats_client, [subject], processor,
                             protocol_factory)

        # start healthcheck so the test runner knows the server is running
        thread.start_new_thread(healthcheck, (port, ))
        print("Starting {} server...".format(args.transport_type))
        yield server.serve()

    elif args.transport_type == "http":
        factories = {
            'processor': processor,
            'protocol_factory': protocol_factory
        }

        server = Application([(r'/', FHttpHandler, factories)])

        print("Starting {} server...".format(args.transport_type))
        server.listen(port)

    else:
        logging.error("Unknown transport type: %s", args.transport_type)
        sys.exit(1)

    # Setup subscriber, send response upon receipt
    pub_transport_factory = FNatsPublisherTransportFactory(nats_client)
    sub_transport_factory = FNatsSubscriberTransportFactory(nats_client)
    provider = FScopeProvider(pub_transport_factory, sub_transport_factory,
                              protocol_factory)
    global publisher
    publisher = EventsPublisher(provider)
    yield publisher.open()

    @gen.coroutine
    def response_handler(context, event):
        print("received {} : {}".format(context, event))
        preamble = context.get_request_header(PREAMBLE_HEADER)
        if preamble is None or preamble == "":
            logging.error("Client did not provide preamble header")
            return
        ramble = context.get_request_header(RAMBLE_HEADER)
        if ramble is None or ramble == "":
            logging.error("Client did not provide ramble header")
            return
        response_event = Event(Message="Sending Response")
        response_context = FContext("Call")
        global publisher
        global port
        yield publisher.publish_EventCreated(response_context, preamble,
                                             ramble, "response",
                                             "{}".format(port), response_event)
        print("Published event={}".format(response_event))

    subscriber = EventsSubscriber(provider)
    yield subscriber.subscribe_EventCreated("*", "*", "call",
                                            "{}".format(args.port),
                                            response_handler)
コード例 #6
0
 def test_TCompactProtocol(self):
     factory = TCompactProtocolFactory()
     self.verify(self.compact_serialized, factory)