8000 Develop by sky-sharma · Pull Request #37 · ClearBlade/python-iot · GitHub
[go: up one dir, main page]

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,12 @@ Note about types of times and binaryData

- If this environment variable is not set, or is set to any unexpected values, then the default types listed previously are used.

- By default calls to some SDK functions cause a REST request to be sent to acquire the Registry API Keys found on the IoTCore UI Registry Details page. Those keys are cached for subsequent operations in order to improve performance. However these caches do not persist if the application is stopped and restarted as would be the case with typical serverless functions (e.g. Google Cloud Functions, AWS Lambda etc.). In order to improve the performance of those functions, the REST call can be prevented by passing the API Keys as environment variables:
1. **REGISTRY_URL**: **string**
2. **REGISTRY_SYSKEY**: **string**
3. **REGISTRY_TOKEN**: **string**

Note about running from source instead of PyPi (pip) module:
Note about running from the source instead of the PyPi (pip) module:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- To temporarily use the source code in this repo instead of the installed PyPi (pip) module, do the following:
Expand Down
72 changes: 43 additions & 29 deletions clearblade/cloud/iot_v1/config_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,11 @@ def _set_admin_clearblade_config(self):
self._admin_config = ClearBladeConfig(system_key=system_key, auth_token=auth_token,
api_url=api_url, project=project)

def _create_regional_config_from_env(self, systemKey:str = None, serviceAccountToken:str = None, url:str = None, region:str = None)-> ClearBladeConfig :
return ClearBladeConfig(system_key=systemKey, auth_token=serviceAccountToken, api_url=url,
region=region, project=self._admin_config.project)


def _create_regional_config(self, regional_json: json = None)-> ClearBladeConfig :
system_key = regional_json['systemKey']
auth_token = regional_json['serviceAccountToken']
Expand All @@ -102,20 +107,25 @@ def _set_regional_config(self, region:str = None, registry:str = None):

if not region or not registry:
raise Exception("Either location or registry name is not provided")

sync_client = SyncClient(clearblade_config=self._admin_config)
request_body = {'region':region,'registry':registry, 'project':self._admin_config.project}
response = sync_client.post(api_name="getRegistryCredentials", is_webhook_folder=False,
request_body=request_body)

if response.status_code != 200:
raise Exception(
f"\n\nRegistry Information not found! Please check if the given registry exists\nProject: {self._admin_config.project}\nRegistry: {registry}\nRegion: {region}"
)

response_json = response.json()
response_json['region'] = region
self._regional_config = self._create_regional_config(regional_json=response_json)

system_key = os.environ.get("REGISTRY_SYSKEY")
registry_token = os.environ.get("REGISTRY_TOKEN")
url = os.environ.get("REGISTRY_URL")
if (system_key and registry_token and url) :
self._regional_config = self._create_regional_config_from_env(systemKey=system_key , serviceAccountToken = registry_token, url = url, region = region)
else :
request_body = {'region':region,'registry':registry, 'project':self._admin_config.project}
sync_client = SyncClient(clearblade_config=self._admin_config)
response = sync_client.post(api_name="getRegistryCredentials", is_webhook_folder=False,
request_body=request_body)
if response.status_code != 200:
raise Exception(
f"\n\nRegistry Information not found! Please check if the given registry exists\nProject: {self._admin_config.project}\nRegistry: {registry}\nRegion: {region}"
)
response_json = response.json()
response_json['region'] = region
self._regional_config = self._create_regional_config(regional_json=response_json)


async def _set_regional_config_async(self, region:str = None, registry:str = None):

Expand All @@ -126,21 +136,25 @@ async def _set_regional_config_async(self, region:str = None, registry:str = Non

if not registry:
registry = self.registry_name

async_client = AsyncClient(clearblade_config=self._admin_config)
request_body = {'region':region,'registry':registry, 'project':self._admin_config.project}
response = await async_client.post(api_name="getRegistryCredentials",
is_webhook_folder=False,
request_body=request_body)

if response.status_code != 200:
raise Exception(
f"\n\nRegistry Information not found! Please check if the given registry exists\nProject: {self._admin_config.project}\nRegistry: {registry}\nRegion: {region}"
)

response_json = response.json()
response_json['region'] = region
self._regional_config = self._create_regional_config(regional_json=response_json)
system_key = os.environ.get("REGISTRY_SYSKEY")
registry_token = os.environ.get("REGISTRY_TOKEN")
url = os.environ.get("REGISTRY_URL")
if (system_key and registry_token) :
self._regional_config = self._create_regional_config_from_env(systemKey=system_key , serviceAccountToken = registry_token, url = url, region = region)
else :
async_client = AsyncClient(clearblade_config=self._admin_config)
request_body = {'region':region,'registry':registry, 'project':self._admin_config.project}
response = await async_client.post(api_name="getRegistryCredentials",
is_webhook_folder=False,
request_body=request_body)

if response.status_code != 200:
raise Exception(
f"\n\nRegistry Information not found! Please check if the given registry exists\nProject: {self._admin_config.project}\nRegistry: {registry}\nRegion: {region}"
)
response_json = response.json()
response_json['region'] = region
self._regional_config = self._create_regional_config(regional_json=response_json)


@property
Expand Down
2 changes: 1 addition & 1 deletion clearblade/cloud/iot_v1/device_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -634,4 +634,4 @@ def from_json(devices_list_json):
if 'nextPageToken' in devices_list_json:
next_page_token = devices_list_json['nextPageToken']

return ListDevicesResponse(devices=devices, next_page_token=next_page_token)
return ListDevicesResponse(devices=devices, next_page_token=next_page_token)
2 changes: 1 addition & 1 deletion clearblade/cloud/iot_v1/devices.py
Original file line number Diff line number Diff line change
Expand Up @@ -490,4 +490,4 @@ async def config_versions_list_async(self,

if response.status_code == 200:
return ListDeviceConfigVersionsResponse.from_json(response.json())
return response
return response
0