-
Notifications
You must be signed in to change notification settings - Fork 4
Regional apis #6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
2c65982
3e34a7c
c0ecbf3
e78a050
ea2c2fd
9da32cf
f17b78f
520381a
b010d85
e1306db
28218b3
8bbf744
4bf22db
f12d5a1
b028254
6790b5e
9f6f283
c4701e1
fa411f8
6dde041
117da03
396a2a7
fbb7ef3
496716a
f95b23d
4da946c
8f11a04
8b9a5d0
c7ef444
6fe9f46
5896cc6
216b3b7
0f66d78
e1fea7c
c565e2c
af31088
86e36a7
ba7c865
16500ed
d419073
adcb944
26d1d24
5db8238
ca08c50
8d357b9
63ec49a
9e0c794
b2c8408
6dda739
86da177
bf74b75
c6963a8
d207af8
001a115
fedec31
ca03ca1
38c7254
81f09e6
538cdc6
68a93b0
f3a9f65
7770731
f96f5e5
71c9b99
eff149b
37af7d0
79e6f7f
c37dd7a
e10f08f
b8b8f1b
ebc6dc6
bad8825
8d1f5dc
59315d7
90282db
64986ff
e8507a2
0cbbee7
7ec7865
4d0d363
520e548
c529cdb
8f96bfa
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,123 @@ | ||
from config import ClearBladeConfig | ||
from exceptions import UnConfiguredEnvironment | ||
from http_client import SyncClient, AsyncClient | ||
import os | ||
import json | ||
|
||
class ClearBladeConfigManager: | ||
def __init__(self) -> None: | ||
self._admin_config:ClearBladeConfig = None | ||
self._regional_config:ClearBladeConfig = None | ||
self._region_name:str = "us-central1" | ||
self._registry_name:str = None | ||
|
||
def _set_admin_clearblade_config(self): | ||
if self._admin_config: | ||
return | ||
|
||
service_account_file_path = os.environ.get("CLEARBLADE_CONFIGURATION") | ||
if not service_account_file_path: | ||
raise UnConfiguredEnvironment() | ||
|
||
service_account_data = None | ||
#parse the file and get all te required details. | ||
with open(service_account_file_path, mode='r') as service_account_file: | ||
service_account_data = json.load(service_account_file) | ||
|
||
if service_account_data is None: | ||
#TODO: raise exception | ||
return None | ||
|
||
system_key = service_account_data['systemKey'] | ||
auth_token = service_account_data['token'] | ||
api_url = service_account_data['url'] | ||
project = service_account_data['project'] | ||
|
||
self._admin_config = ClearBladeConfig(system_key=system_key, auth_token=auth_token, | ||
api_url=api_url, project=project) | ||
|
||
def _create_regional_config(self, regional_json: json = None)-> ClearBladeConfig : | ||
system_key = regional_json['systemKey'] | ||
auth_token = regional_json['serviceAccountToken'] | ||
api_url = regional_json['url'] | ||
region = regional_json['region'] | ||
|
||
return ClearBladeConfig(system_key=system_key, auth_token=auth_token, api_url=api_url, | ||
region=region, project=self._admin_config.project) | ||
|
||
def _set_regional_config(self, region:str = None, registry:str = None): | ||
self._set_admin_clearblade_config() | ||
|
||
if not region: | ||
region = self._region_name | ||
|
||
if not registry: | ||
registry = self.registry_name | ||
|
||
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: | ||
#TODO: raise some exceptions | ||
return None | ||
|
||
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): | ||
|
||
self._set_admin_clearblade_config() | ||
|
||
if not region: | ||
region = self._region_name | ||
|
||
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) | ||
print(response) | ||
gargi-ingresssoftware marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
||
if response.status_code != 200: | ||
#TODO: raise some exceptions | ||
return None | ||
|
||
response_json = response.json() | ||
response_json['region'] = region | ||
self._regional_config = self._create_regional_config(regional_json=response_json) | ||
|
||
|
||
@property | ||
def admin_config(self): | ||
if not self._admin_config: | ||
self._set_admin_clearblade_config() | ||
|
||
return self._admin_config | ||
|
||
@property | ||
def regional_config(self): | ||
if not self._regional_config: | ||
self._set_regional_config() | ||
|
||
return self._regional_config | ||
|
||
@property | ||
async def regional_config_async(self): | ||
if not self._regional_config: | ||
await self._set_regional_config_async() | ||
|
||
return self._regional_config | ||
|
||
@property | ||
def registry_name(self): | ||
return self._registry_name | ||
|
||
@registry_name.setter | ||
def registry_name(self, registry_name): | ||
self._registry_name = registry_name |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,6 @@ | ||
from http_client import SyncClient, AsyncClient | ||
from config import ClearBladeConfig | ||
import os | ||
from exceptions import UnConfiguredEnvironment | ||
import json | ||
from config_manager import ClearBladeConfigManager | ||
|
||
class Device(): | ||
""" | ||
|
@@ -327,84 +325,8 @@ class ClearBladeDeviceManager(): | |
|
||
def __init__(self) -> None: | ||
#create the ClearBladeConfig object | ||
self._admin_cb_config = None | ||
self._regional_cb_config = None | ||
|
||
def _get_admin_clearblade_config(self): | ||
if self._admin_cb_config: | ||
return self._admin_cb_config | ||
|
||
service_account_file_path = os.environ.get("CLEARBLADE_CONFIGURATION") | ||
if not service_account_file_path: | ||
raise UnConfiguredEnvironment() | ||
|
||
service_account_data = None | ||
#parse the file and get all te required details. | ||
with open(service_account_file_path, mode='r') as service_account_file: | ||
service_account_data = json.load(service_account_file) | ||
|
||
if service_account_data is None: | ||
#TODO: raise exception | ||
return None | ||
|
||
system_key = service_account_data['systemKey'] | ||
auth_token = service_account_data['token'] | ||
api_url = service_account_data['url'] | ||
project = service_account_data['project'] | ||
|
||
self._admin_cb_config = ClearBladeConfig(system_key=system_key, auth_token=auth_token, | ||
api_url=api_url, project=project) | ||
|
||
return self._admin_cb_config | ||
|
||
def _create_regional_config(self, regional_json: json = None)-> ClearBladeConfig : | ||
system_key = regional_json['systemKey'] | ||
auth_token = regional_json['serviceAccountToken'] | ||
api_url = regional_json['url'] | ||
region = regional_json['region'] | ||
|
||
return ClearBladeConfig(system_key=system_key, auth_token=auth_token, api_url=api_url, | ||
region=region, project=self._admin_cb_config.project) | ||
|
||
def _fetch_regional_config(self, region:str = None, registry:str = None): | ||
if self._regional_cb_config: | ||
return self._regional_cb_config | ||
|
||
self._admin_cb_config = self._get_admin_clearblade_config() | ||
|
||
sync_client = SyncClient(clearblade_config=self._admin_cb_config) | ||
request_body = {'region':region,'registry':registry, 'project':self._admin_cb_config.project} | ||
response = sync_client.post(api_name="getRegistryCredentials", is_webhook_folder=False, request_body=request_body) | ||
print(response) | ||
|
||
if response.status_code != 200: | ||
#TODO: raise some exceptions | ||
return None | ||
|
||
response_json = response.json() | ||
response_json['region'] = region | ||
self._regional_cb_config = self._create_regional_config(regional_json=response_json) | ||
|
||
async def _fetch_regional_config_async(self, region:str = None, registry:str = None): | ||
if self._regional_cb_config: | ||
return self._regional_cb_config | ||
|
||
self._admin_cb_config = self._get_admin_clearblade_config() | ||
|
||
async_client = AsyncClient(clearblade_config=self._admin_cb_config) | ||
request_body = {'region':region,'registry':registry, 'project':self._admin_cb_config.project} | ||
response = await async_client.post(api_name="getRegistryCredentials", | ||
is_webhook_folder=False, | ||
request_body=request_body) | ||
print(response) | ||
|
||
if response.status_code != 200: | ||
#TODO: raise some exceptions | ||
return None | ||
|
||
response_json = response.json() | ||
response_json['region'] = region | ||
self._regional_cb_config = self._create_regional_config(regional_json=response_json) | ||
self._config_manager = ClearBladeConfigManager() | ||
self._config_manager.registry_name = "gargi_python" | ||
|
||
|
||
def _prepare_for_send_command(self, | ||
request: SendCommandToDeviceRequest, | ||
|
@@ -471,8 +393,7 @@ def send_command(self, | |
subfolder: str = None): | ||
|
||
params, body = self._prepare_for_send_command(request, name, binary_data, subfolder) | ||
self._fetch_regional_config(region="us-central1", registry="gargi_python") | ||
sync_client = SyncClient(clearblade_config=self._regional_cb_config) | ||
sync_client = SyncClient(clearblade_config=self._config_manager.regional_config) | ||
return sync_client.post(api_name="cloudiot_devices", request_params=params, request_body=body) | ||
|
||
async def send_command_async(self, | ||
|
@@ -482,8 +403,7 @@ async def send_command_async(self, | |
subfolder: str = None ): | ||
|
||
params, body = self._prepare_for_send_command(request, name, binary_data, subfolder) | ||
await self._fetch_regional_config_async(region="us-central1", registry="gargi_python") | ||
async_client = AsyncClient(clearblade_config=self._fetch_regional_config) | ||
async_client = AsyncClient(clearblade_config=await self._config_manager.regional_config_async) | ||
return await async_client.post(api_name="cloudiot_devices", | ||
request_params=params, | ||
request_body=body) | ||
|
@@ -492,8 +412,7 @@ def create(self, request: CreateDeviceRequest, | |
parent: str = None, | ||
device: Device = None) -> Device: | ||
body = self._create_device_body(request.device) | ||
self._fetch_regional_config(region="us-central1", registry="gargi_python") | ||
sync_client = SyncClient(clearblade_config=self._regional_cb_config) | ||
sync_client = SyncClient(clearblade_config=self._config_manager.regional_config) | ||
response = sync_client.post(api_name="cloudiot_devices", | ||
request_body=body) | ||
|
||
|
@@ -508,9 +427,8 @@ async def create_async(self, request: CreateDeviceRequest, | |
device: Device = None) -> Device: | ||
|
||
body = self._create_device_body(request.device) | ||
await self._fetch_regional_config_async(region="us-central1", registry="gargi_python") | ||
async_client = AsyncClient(clearblade_config=self._regional_cb_config) | ||
response = await async_client.post(request_body=body) | ||
async_client = AsyncClient(clearblade_config= await self._config_manager.regional_config_async) | ||
response = await async_client.post(api_name="cloudiot_devices", request_body=body) | ||
|
||
if response.status_code == 200: | ||
return self._create_device_from_response(response.json()) | ||
|
@@ -521,10 +439,11 @@ def modify_cloud_device_config(self, | |
name:str = None, | ||
version_to_update : int = None, | ||
binary_data: bytes = None): | ||
sync_client = SyncClient() | ||
params, body = self._prepare_modify_cloud_config_device(request=request, name=name, | ||
binary_data=binary_data, version_to_update=version_to_update) | ||
response = sync_client.post(request_params=params, request_body=body) | ||
binary_data=binary_data, | ||
version_to_update=version_to_update) | ||
sync_client = SyncClient(clearblade_config=self._config_manager.regional_config) | ||
response = sync_client.post(api_name="cloudiot_devices", request_params=params, request_body=body) | ||
|
||
if response.status_code == 200: | ||
return self._create_device_config(response.json) | ||
|
@@ -537,9 +456,12 @@ async def modify_cloud_device_config_async(self, | |
version_to_update : int = None, | ||
binary_data: bytes = None): | ||
params, body = self._prepare_modify_cloud_config_device(request=request, name=name, | ||
binary_data=binary_data, version_to_update=version_to_update) | ||
async_client = AsyncClient() | ||
response = await async_client.post(request_params=params, request_body=body) | ||
binary_data=binary_data, | ||
version_to_update=version_to_update) | ||
async_client = AsyncClient(clearblade_config=await self._config_manager.regional_config_async) | ||
response = await async_client.post(api_name="cloudiot_devices", | ||
request_params=params, | ||
request_body=body) | ||
if response.status_code == 200: | ||
return self._create_device_config(response.json) | ||
return None | ||
|
@@ -549,38 +471,60 @@ def list(self): | |
|
||
def get(self, | ||
request: GetDeviceRequest) -> Device: | ||
sync_client = SyncClient() | ||
|
||
params = {'name':request.name} | ||
response = sync_client.get(request_params=params) | ||
sync_client = SyncClient(clearblade_config=self._config_manager.regional_config) | ||
response = sync_client.get(api_name="cloudiot_devices", request_params=params) | ||
|
||
if response.status_code == 200: | ||
return self._create_device_from_response(response.json()) | ||
return None | ||
|
||
async def get_async(self, | ||
request: GetDeviceRequest): | ||
async_client = AsyncClient() | ||
request: GetDeviceRequest) -> Device: | ||
params = {'name':request.name} | ||
response = await async_client.get(request_params=params) | ||
async_client = AsyncClient(clearblade_config=await self._config_manager.regional_config_async) | ||
response = await async_client.get(api_name="cloudiot_devices", request_params=params) | ||
|
||
if response.status_code == 200: | ||
return self._create_device_from_response(response.json()) | ||
return None | ||
|
||
def delete(self, | ||
request: DeleteDeviceRequest): | ||
sync_client = SyncClient() | ||
params = {'name':request.name} | ||
sync_client = SyncClient(clearblade_config=self._config_manager.regional_config) | ||
response = sync_client.delete(api_name="cloudiot_devices",request_params=params) | ||
return response | ||
|
||
async def delete_async(self, | ||
request: DeleteDeviceRequest): | ||
async_client = AsyncClient() | ||
params = {'name':request.name} | ||
async_client = AsyncClient(clearblade_config=await self._config_manager.regional_config_async) | ||
response = await async_client.delete(api_name="cloudiot_devices", request_params=params) | ||
return response | ||
|
||
def update(self, | ||
request: UpdateDeviceRequest) -> Device: | ||
params, body = request._prepare_params_body_for_update() | ||
sync_client = SyncClient(clearblade_config=self._config_manager.regional_config) | ||
response = sync_client.patch(api_name= "cloudiot_devices",request_body=body, request_params=params) | ||
|
||
if response.status_code == 200: | ||
return self._create_device_from_response(json_response=response.json()) | ||
return None | ||
|
||
async def update_async(self, | ||
request: UpdateDeviceRequest) -> Device: | ||
async_client = AsyncClient(clearblade_config=await self._config_manager.regional_config_async) | ||
params, body = request._prepare_params_body_for_update() | ||
response = await async_client.patch(api_name="cloudiot_devices",request_body=body, request_params=params) | ||
|
||
if response.status_code == 200: | ||
return self._create_device_from_response(json_response=response.json()) | ||
return None | ||
|
||
|
||
def bindGatewayToDevice(self, | ||
request: BindUnBindGatewayDeviceRequest) : | ||
sync_client = SyncClient() | ||
|
@@ -673,23 +617,3 @@ async def getDevicesList_async(self, | |
if response.status_code == 200: | ||
return response.json() | ||
return None | ||
|
||
def updateDevice(self, | ||
request: UpdateDeviceRequest): | ||
sync_client = SyncClient() | ||
params, body = request._prepare_params_body_for_update() | ||
response = sync_client.patch(api_name= "cloudiot_devices",request_body=body, request_params=params) | ||
|
||
if response.status_code == 200: | ||
return response.json() | ||
return None | ||
|
||
async def updateDevice_async(self, | ||
request: UpdateDeviceRequest): | ||
async_client = AsyncClient() | ||
params, body = request._prepare_params_body_for_update() | ||
response = await async_client.patch(api_name="cloudiot_devices",request_body=body, request_params=params) | ||
|
||
if response.status_code == 200: | ||
return response.json() | ||
return None |
Uh oh!
There was an error while loading. Please reload this page.