grpc for Humans. grpc reflection support client
Project description
grpc_requests
GRPC for Humans
Leverage reflection to interact with GRPC in a familiar manner for users of the requests library.
from grpc_requests import Client
client = Client.get_by_endpoint("localhost:50051")
assert client.service_names == ["helloworld.Greeter"]
request_data = {"name": "sinsky"}
say_hello_response = client.request("helloworld.Greeter", "SayHello", request_data)
assert say_hello_response == {"message":"Hello sinsky!"}
Features
- Create a client easily when connecting to servers implementing grpc reflection
- Still support creating a client from stubs when reflection isn't available
- All unary and stream methods supported
- TLS and compression connections supported
- AsyncIO API supported
Install
pip install grpc_requests
Usage
In short:
Instantiate a client using the URL of a GRPC server and any authentication credentials you may need. If the server utilizes SSL (and it probably does) make sure to toggle that flag.
from grpc_requests import Client
metadata = [("authorization", "bearer my.cool.jwt")]
client = Client.get_by_endpoint("cool.servers.arecool:443", ssl=True, metadata=metadata)
The examples page provides more thorough examples of usage scenarioes, and the unit tests are also a useful reference point.
Contributing
Contributions from the community are welcomed and greatly appreciated.
Before opening a PR, tests.sh can be used to ensure the contribution passes linting and unit test checks.
PRs should be targeted to merge with the develop
branch. When opening a PR,
please assign it to a maintainer for review. The maintainers will take it from
there.
Questions, Comments, Issues?
For questions, please start a conversation on the discussions page!
For feature requests or bugs, please open an issue and assign it the appropriate tag.
Maintainers
- sinsky - wesky93
- Wayne Manselle - ViridianForge
ChangeLog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.1.15 - 2024-02-17
Added
- Add methods to return FileDescriptors and their transistive dependencies as requested by either a name or symbol
- Add option to skip automatic checking of method availability
Deprecated
- Due to the possibility of transient dependencies being missed, or other name or symbol collisions, methods to access singular FileDescriptors are deprecated and will be removed in version 0.1.17
- The method to retrieve fields of a method's descriptor input type alone will be removed in version 0.1.17
0.1.14 - 2024-01-06
Added
- MethodMetaData accessible to clients
- MethodDescriptors accessible via MethodMetaData
- When using ReflectionClients, FileDescriptors accessible by name and symbol
- New examples documented
0.1.13 - 2023-12-03
Added
- Added channel interceptors for standard and async clients
Fixed
- Refactored how methods and services are added to description pool to better avoid cases where FileDescriptors may be added twice.
0.1.12 - 2023-11-26
Added
- Method to print out a generic descriptor added to utils collection
- Helper methods to print out a method's request and responses in a human readable format
Changed
- Documentation revamped
- Version checks to avoid using deprecated methods added to async client
Fixed
- Include
requirements.txt
in build manifest
Deprecated
- Method to retrieve fields for the descriptor of a method's input type.
Added
0.1.11 - 2023-10-05
Added
- Method to retrieve fields for the descriptor of a method's input type.
Changes
- Updates to minimum versons of requirements to address vulnerabilities
0.1.10 - 2023-03-07
Fixed
- Corrected pin of
protobuf
version inrequirements.txt
0.1.9 - 2023-02-14
Changes
- Reimplementation of test case framework
- Restoration of reflection client test cases
- Updates to continuous integration pipeline
0.1.8 - 2023-01-24
Changes
- Update project and dev dependencies to versions that require Python >= 3.7
- Update project documentation and examples
0.1.7 - 2022-12-16
Deprecated
- homi dependency, as the project has been archived
- homi dependent test code
0.1.6 - 2022-11-10
Fixed
- Ignore repeat imports of protobufs and reflecting against a server
0.1.3 - 2022-7-14
Fixed
- remove click
Issues
- ignore test before deploy
0.1.2 - 2022-7-7
0.1.1 - 2022-6-13
Changes
- remove unused package : click #35
0.1.0 - 2021-8-21
Added
- Full TLS connection support
Fixed
- Ignore reflection if service already registered
Changed
- Update grpcio version
0.0.10 - 2021-2-27
Fixed
- Fix 3.6 compatibility issue : await is in f-string
0.0.9 - 2020-12-25
Added
- Support AsyncIO API
0.0.8 - 2020-11-24
Added
- Add StubClient
Fixed
- Bypasss kwargs to base client
0.0.7 - 2020-10-4
Added
- Support Compression
0.0.6 - 2020-10-3
Added
- Support TLS connections
0.0.5 - 2020-9-9
Changed
- Response filled gets original proto field name rather than(before returned lowerCamelCase)
0.0.4 - 2020-7-21
0.0.3 - 2020-7-21
Added
- Dynamic request method
- Service client
0.0.2 - 2020-7-20
Added
- Support all method types
- Add request test case
0.0.1 - 2020-7-20
Added
- Sync proto using reflection
- Auto convert request(response) from(to) dict
- Support unary-unary
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for grpc_requests-0.1.15-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cbdd16b096c3aa60ee514aa82be5be8d2ecd40c8dbc2c405475356684777b593 |
|
MD5 | 05b485d0ad132066b0e3c5f3fc86b335 |
|
BLAKE2b-256 | e060ac100e092bb5fe6cfd7ba7be83d8ce94b90564fede171a941e19455c6d2e |