https://github.com/v1c77/py_grpc_validator
validator for python grpc service request.
https://github.com/v1c77/py_grpc_validator
grpc proto python validate validator
Last synced: 3 months ago
JSON representation
validator for python grpc service request.
- Host: GitHub
- URL: https://github.com/v1c77/py_grpc_validator
- Owner: v1c77
- License: mit
- Created: 2018-09-13T11:33:22.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2018-10-10T05:41:42.000Z (over 7 years ago)
- Last Synced: 2024-11-16T04:31:01.865Z (over 1 year ago)
- Topics: grpc, proto, python, validate, validator
- Language: Python
- Homepage:
- Size: 49.8 KB
- Stars: 5
- Watchers: 3
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.RST
- License: LICENSE
Awesome Lists containing this project
README
python grpc validator
~~~~~~~~~~~~~~~~~~~~~
plugin of validate request field for python grpc server.
.. image:: https://travis-ci.com/v1c77/py_grpc_validator.svg?branch=master
:target: https://travis-ci.com/v1c77/py_grpc_validator
TODO:
- type hint for different field type.(such as only string field can do
a string length check.)
- test case & Makefile.
- a cli to help protoc with `validator.proto`.
- anymore bugs or improves?
How To
######
1. install
.. code-block:: bash
pip install grpc-proto-validator
2. copy **validator.proto** to your project proto path and do protoc.(TODO a
cli help to copy or build proto.)
The **validator.proto** is included in this package, you can find it in
python site-packages path.
A example on how to generate the grpc files:
write grpc request message like:
.. code-block:: proto
message HelloRequest {
string name = 1 [(validator.field) = {string_not_empty: True}];
int32 age = 2 [(validator.field) = {int_gt: 50, int_lt: 100}];
message Child {
string name = 1 [(validator.field) = {length_eq: 4}];
float weight = 2 [(validator.field) = {float_gt: 60.4, float_lt: 100}];
}
Child child = 3 [(validator.field) = {msg_exists: True}];
Dau dau = 4;
string categray = 5;
}
compile:
.. code-block:: bash
$ python -m grpc_tools.protoc \
--proto_path={/path/to/validator/proto} \
--proto_path={/path/to/your/project/proto} \
--python_out={/path/to/project/src} \
--grpc_python_out={/path/to/project/src} \
path/to/your.proto
3. change your service and \*_pb2 code.
To avoid protobuf import error, change one line in the generated
python file(like `hello_bro_pb2.py`).
from:
.. code-block:: python
import validator_pb2 as validator__pb2
to:
.. code-block:: python
import grpc_proto_validator.validator_pb2 as validator__pb2.
Then create service with validator:
.. code-block:: python
import six
from grpc_validator.validator import ValidateMetaclass
class YourService(six.with_metaclass(ValidateMetaclass,
YourService_pb2_grpc.YourServiceServer)):
def behaviour1(self, request, context)
...
Also, you can select individual service handler to do the field check:
.. code-block:: python
from grpc_validator.validator import validator_wrap
class YourService(YourService_pb2_grpc.YourServiceServer):
def behaviour(self, request, context):
"""request will not be validated."""
...
@validator_wrap
def behaviour2(self, request, context):
...
Notice
######
Someone has used go-proto-validator_ before will notice
that I almost reuse its proto file which make it easier
to co-work with our golang service team.
But please don't mix these two proto files.
**!!!THEY ARE NOT IN COMMON USE!!!**
Any help or idea is favourably receive. Please just make a issue_.
LICENSE
=======
MIT_.
.. _ecosystem: https://github.com/grpc-ecosystem/go-grpc-middleware/tree/master/validator
.. _go-proto-validator: https://github.com/mwitkow/go-proto-validators
.. _issue: https://github.com/v1c77/py_grpc_validator/issues/new
.. _MIT: https://github.com/v1c77/py_grpc_validator/blob/master/LICENSE