def camera_by_id(self, cameraID): """ A method to get a camera object by using camera's ID Parameters ---------- cameraID : str Id of the camera in the database. Returns ------- :obj:`Camera` A camera object. """ if self.token is None: self._request_token() url = Client.base_URL + "cameras/" + cameraID header = self.header_builder() response = self._check_token(response=requests.get(url, headers=header), flag='GET', url=url) if response.status_code != 200: if response.status_code == 401: raise AuthenticationError(response.json()['message']) elif response.status_code == 404: raise ResourceNotFoundError(response.json()['message']) elif response.status_code == 403: raise AuthorizationError(response.json()['message']) elif response.status_code == 422: raise FormatError(response.json()['message']) else: raise InternalError() return Camera.process_json(**response.json())
def usage_by_client(self, clientID, owner): """ Parameters ---------- clientID : str Client's ID of the application. owner : str Username of the owner of the client application. Returns ------- int The number of requests made by the client. """ url = Client.base_URL + "apps/" + clientID + "/usage" param = {'owner': owner} if self.token is None: self._request_token() header = self.header_builder() response = self._check_token(response=requests.get(url, headers=header, params=param), flag='GET', url=url, params=param) if response.status_code != 200: if response.status_code == 401: raise AuthenticationError(response.json()['message']) elif response.status_code == 403: raise AuthorizationError(response.json()['message']) elif response.status_code == 404: raise ResourceNotFoundError(response.json()['message']) else: raise InternalError() return response.json()['api_usage']
def reset_secret(self, clientID): """ Parameters ---------- clientID: str Client Id of the application. Returns -------- str New clientSecret """ url = Client.base_URL + 'apps/' + clientID + '/secret' if self.token is None: self._request_token() header = self.header_builder() response = self._check_token(response=requests.put(url, headers=header, data=None), flag='PUT', url=url, data=None) if response.status_code != 200: if response.status_code == 401: raise AuthenticationError(response.json()['message']) elif response.status_code == 404: raise ResourceNotFoundError(response.json()['message']) else: raise InternalError() return response.json()['clientSecret']
def update_permission(self, clientID, permissionLevel): """ Parameters ---------- clientID : str Client Id of the application. permissionLevel : str, optional Permission level of client. Returns ------- str Success message. """ url = Client.base_URL + 'apps/' + clientID if self.token is None: self._request_token() header = self.header_builder() data = {'permissionLevel': permissionLevel} response = self._check_token(response=requests.put(url, headers=header, data=data), flag='PUT', url=url, data=data) if response.status_code != 200: if response.status_code == 401: raise AuthenticationError(response.json()['message']) elif response.status_code == 404: raise ResourceNotFoundError(response.json()['message']) else: raise InternalError() return response.json()['message']
def _request_token(self): """A method to request an access token for the client application. Raises ------ ResourceNotFoundError If no client app exists with the clientID of this client object. AuthenticationError If the client secret of this client object does not match the clientID. InternalError If there is an API internal error. """ url = self.base_URL + 'auth' param = {'clientID': self.clientID, 'clientSecret': self.clientSecret} response = requests.get(url, params=param) if response.status_code == 200: self.token = response.json()['token'] elif response.status_code == 404: raise ResourceNotFoundError(response.json()['message']) elif response.status_code == 401: raise AuthenticationError(response.json()['message']) else: raise InternalError()
def write_camera(self, **kwargs): """ add or update camera in the database. Parameters ---------- camera_type : str Type of camera. Allowed values: 'ip', 'non_ip', 'stream'. | This parameter is required for adding camera. is_active_image : bool Whether the camera is active and can get images. This field can identify true/false case-insensitively and 0/1. | This parameter is required for adding camera. is_active_video : bool Whether the camera is active and can get video. This field can identify true/false case-insensitively and 0/1. | This parameter is required for adding camera. ip : str (IP camera only) IP address of the camera. | This parameter is required for adding an IP camera. snapshot_url : str (non-IP camera only) Url to retrieve snapshots from the camera. | This parameter is required for adding a non-IP camera. m3u8_url : str (Stream camera only) Url to retrieve stream from the camera. | This parameter is required for adding a stream camera. cameraID : str CameraID of the camera to be updated. | This parameter is required for updating camera. Warning ------- Including a cameraID in your write_camera request will update and overwrite the corresponding camera information in the database. Please ensure that the updated information is correct. Other Parameters ---------------- legacy_cameraID : int, optional Original ID of the camera in SQL database. source : str, optional Source of camera. latitude : int or float, optional Latitude of the camera location. longitude : int or float, optional Longitude of the camera location. country : str, optional Country which the camera locates at. state : str, optional State which the camera locates at. city : str, optional City which the camera locates at. resolution_width : int, optional Resolution width of the camera. resolution_height : int, optional Resolution height of the camera. utc_offset : int, optional Time difference between UTC and the camera location. timezone_id : str, optional Time zone ID of the camera location. timezone_name : str, optional Time zone name of the camera location. reference_logo : str, optional Reference logo of the camera. reference_url : str, optional Reference url of the camera. port : str or int, optional (ip_camera only) Port to connect to camera. brand : str, optional (ip_camera only) Brand of the camera. model : str, optional (ip_camera only) Model of the camera. image_path : str, optional (ip_camera only) Path to retrieve images from the camera. video_path : str, optional (ip_camera only) Path to retrieve video from the camera. Raises ------ AuthenticationError If the client secret of this client object does not match the clientID. FormatError Informartion of invalid parameter or unexpected paramters. ResourceConflictError The legacy_cameraID already exist in the database. InternalError If there is an API internal error. ResourceNotFoundError If no camera exists with the cameraID specified in the parameter. Or If the client id of this client object does not match any client in the database. Returns ------- str The camera ID for the successfully added or updated camera. Note ---- When adding or updating a camera you must supply the corresponding required parameters and may also include any number of the optional parameters defined below in 'Other Parameters. When Adding a new camera: Do not include any cameraID when adding new cameras to the database. When the camera is added to the database, a new cameraID will be assigned and returned to the user. When updating an existing camera in the database you must include the corresponding cameraID and any fields you wish to update. If in any occasion you need to change an existing camera to a different type, you must include the corresponding retrieval method data. (i.e. To change an IP camera to non-ip camera, you must include values of snapshot_url and camera_type) Updating field in retrieval method requires you to also specify the type of camera. (i.e. To change the image_path of an IP camera, you should specify the camera_type and image_path) """ self._check_args(kwargs=kwargs, legal_args=self._camera_fields) if self.token is None: self._request_token() operation = 'POST' if kwargs.get('cameraID') is None else 'PUT' if kwargs.get('camera_type') == 'ip': kwargs['retrieval'] = { 'ip': kwargs.pop('ip', None), 'port': kwargs.pop('port', None), 'brand': kwargs.pop('brand', None), 'model': kwargs.pop('model', None), 'image_path': kwargs.pop('image_path', None), 'video_path': kwargs.pop('video_path', None) } kwargs['retrieval'] = json.dumps(kwargs['retrieval'], sort_keys=True) elif kwargs.get('camera_type') == 'non_ip': kwargs['retrieval'] = { 'snapshot_url': kwargs.pop('snapshot_url', None) } kwargs['retrieval'] = json.dumps(kwargs['retrieval']) elif kwargs.get('camera_type') == 'stream': kwargs['retrieval'] = { 'm3u8_url': kwargs.pop('m3u8_url', None) } kwargs['retrieval'] = json.dumps(kwargs['retrieval']) kwargs['type'] = kwargs.pop('camera_type', None) if operation == 'POST': url = Client.base_URL + 'cameras/create' temp_response = requests.post(url, data=kwargs, headers=self.header_builder()) else: url = Client.base_URL + 'cameras/' + kwargs.pop('cameraID') temp_response = requests.put(url, data=kwargs, headers=self.header_builder()) response = self._check_token(temp_response, flag=operation, url=url, data=kwargs) if response.status_code != 201 and response.status_code != 200: if response.status_code == 403: raise AuthenticationError(response.json()['message']) elif response.status_code == 422: raise FormatError(response.json()['message']) elif response.status_code == 409: raise ResourceConflictError(response.json()['message']) elif response.status_code == 404: raise ResourceNotFoundError(response.json()['message']) else: raise InternalError() return response.json()['cameraID']