Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 7c78e1d

Browse files
rajasd27coolneoDasbarvemm1969gargi-ingresssoftware
authored
Regional apis (#11)
* Adds boilerplate to send request response for sending command to clearblade device * Removed an unused import * Converted binary data from string to bytes * Added device data class and shifted the device operations to devicemanager * Further refactored device class to hold all devices specific implementations * Added support for sub folder and improved the definition of sencommandtodevice method * Added test details from rashmis key * Removed the tokens from the config.py and for now reading it from the environment variables. Later we will change this as per requirements * Completed the device data class and added method to create a device * Added httpx as the http library , at present its being used only for async requests but we will change it to sync requests as well * refactored some code in httpclient for reusability * removed requests usage and used httpx in both sync and async requests * Added sync create device calls * Added tests and samples for creating device in async mode * uncommented the tests * Added modify cloud config method * added device config class and returning the same from modify command * Device Delete and Device Get API implementation * New samples added * Implementation for device gateway bind and unbind * Implementation for IOT-579 DevicesSetState * Set state samples * Implementation for IOT-578 DevicesStatesList * Implemetaion for IOT-571 devicesConfigVersionsList * IOT-576 DevicesList * IOT-577 devicesPatch - regional * Deleted DeviceSetState implementation Modification to get device list * WIP : added code to read configs from json file , refactored http clients * fixed an error related to request params * WIP : added code to handle pages in list devices respnse * Completed the config manager which will have all the required configs * WIP : added infrastructure for registry requests * WIP : registry api support * Added class to create a device * Implementation for GetDeviceRegistry * Registry Create and Delete implementation * Fixed timeout issue for Registry create * Implementation for RegistryPatch * WIP :added pager for device list * Completed sync pager manager for list of devices. * Added async pager for device list * WIP adding required response types for device apis * Fixed device config versions request and response classes * Added pages for registry lists and updates samples * Addec CLEARBLADE_REGISTRY as an environment variable for registry * Changed the device states list request and response as per Google interfaces * fixed review comments on the PR * Corrected the samples for devices * Added remainig samples for registry apis * updated some tests * Updated the readme with new steps * WIP : making one single object for httpx client * Removed name from registry creation * used correct gateway_config property * Changed the required request method in samples * Fixed other samples as well * Added a single object for sync and asyc client / add a singleton metadata class * removed hardcoded registry name and setter methods to registry and regional name * Fixes to make the module work with pip and setup.py * Fixed imports to work with setup and pip * Removed one unnecessary print statements * Removed some more print statements * Added fixes to device modify command and states list apis * Updated modify cloud to device config at client.py as well * updated the default value * formatted readme file * updated readme.rst * updated readme.rst * removed the exception class * removed the exception class * Removed the exception from everywhere * updated some samples Co-authored-by: Gargi <[email protected]> Co-authored-by: Das <[email protected]> Co-authored-by: Mandar Barve <[email protected]> Co-authored-by: Mandar Barve <[email protected]> Co-authored-by: gargi-ingresssoftware <[email protected]>
1 parent 87c2147 commit 7c78e1d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+2351
-55
lines changed

README.rst

Lines changed: 8 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,14 @@
11
Python Client for Google Cloud Internet of Things (IoT) Core API
22
================================================================
33

4-
|stable| |pypi| |versions|
5-
6-
`Google Cloud Internet of Things (IoT) Core API`_: is a complete set of tools to connect, process, store, and analyze data both at the edge and in the cloud. The platform consists of scalable, fully-managed cloud services; an integrated software stack for edge/on-premises computing with machine learning capabilities for all your IoT needs.
7-
8-
- `Client Library Documentation`_
9-
- `Product Documentation`_
10-
11-
.. |stable| image:: https://img.shields.io/badge/support-stable-gold.svg
12-
:target: https://github.com/googleapis/google-cloud-python/blob/main/README.rst#stability-levels
13-
.. |pypi| image:: https://img.shields.io/pypi/v/google-cloud-iot.svg
14-
:target: https://pypi.org/project/google-cloud-iot/
15-
.. |versions| image:: https://img.shields.io/pypi/pyversions/google-cloud-iot.svg
16-
:target: https://pypi.org/project/google-cloud-iot/
17-
.. _Google Cloud Internet of Things (IoT) Core API: https://cloud.google.com/iot
18-
.. _Client Library Documentation: https://cloud.google.com/python/docs/reference/cloudiot/latest
19-
.. _Product Documentation: https://cloud.google.com/iot
20-
214
Quick Start
225
-----------
236

247
In order to use this library, you first need to go through the following steps:
258

26-
1. `Select or create a Cloud Platform project.`_
27-
2. `Enable billing for your project.`_
28-
3. `Enable the Google Cloud Internet of Things (IoT) Core API.`_
29-
4. `Setup Authentication.`_
30-
31-
.. _Select or create a Cloud Platform project.: https://console.cloud.google.com/project
32-
.. _Enable billing for your project.: https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project
33-
.. _Enable the Google Cloud Internet of Things (IoT) Core API.: https://cloud.google.com/iot
34-
.. _Setup Authentication.: https://googleapis.dev/python/google-api-core/latest/auth.html
9+
1. set an environment variable CLEARBLADE_CONFIGURATION which should point to your service account json file.
10+
2. set an environment variable CLEARBLADE_REGISTRY which should be the name of registry we want to work upon.
11+
3. set an environment variable CLEARBLADE_REGION which should point to the region.
3512

3613
Installation
3714
~~~~~~~~~~~~
@@ -50,7 +27,7 @@ dependencies.
5027
Code samples and snippets
5128
~~~~~~~~~~~~~~~~~~~~~~~~~
5229

53-
Code samples and snippets live in the `samples/` folder.
30+
Code samples and snippets live in the `samples/clearblade` folder.
5431

5532

5633
Supported Python Versions
@@ -80,7 +57,6 @@ Mac/Linux
8057
pip install virtualenv
8158
virtualenv <your-env>
8259
source <your-env>/bin/activate
83-
<your-env>/bin/pip install google-cloud-iot
8460
8561
8662
Windows
@@ -91,17 +67,12 @@ Windows
9167
pip install virtualenv
9268
virtualenv <your-env>
9369
<your-env>\Scripts\activate
94-
<your-env>\Scripts\pip.exe install google-cloud-iot
9570
9671
Next Steps
9772
~~~~~~~~~~
9873

99-
- Read the `Client Library Documentation`_ for Google Cloud Internet of Things (IoT) Core API
100-
to see other available methods on the client.
101-
- Read the `Google Cloud Internet of Things (IoT) Core API Product documentation`_ to learn
102-
more about the product and see How-to Guides.
103-
- View this `README`_ to see the full list of Cloud
104-
APIs that we cover.
74+
- clone the github repository.
75+
76+
- and execute the setup.py file like , python setup.py install.
10577

106-
.. _Google Cloud Internet of Things (IoT) Core API Product documentation: https://cloud.google.com/iot
107-
.. _README: https://github.com/googleapis/google-cloud-python/blob/main/README.rst
78+
- mostly if you change you imports from from google.cloud to clearblade.cloud everything else should work.
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
from .client import DeviceManagerClient, DeviceManagerAsyncClient
2+
from .device_types import *
3+
from .registry_types import *
4+
from .pagers import *
5+
6+
__all__ = ("DeviceManagerClient",
7+
"DeviceManagerAsyncClient",
8+
"Device",
9+
"DeviceState",
10+
"DeviceConfig",
11+
"SendCommandToDeviceRequest",
12+
"CreateDeviceRequest",
13+
"ModifyCloudToDeviceConfigRequest",
14+
"DeleteDeviceRequest",
15+
"GetDeviceRequest",
16+
"BindDeviceToGatewayRequest",
17+
"UnBindDeviceToGatewayRequest",
18+
"ListDeviceStatesRequest",
19+
"ListDeviceStatesResponse",
20+
"ListDeviceConfigVersionsRequest",
21+
"ListDeviceConfigVersionsResponse",
22+
"UpdateDeviceRequest",
23+
"ListDevicesRequest",
24+
"ListDevicesResponse",
25+
"EventNotificationConfig",
26+
"DeviceRegistry",
27+
"CreateDeviceRegistryRequest",
28+
"UpdateDeviceRegistryRequest",
29+
"GetDeviceRegistryRequest",
30+
"DeleteDeviceRegistryRequest",
31+
"ListDeviceRegistriesRequest",
32+
"ListDeviceRegistriesResponse",
33+
"ListDeviceRegistryPager",
34+
"ListDeviceRegistriesAsyncPager",
35+
"ListDevicesPager",
36+
"ListDevicesAsyncPager")

clearblade/cloud/iot_v1/client.py

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
from .devices import *
2+
from .registry import *
3+
from .device_types import *
4+
from .registry_types import *
5+
6+
class DeviceManagerClient():
7+
8+
def send_command_to_device(self,request:SendCommandToDeviceRequest):
9+
cb_device_manager = ClearBladeDeviceManager()
10+
return cb_device_manager.send_command(request)
11+
12+
def create_device(self, request):
13+
cb_device_manager = ClearBladeDeviceManager()
14+
return cb_device_manager.create(request=request)
15+
16+
def modify_cloud_to_device_config(self, request: ModifyCloudToDeviceConfigRequest,
17+
name: str = None,
18+
version_to_update = "",
19+
binary_data:bytes = None):
20+
21+
cb_device_manager = ClearBladeDeviceManager()
22+
return cb_device_manager.modify_cloud_device_config(request=request,
23+
name=name,
24+
version_to_update=version_to_update,
25+
binary_data=binary_data)
26+
27+
def delete_device(self, request):
28+
cb_device_manager = ClearBladeDeviceManager()
29+
return cb_device_manager.delete(request=request)
30+
31+
def get_device(self, request):
32+
cb_device_manager = ClearBladeDeviceManager()
33+
return cb_device_manager.get(request=request)
34+
35+
def bind_device_to_gateway(self, request : BindDeviceToGatewayRequest):
36+
cb_device_manager = ClearBladeDeviceManager()
37+
return cb_device_manager.bindGatewayToDevice(request=request)
38+
39+
def unbind_device_from_gateway(self, request : UnbindDeviceFromGatewayRequest):
40+
cb_device_manager = ClearBladeDeviceManager()
41+
return cb_device_manager.unbindGatewayFromDevice(request=request)
42+
43+
def list_device_states(self, request : ListDeviceStatesRequest):
44+
cb_device_manager = ClearBladeDeviceManager()
45+
return cb_device_manager.states_list(request=request)
46+
47+
def list_device_config_versions(self, request : ListDeviceConfigVersionsRequest):
48+
cb_device_manager = ClearBladeDeviceManager()
49+
return cb_device_manager.config_versions_list(request=request)
50+
51+
def list_devices(self, request : ListDevicesRequest):
52+
cb_device_manager = ClearBladeDeviceManager()
53+
return cb_device_manager.list(request=request)
54+
55+
def update_device(self, request : UpdateDeviceRequest):
56+
cb_device_manager = ClearBladeDeviceManager()
57+
return cb_device_manager.update(request=request)
58+
59+
def list_device_registries(self, request: ListDeviceRegistriesRequest):
60+
cb_registry_manager = ClearBladeRegistryManager()
61+
return cb_registry_manager.list(request=request)
62+
63+
def get_device_registry(self, request=GetDeviceRegistryRequest):
64+
cb_registry_manager = ClearBladeRegistryManager()
65+
return cb_registry_manager.get(request=request)
66+
67+
def create_device_registry(self, request=CreateDeviceRegistryRequest):
68+
cb_registry_manager = ClearBladeRegistryManager()
69+
return cb_registry_manager.create(request=request)
70+
71+
def delete_device_registry(self, request=DeleteDeviceRegistryRequest):
72+
cb_registry_manager = ClearBladeRegistryManager()
73+
return cb_registry_manager.delete(request=request)
74+
75+
def update_device_registry(self, request=UpdateDeviceRegistryRequest):
76+
cb_registry_manager = ClearBladeRegistryManager()
77+
return cb_registry_manager.patch(request=request)
78+
79+
class DeviceManagerAsyncClient():
80+
81+
async def send_command_to_device(self, request:SendCommandToDeviceRequest):
82+
cb_device_manager = ClearBladeDeviceManager()
83+
return await cb_device_manager.send_command_async(request)
84+
85+
async def create_device(self, request):
86+
cb_device_manager = ClearBladeDeviceManager()
87+
return await cb_device_manager.create_async(request)
88+
89+
async def modify_cloud_to_device_config(self, request: ModifyCloudToDeviceConfigRequest,
90+
name: str = None,
91+
version_to_update = "",
92+
binary_data:bytes = None):
93+
94+
cb_device_manager = ClearBladeDeviceManager()
95+
return await cb_device_manager.modify_cloud_device_config_async(request=request,
96+
name=name,
97+
version_to_update=version_to_update,
98+
binary_data=binary_data)
99+
100+
async def delete_device(self, request):
101+
cb_device_manager = ClearBladeDeviceManager()
102+
return await cb_device_manager.delete_async(request=request)
103+
104+
async def get_device(self, request):
105+
cb_device_manager = ClearBladeDeviceManager()
106+
return await cb_device_manager.get_async(request=request)
107+
108+
async def bind_device_to_gateway(self, request : BindDeviceToGatewayRequest):
109+
cb_device_manager = ClearBladeDeviceManager()
110+
return await cb_device_manager.bindGatewayToDevice_async(request=request)
111+
112+
async def unbind_device_from_gateway(self, request : UnbindDeviceFromGatewayRequest):
113+
cb_device_manager = ClearBladeDeviceManager()
114+
return await cb_device_manager.unbindGatewayFromDevice_async(request=request)
115+
116+
async def list_device_states(self, request : ListDeviceStatesRequest):
117+
cb_device_manager = ClearBladeDeviceManager()
118+
return await cb_device_manager.states_list_async(request=request)
119+
120+
async def list_device_config_versions(self, request : ListDeviceConfigVersionsRequest):
121+
cb_device_manager = ClearBladeDeviceManager()
122+
return await cb_device_manager.config_versions_list_async(request=request)
123+
124+
async def list_devices(self, request : ListDevicesRequest):
125+
cb_device_manager = ClearBladeDeviceManager()
126+
return await cb_device_manager.list_async(request=request)
127+
128+
async def update_device(self, request : UpdateDeviceRequest):
129+
cb_device_manager = ClearBladeDeviceManager()
130+
return await cb_device_manager.update_async(request=request)
131+
132+
async def list_device_registries(self, request: ListDeviceRegistriesRequest):
133+
cb_registry_manager = ClearBladeRegistryManager()
134+
return await cb_registry_manager.list_async(request=request)
135+
136+
async def get_device_registry(self, request=GetDeviceRegistryRequest):
137+
cb_registry_manager = ClearBladeRegistryManager()
138+
return await cb_registry_manager.get_async(request=request)
139+
140+
async def create_device_registry(self, request=CreateDeviceRegistryRequest):
141+
cb_registry_manager = ClearBladeRegistryManager()
142+
return await cb_registry_manager.create_async(request=request)
143+
144+
async def delete_device_registry(self, request=DeleteDeviceRegistryRequest):
145+
cb_registry_manager = ClearBladeRegistryManager()
146+
return await cb_registry_manager.delete_async(request=request)
147+
148+
async def update_device_registry(self, request=UpdateDeviceRegistryRequest):
149+
cb_registry_manager = ClearBladeRegistryManager()
150+
return await cb_registry_manager.patch_async(request=request)

clearblade/cloud/iot_v1/config.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
class ClearBladeConfig:
2+
def __init__(self, system_key:str = None,
3+
auth_token:str = None,
4+
api_url:str = None,
5+
region:str = None,
6+
project:str = None ) -> None:
7+
self._system_key = system_key
8+
self._auth_token = auth_token
9+
self._api_url = api_url
10+
self._region = region
11+
self._project = project
12+
13+
@property
14+
def system_key(self):
15+
return self._system_key
16+
17+
@property
18+
def token(self):
19+
return self._auth_token
20+
21+
@property
22+
def api_url(self):
23+
return self._api_url
24+
25+
@property
26+
def project(self):
27+
return self._project
28+
29+
@property
30+
def region(self):
31+
return self._region

0 commit comments

Comments
 (0)