Esempio n. 1
0
# -*- coding: utf-8 -*-
from nameko_grpc.entrypoint import Grpc

import empty_pb2
import interop_pb2_grpc
import messages_pb2

grpc = Grpc.implementing(interop_pb2_grpc.TestServiceStub)

_INITIAL_METADATA_KEY = "x-grpc-test-echo-initial"
_TRAILING_METADATA_KEY = "x-grpc-test-echo-trailing-bin"


def _maybe_echo_metadata(servicer_context):
    """Copies metadata from request to response if it is present."""
    invocation_metadata = dict(servicer_context.invocation_metadata())
    if _INITIAL_METADATA_KEY in invocation_metadata:
        initial_metadatum = (
            _INITIAL_METADATA_KEY,
            invocation_metadata[_INITIAL_METADATA_KEY],
        )
        servicer_context.send_initial_metadata((initial_metadatum, ))
    if _TRAILING_METADATA_KEY in invocation_metadata:
        trailing_metadatum = (
            _TRAILING_METADATA_KEY,
            invocation_metadata[_TRAILING_METADATA_KEY],
        )
        servicer_context.set_trailing_metadata((trailing_metadatum, ))


def _maybe_echo_status_and_message(request, servicer_context):
Esempio n. 2
0
import logging

from nameko.events import event_handler
from nameko.rpc import rpc,RpcProxy
from nameko_grpc.entrypoint import Grpc
from products import dependencies, schemas
from .products_pb2 import GetProduct, Product
from .products_pb2_grpc import productsStub
from .products_pb2 import UpdateInventoryResponse, UpdateInventoryResponseDetails

logger = logging.getLogger(__name__)

grpc = Grpc.implementing(productsStub)

class ProductsService:

    name = 'products'

    storage = dependencies.Storage()

    @grpc
    def get_product(self, request, context):
        logger.info("------- Get Products -------- %s", request)
        product = self.storage.get(request.id)
        return Product(**product)

    @rpc
    def list(self):
        products = self.storage.list()
        return schemas.Product(many=True).dump(products).data
Esempio n. 3
0
from exemplo_pb2 import ExampleReply
from exemplo_pb2_grpc import exampleStub

from nameko_grpc.entrypoint import Grpc

grpc = Grpc.implementing(exampleStub)


class ExampleService:
    name = "example"

    @grpc
    def unary_unary(self, request, context):
        message = request.value * (request.multiplier or 1)
        print(message)
        return ExampleReply(message=message)

    @grpc
    def unary_stream(self, request, context):
        message = request.value * (request.multiplier or 1)
        yield ExampleReply(message=message, seqno=1)
        yield ExampleReply(message=message, seqno=2)

    @grpc
    def stream_unary(self, request, context):
        messages = []
        for req in request:
            message = req.value * (req.multiplier or 1)
            messages.append(message)

        return ExampleReply(message=",".join(messages))
Esempio n. 4
0
from nameko_grpc.entrypoint import Grpc
from nameko_sqlalchemy import DatabaseSession
from nameko_grpc.dependency_provider import GrpcProxy
from nameko_grpc.client import Client

from orders.exceptions import NotFound
from orders.models import DeclarativeBase, Order, OrderDetail
from orders.schemas import OrderSchema
from .orders_pb2 import OrderDeletedResponse, OrderDetailResponse, OrderResponse
from .orders_pb2_grpc import ordersStub
from .products_pb2_grpc import productsStub
from .products_pb2 import UpdateInventoryRequest, UpdateInventoryResponse, UpdateInventoryResponseDetails, UpdateProductInventoryRequestDetails, GetProduct
from logging import getLogger
# import grpc

grpc = Grpc.implementing(ordersStub)
log = getLogger(__name__)


class OrdersService:
    name = 'orders'

    db = DatabaseSession(DeclarativeBase)
    event_dispatcher = EventDispatcher()

    products_grpc = GrpcProxy(
        "http://products.examples.svc.cluster.local:50051", productsStub)

    @grpc
    def get_order(self, request, context):
        log.debug("------- Get Order ------- %s", request)
Esempio n. 5
0
# -*- coding: utf-8 -*-
from nameko_grpc.entrypoint import Grpc

from helpers import extract_metadata, instrumented, maybe_echo_metadata, maybe_sleep

import example_pb2_grpc
from example_pb2 import ExampleReply


class Error(Exception):
    pass


grpc = Grpc.implementing(example_pb2_grpc.exampleStub)


class example:
    name = "example"

    @grpc
    @instrumented
    def unary_unary(self, request, context):
        metadata = extract_metadata(context)
        maybe_echo_metadata(context)
        maybe_sleep(request)
        message = request.value * (request.multiplier or 1)
        return ExampleReply(message=message, metadata=metadata)

    @grpc
    @instrumented
    def unary_stream(self, request, context):
Esempio n. 6
0
# -*- coding: utf-8 -*-
"""
Usage: nameko run performance_nameko
"""
import grpc

from nameko_grpc.entrypoint import Grpc

example_pb2, example_pb2_grpc = grpc.protos_and_services("example.proto")
entrypoint = Grpc.implementing(example_pb2_grpc.exampleStub)


class example:
    name = "example"

    @entrypoint
    def unary_unary(self, request, context):
        message = request.value * (request.multiplier or 1)
        return example_pb2.ExampleReply(message=message)

    @entrypoint
    def unary_stream(self, request, context):
        message = request.value * (request.multiplier or 1)
        for i in range(request.response_count):
            yield example_pb2.ExampleReply(message=message, seqno=i + 1)

    @entrypoint
    def stream_unary(self, request, context):
        messages = []
        for index, req in enumerate(request):
            message = req.value * (req.multiplier or 1)
Esempio n. 7
0
# -*- coding: utf-8 -*-
import base64
import json

from nameko.extensions import DependencyProvider

from nameko_grpc.entrypoint import Grpc

import advanced_pb2_grpc
from advanced_pb2 import SimpleReply

grpc = Grpc.implementing(advanced_pb2_grpc.advancedStub)


class BytesEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, bytes):
            return base64.b64encode(obj).decode("utf-8")
        return json.JSONEncoder.default(self, obj)


class ContextData(DependencyProvider):
    def get_dependency(self, worker_ctx):
        return worker_ctx.context_data


class advanced:
    name = "advanced"

    context_data = ContextData()