summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-05-31 04:13:35 +0000
committerCoprDistGit <infra@openeuler.org>2023-05-31 04:13:35 +0000
commitb5e5ce04116e527507fa8656a3da2c24e5d4999d (patch)
tree3682e6c1155877b4333bf36e9a49e0a5900e2b91
parent63a4cc27f58a31f66b5978d6e56a9d4b82462b5c (diff)
automatic import of python-grpc-requests
-rw-r--r--.gitignore1
-rw-r--r--python-grpc-requests.spec941
-rw-r--r--sources1
3 files changed, 943 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..88287df 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/grpc_requests-0.1.10.tar.gz
diff --git a/python-grpc-requests.spec b/python-grpc-requests.spec
new file mode 100644
index 0000000..6393f09
--- /dev/null
+++ b/python-grpc-requests.spec
@@ -0,0 +1,941 @@
+%global _empty_manifest_terminate_build 0
+Name: python-grpc-requests
+Version: 0.1.10
+Release: 1
+Summary: grpc for Humans. grpc reflection support client
+License: Apache License 2.0
+URL: https://github.com/wesky93/grpc_requests
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/73/14/ce8787e44e1e320c4efc014652e387a31ee8ae35e01060be6501e0d50cce/grpc_requests-0.1.10.tar.gz
+BuildArch: noarch
+
+Requires: python3-grpcio
+Requires: python3-grpcio-reflection
+Requires: python3-google-api-core
+Requires: python3-cryptography
+Requires: python3-protobuf
+
+%description
+# grpc requests
+
+[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/grpc-requests?style=flat-square)](https://pypi.org/project/grpc-requests)
+[![PyPI](https://img.shields.io/pypi/v/grpc-requests?style=flat-square)](https://pypi.org/project/grpc-requests)
+[![PyPI download month](https://img.shields.io/pypi/dm/grpc-requests?style=flat-square)](https://pypi.org/project/grpc-requests)
+[![codecov](https://codecov.io/gh/spaceone-dev/grpc_requests/branch/master/graph/badge.svg)](https://codecov.io/gh/spaceone-dev/grpc_requests)
+![Views](https://views.whatilearened.today/views/github/spaceone-dev/grpc_requests.svg)
+
+## GRPC for Humans
+
+```python
+from grpc_requests import Client
+
+client = Client.get_by_endpoint("localhost:50051")
+assert client.service_names == ["helloworld.Greeter"]
+
+request_data = {"name": 'sinsky'}
+result = client.request("helloworld.Greeter", "SayHello", request_data)
+print(result) # {"message":"Hello sinsky"}
+
+```
+
+## Features
+
+- supports creating clients easily when connecting to servers implementing grpc reflection
+- supports implementing stub clients for connecting to servers that do not implement reflection
+- support all unary and stream methods
+- supports both TLS and compression connections
+- supports AsyncIO API
+
+## Install
+
+```shell script
+pip install grpc_requests
+```
+
+## Use it like RPC
+
+If your server supports reflection, use the `Client` class:
+
+```python
+from grpc_requests import Client
+
+client = Client.get_by_endpoint("localhost:50051")
+# if you want a TLS connection
+# client = Client.get_by_endpoint("localhost:443",ssl=True)
+# or if you want a compression enabled connection
+# client = Client.get_by_endpoint("localhost:443",compression=grpc.Compression.Gzip)
+assert client.service_names == ["helloworld.Greeter",'grpc.health.v1.Health']
+
+health = client.service('grpc.health.v1.Health')
+assert health.method_names == ('Check', 'Watch')
+
+result = health.Check()
+assert result == {'status': 'SERVING'}
+```
+
+If not, use the `StubClient` class:
+
+```python
+from grpc_requests import StubClient
+from .helloworld_pb2 import Descriptor
+
+service_descriptor = DESCRIPTOR.services_by_name['Greeter'] # or you can just use _GREETER
+
+
+client = StubClient.get_by_endpoint("localhost:50051",service_descriptors=[service_descriptor,])
+assert client.service_names == ["helloworld.Greeter"]
+```
+
+In both cases, the same methods are used to interact with the server.
+
+```python
+greeter = client.service("helloworld.Greeter")
+
+request_data = {"name": 'sinsky'}
+result = greeter.SayHello(request_data)
+results = greeter.SayHelloGroup(request_data)
+
+requests_data = [{"name": 'sinsky'}]
+result = greeter.HelloEveryone(requests_data)
+results = greeter.SayHelloOneByOne(requests_data)
+
+```
+
+## Examples
+
+- [helloworld reflection client](src/examples/helloworld_reflection.py)
+
+### Reflection Client but you can send message by stub
+
+```python
+from grpc_requests import Client
+from helloworld_pb2 import HelloRequest
+
+port = '50051'
+host = "localhost"
+endpoint = f"{host}:{port}"
+
+client = Client.get_by_endpoint(endpoint)
+print(client.service_names) # ["helloworld.Greeter"]
+
+service = "helloworld.Greeter"
+method = 'SayHello'
+
+result = client.unary_unary(service, method, HelloRequest(name='sinsky'))
+print(type(result)) # result is dict Type!!! not Stub Object!
+print(result) # {"message":"Hellow sinsky"}
+
+# or get raw response data
+result = client.unary_unary(service, method, HelloRequest(name='sinsky'),raw_output=True)
+print(type(result)) # HelloReply stub class
+```
+
+### AsyncIO API
+
+```python
+from grpc_requests.aio import AsyncClient
+
+client = AsyncClient("localhost:50051")
+
+health = await client.service('grpc.health.v1.Health')
+assert health.method_names == ('Check', 'Watch')
+
+result = await health.Check()
+assert result == {'status': 'SERVING'}
+
+greeter = await client.service("helloworld.Greeter")
+
+request_data = {"name": 'sinsky'}
+result = await greeter.SayHello(request_data)
+
+results =[x async for x in await greeter.SayHelloGroup(request_data)]
+
+requests_data = [{"name": 'sinsky'}]
+result = await greeter.HelloEveryone(requests_data)
+results = [x async for x in await greeter.SayHelloOneByOne(requests_data)]
+
+```
+
+## Road map
+
+- [x] support no reflection server(Stub Client)
+- [x] support async API!
+- [ ] Document!
+- [ ] pluggable interceptor
+
+## Maintainers
+
+- sinsky - [wesky93](https://github.com/wesky93)
+- Wayne Manselle - [ViridianForge](https://github.com/ViridianForge)
+
+# ChangeLog
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
+and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+## [0.1.10](https://github.com/wesky93/grpc_requests/releases/tag/v0.1.10) - 2023-03-07
+
+## Fixed
+
+- Corrected pin of `protobuf` version in `requirements.txt`
+
+## [0.1.9](https://github.com/wesky93/grpc_requests/releases/tag/v0.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](https://github.com/wesky93/grpc_requests/releases/tag/v0.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](https://github.com/wesky93/grpc_requests/releases/tag/v0.1.7) - 2022-12-16
+
+### Deprecated
+
+- homi dependency, as the project has been archived
+- homi dependent test code
+
+## [0.1.6](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.1.6) - 2022-11-10
+
+### Fixed
+
+- Ignore repeat imports of protobufs and reflecting against a server
+
+## [0.1.3](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.1.3) - 2022-7-14
+
+### Fixed
+
+- remove click
+
+### Issues
+
+- ignore test before deploy
+
+## [0.1.2](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.1.2) - 2022-7-7
+
+## [0.1.1](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.1.1) - 2022-6-13
+
+### Changes
+
+- remove unused package : click #35
+
+## [0.1.0](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.1.0) - 2021-8-21
+
+### Added
+
+- Full TLS connection support
+
+### Fixed
+
+- Ignore reflection if service already registered
+
+### Changed
+
+- Update grpcio version
+
+## [0.0.10](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.0.10) - 2021-2-27
+
+### Fixed
+
+- Fix 3.6 compatibility issue : await is in f-string
+
+## [0.0.9](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.0.9) - 2020-12-25
+
+### Added
+
+- Support AsyncIO API
+
+## [0.0.8](https://github.com/spaceone-dev/grpc_requests/releases/tag/0.0.8) - 2020-11-24
+
+### Added
+
+- Add StubClient
+
+### Fixed
+
+- Bypasss kwargs to base client
+
+## [0.0.7](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.0.7) - 2020-10-4
+
+### Added
+
+- Support Compression
+
+## [0.0.6](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.0.6) - 2020-10-3
+
+### Added
+
+- Support TLS connections
+
+## [0.0.5](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.0.5) - 2020-9-9
+
+### Changed
+
+- Response filled gets original proto field name rather than(before returned lowerCamelCase)
+
+## [0.0.4](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.0.4) - 2020-7-21
+
+## [0.0.3](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.0.3) - 2020-7-21
+
+### Added
+
+- Dynamic request method
+- Service client
+
+## [0.0.2](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.0.2) - 2020-7-20
+
+### Added
+
+- Support all method types
+- Add request test case
+
+## [0.0.1](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.0.1) - 2020-7-20
+
+### Added
+
+- Sync proto using reflection
+- Auto convert request(response) from(to) dict
+- Support unary-unary
+
+
+%package -n python3-grpc-requests
+Summary: grpc for Humans. grpc reflection support client
+Provides: python-grpc-requests
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-grpc-requests
+# grpc requests
+
+[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/grpc-requests?style=flat-square)](https://pypi.org/project/grpc-requests)
+[![PyPI](https://img.shields.io/pypi/v/grpc-requests?style=flat-square)](https://pypi.org/project/grpc-requests)
+[![PyPI download month](https://img.shields.io/pypi/dm/grpc-requests?style=flat-square)](https://pypi.org/project/grpc-requests)
+[![codecov](https://codecov.io/gh/spaceone-dev/grpc_requests/branch/master/graph/badge.svg)](https://codecov.io/gh/spaceone-dev/grpc_requests)
+![Views](https://views.whatilearened.today/views/github/spaceone-dev/grpc_requests.svg)
+
+## GRPC for Humans
+
+```python
+from grpc_requests import Client
+
+client = Client.get_by_endpoint("localhost:50051")
+assert client.service_names == ["helloworld.Greeter"]
+
+request_data = {"name": 'sinsky'}
+result = client.request("helloworld.Greeter", "SayHello", request_data)
+print(result) # {"message":"Hello sinsky"}
+
+```
+
+## Features
+
+- supports creating clients easily when connecting to servers implementing grpc reflection
+- supports implementing stub clients for connecting to servers that do not implement reflection
+- support all unary and stream methods
+- supports both TLS and compression connections
+- supports AsyncIO API
+
+## Install
+
+```shell script
+pip install grpc_requests
+```
+
+## Use it like RPC
+
+If your server supports reflection, use the `Client` class:
+
+```python
+from grpc_requests import Client
+
+client = Client.get_by_endpoint("localhost:50051")
+# if you want a TLS connection
+# client = Client.get_by_endpoint("localhost:443",ssl=True)
+# or if you want a compression enabled connection
+# client = Client.get_by_endpoint("localhost:443",compression=grpc.Compression.Gzip)
+assert client.service_names == ["helloworld.Greeter",'grpc.health.v1.Health']
+
+health = client.service('grpc.health.v1.Health')
+assert health.method_names == ('Check', 'Watch')
+
+result = health.Check()
+assert result == {'status': 'SERVING'}
+```
+
+If not, use the `StubClient` class:
+
+```python
+from grpc_requests import StubClient
+from .helloworld_pb2 import Descriptor
+
+service_descriptor = DESCRIPTOR.services_by_name['Greeter'] # or you can just use _GREETER
+
+
+client = StubClient.get_by_endpoint("localhost:50051",service_descriptors=[service_descriptor,])
+assert client.service_names == ["helloworld.Greeter"]
+```
+
+In both cases, the same methods are used to interact with the server.
+
+```python
+greeter = client.service("helloworld.Greeter")
+
+request_data = {"name": 'sinsky'}
+result = greeter.SayHello(request_data)
+results = greeter.SayHelloGroup(request_data)
+
+requests_data = [{"name": 'sinsky'}]
+result = greeter.HelloEveryone(requests_data)
+results = greeter.SayHelloOneByOne(requests_data)
+
+```
+
+## Examples
+
+- [helloworld reflection client](src/examples/helloworld_reflection.py)
+
+### Reflection Client but you can send message by stub
+
+```python
+from grpc_requests import Client
+from helloworld_pb2 import HelloRequest
+
+port = '50051'
+host = "localhost"
+endpoint = f"{host}:{port}"
+
+client = Client.get_by_endpoint(endpoint)
+print(client.service_names) # ["helloworld.Greeter"]
+
+service = "helloworld.Greeter"
+method = 'SayHello'
+
+result = client.unary_unary(service, method, HelloRequest(name='sinsky'))
+print(type(result)) # result is dict Type!!! not Stub Object!
+print(result) # {"message":"Hellow sinsky"}
+
+# or get raw response data
+result = client.unary_unary(service, method, HelloRequest(name='sinsky'),raw_output=True)
+print(type(result)) # HelloReply stub class
+```
+
+### AsyncIO API
+
+```python
+from grpc_requests.aio import AsyncClient
+
+client = AsyncClient("localhost:50051")
+
+health = await client.service('grpc.health.v1.Health')
+assert health.method_names == ('Check', 'Watch')
+
+result = await health.Check()
+assert result == {'status': 'SERVING'}
+
+greeter = await client.service("helloworld.Greeter")
+
+request_data = {"name": 'sinsky'}
+result = await greeter.SayHello(request_data)
+
+results =[x async for x in await greeter.SayHelloGroup(request_data)]
+
+requests_data = [{"name": 'sinsky'}]
+result = await greeter.HelloEveryone(requests_data)
+results = [x async for x in await greeter.SayHelloOneByOne(requests_data)]
+
+```
+
+## Road map
+
+- [x] support no reflection server(Stub Client)
+- [x] support async API!
+- [ ] Document!
+- [ ] pluggable interceptor
+
+## Maintainers
+
+- sinsky - [wesky93](https://github.com/wesky93)
+- Wayne Manselle - [ViridianForge](https://github.com/ViridianForge)
+
+# ChangeLog
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
+and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+## [0.1.10](https://github.com/wesky93/grpc_requests/releases/tag/v0.1.10) - 2023-03-07
+
+## Fixed
+
+- Corrected pin of `protobuf` version in `requirements.txt`
+
+## [0.1.9](https://github.com/wesky93/grpc_requests/releases/tag/v0.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](https://github.com/wesky93/grpc_requests/releases/tag/v0.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](https://github.com/wesky93/grpc_requests/releases/tag/v0.1.7) - 2022-12-16
+
+### Deprecated
+
+- homi dependency, as the project has been archived
+- homi dependent test code
+
+## [0.1.6](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.1.6) - 2022-11-10
+
+### Fixed
+
+- Ignore repeat imports of protobufs and reflecting against a server
+
+## [0.1.3](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.1.3) - 2022-7-14
+
+### Fixed
+
+- remove click
+
+### Issues
+
+- ignore test before deploy
+
+## [0.1.2](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.1.2) - 2022-7-7
+
+## [0.1.1](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.1.1) - 2022-6-13
+
+### Changes
+
+- remove unused package : click #35
+
+## [0.1.0](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.1.0) - 2021-8-21
+
+### Added
+
+- Full TLS connection support
+
+### Fixed
+
+- Ignore reflection if service already registered
+
+### Changed
+
+- Update grpcio version
+
+## [0.0.10](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.0.10) - 2021-2-27
+
+### Fixed
+
+- Fix 3.6 compatibility issue : await is in f-string
+
+## [0.0.9](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.0.9) - 2020-12-25
+
+### Added
+
+- Support AsyncIO API
+
+## [0.0.8](https://github.com/spaceone-dev/grpc_requests/releases/tag/0.0.8) - 2020-11-24
+
+### Added
+
+- Add StubClient
+
+### Fixed
+
+- Bypasss kwargs to base client
+
+## [0.0.7](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.0.7) - 2020-10-4
+
+### Added
+
+- Support Compression
+
+## [0.0.6](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.0.6) - 2020-10-3
+
+### Added
+
+- Support TLS connections
+
+## [0.0.5](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.0.5) - 2020-9-9
+
+### Changed
+
+- Response filled gets original proto field name rather than(before returned lowerCamelCase)
+
+## [0.0.4](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.0.4) - 2020-7-21
+
+## [0.0.3](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.0.3) - 2020-7-21
+
+### Added
+
+- Dynamic request method
+- Service client
+
+## [0.0.2](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.0.2) - 2020-7-20
+
+### Added
+
+- Support all method types
+- Add request test case
+
+## [0.0.1](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.0.1) - 2020-7-20
+
+### Added
+
+- Sync proto using reflection
+- Auto convert request(response) from(to) dict
+- Support unary-unary
+
+
+%package help
+Summary: Development documents and examples for grpc-requests
+Provides: python3-grpc-requests-doc
+%description help
+# grpc requests
+
+[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/grpc-requests?style=flat-square)](https://pypi.org/project/grpc-requests)
+[![PyPI](https://img.shields.io/pypi/v/grpc-requests?style=flat-square)](https://pypi.org/project/grpc-requests)
+[![PyPI download month](https://img.shields.io/pypi/dm/grpc-requests?style=flat-square)](https://pypi.org/project/grpc-requests)
+[![codecov](https://codecov.io/gh/spaceone-dev/grpc_requests/branch/master/graph/badge.svg)](https://codecov.io/gh/spaceone-dev/grpc_requests)
+![Views](https://views.whatilearened.today/views/github/spaceone-dev/grpc_requests.svg)
+
+## GRPC for Humans
+
+```python
+from grpc_requests import Client
+
+client = Client.get_by_endpoint("localhost:50051")
+assert client.service_names == ["helloworld.Greeter"]
+
+request_data = {"name": 'sinsky'}
+result = client.request("helloworld.Greeter", "SayHello", request_data)
+print(result) # {"message":"Hello sinsky"}
+
+```
+
+## Features
+
+- supports creating clients easily when connecting to servers implementing grpc reflection
+- supports implementing stub clients for connecting to servers that do not implement reflection
+- support all unary and stream methods
+- supports both TLS and compression connections
+- supports AsyncIO API
+
+## Install
+
+```shell script
+pip install grpc_requests
+```
+
+## Use it like RPC
+
+If your server supports reflection, use the `Client` class:
+
+```python
+from grpc_requests import Client
+
+client = Client.get_by_endpoint("localhost:50051")
+# if you want a TLS connection
+# client = Client.get_by_endpoint("localhost:443",ssl=True)
+# or if you want a compression enabled connection
+# client = Client.get_by_endpoint("localhost:443",compression=grpc.Compression.Gzip)
+assert client.service_names == ["helloworld.Greeter",'grpc.health.v1.Health']
+
+health = client.service('grpc.health.v1.Health')
+assert health.method_names == ('Check', 'Watch')
+
+result = health.Check()
+assert result == {'status': 'SERVING'}
+```
+
+If not, use the `StubClient` class:
+
+```python
+from grpc_requests import StubClient
+from .helloworld_pb2 import Descriptor
+
+service_descriptor = DESCRIPTOR.services_by_name['Greeter'] # or you can just use _GREETER
+
+
+client = StubClient.get_by_endpoint("localhost:50051",service_descriptors=[service_descriptor,])
+assert client.service_names == ["helloworld.Greeter"]
+```
+
+In both cases, the same methods are used to interact with the server.
+
+```python
+greeter = client.service("helloworld.Greeter")
+
+request_data = {"name": 'sinsky'}
+result = greeter.SayHello(request_data)
+results = greeter.SayHelloGroup(request_data)
+
+requests_data = [{"name": 'sinsky'}]
+result = greeter.HelloEveryone(requests_data)
+results = greeter.SayHelloOneByOne(requests_data)
+
+```
+
+## Examples
+
+- [helloworld reflection client](src/examples/helloworld_reflection.py)
+
+### Reflection Client but you can send message by stub
+
+```python
+from grpc_requests import Client
+from helloworld_pb2 import HelloRequest
+
+port = '50051'
+host = "localhost"
+endpoint = f"{host}:{port}"
+
+client = Client.get_by_endpoint(endpoint)
+print(client.service_names) # ["helloworld.Greeter"]
+
+service = "helloworld.Greeter"
+method = 'SayHello'
+
+result = client.unary_unary(service, method, HelloRequest(name='sinsky'))
+print(type(result)) # result is dict Type!!! not Stub Object!
+print(result) # {"message":"Hellow sinsky"}
+
+# or get raw response data
+result = client.unary_unary(service, method, HelloRequest(name='sinsky'),raw_output=True)
+print(type(result)) # HelloReply stub class
+```
+
+### AsyncIO API
+
+```python
+from grpc_requests.aio import AsyncClient
+
+client = AsyncClient("localhost:50051")
+
+health = await client.service('grpc.health.v1.Health')
+assert health.method_names == ('Check', 'Watch')
+
+result = await health.Check()
+assert result == {'status': 'SERVING'}
+
+greeter = await client.service("helloworld.Greeter")
+
+request_data = {"name": 'sinsky'}
+result = await greeter.SayHello(request_data)
+
+results =[x async for x in await greeter.SayHelloGroup(request_data)]
+
+requests_data = [{"name": 'sinsky'}]
+result = await greeter.HelloEveryone(requests_data)
+results = [x async for x in await greeter.SayHelloOneByOne(requests_data)]
+
+```
+
+## Road map
+
+- [x] support no reflection server(Stub Client)
+- [x] support async API!
+- [ ] Document!
+- [ ] pluggable interceptor
+
+## Maintainers
+
+- sinsky - [wesky93](https://github.com/wesky93)
+- Wayne Manselle - [ViridianForge](https://github.com/ViridianForge)
+
+# ChangeLog
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
+and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+## [0.1.10](https://github.com/wesky93/grpc_requests/releases/tag/v0.1.10) - 2023-03-07
+
+## Fixed
+
+- Corrected pin of `protobuf` version in `requirements.txt`
+
+## [0.1.9](https://github.com/wesky93/grpc_requests/releases/tag/v0.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](https://github.com/wesky93/grpc_requests/releases/tag/v0.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](https://github.com/wesky93/grpc_requests/releases/tag/v0.1.7) - 2022-12-16
+
+### Deprecated
+
+- homi dependency, as the project has been archived
+- homi dependent test code
+
+## [0.1.6](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.1.6) - 2022-11-10
+
+### Fixed
+
+- Ignore repeat imports of protobufs and reflecting against a server
+
+## [0.1.3](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.1.3) - 2022-7-14
+
+### Fixed
+
+- remove click
+
+### Issues
+
+- ignore test before deploy
+
+## [0.1.2](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.1.2) - 2022-7-7
+
+## [0.1.1](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.1.1) - 2022-6-13
+
+### Changes
+
+- remove unused package : click #35
+
+## [0.1.0](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.1.0) - 2021-8-21
+
+### Added
+
+- Full TLS connection support
+
+### Fixed
+
+- Ignore reflection if service already registered
+
+### Changed
+
+- Update grpcio version
+
+## [0.0.10](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.0.10) - 2021-2-27
+
+### Fixed
+
+- Fix 3.6 compatibility issue : await is in f-string
+
+## [0.0.9](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.0.9) - 2020-12-25
+
+### Added
+
+- Support AsyncIO API
+
+## [0.0.8](https://github.com/spaceone-dev/grpc_requests/releases/tag/0.0.8) - 2020-11-24
+
+### Added
+
+- Add StubClient
+
+### Fixed
+
+- Bypasss kwargs to base client
+
+## [0.0.7](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.0.7) - 2020-10-4
+
+### Added
+
+- Support Compression
+
+## [0.0.6](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.0.6) - 2020-10-3
+
+### Added
+
+- Support TLS connections
+
+## [0.0.5](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.0.5) - 2020-9-9
+
+### Changed
+
+- Response filled gets original proto field name rather than(before returned lowerCamelCase)
+
+## [0.0.4](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.0.4) - 2020-7-21
+
+## [0.0.3](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.0.3) - 2020-7-21
+
+### Added
+
+- Dynamic request method
+- Service client
+
+## [0.0.2](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.0.2) - 2020-7-20
+
+### Added
+
+- Support all method types
+- Add request test case
+
+## [0.0.1](https://github.com/spaceone-dev/grpc_requests/releases/tag/v0.0.1) - 2020-7-20
+
+### Added
+
+- Sync proto using reflection
+- Auto convert request(response) from(to) dict
+- Support unary-unary
+
+
+%prep
+%autosetup -n grpc-requests-0.1.10
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-grpc-requests -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Wed May 31 2023 Python_Bot <Python_Bot@openeuler.org> - 0.1.10-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..184903b
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+0f111e60654e3a8d2082f57b8ba05b6d grpc_requests-0.1.10.tar.gz