"""ACRCloud CLI Wrapper for dedup endpoints.""" # https://docs.acrcloud.com/reference/console-api/buckets/dedup-files import json import os from acrcloud.acrcloud_extr_tool import create_fingerprint_by_file import requests BUCKETS = { 'dev': 15928, 'qa': 15929, 'prod': 15785 } class ACRCloud(): token = None bucket_id = None partner_id = 'orchard' def __init__(self, bucket=None): environment = os.getenv('ENVIRONMENT') self.bucket_id = BUCKETS[environment] self.token = os.getenv('ACR_CLOUD_KEY') def list(self, page, pagelen): (code, body) = self._call( 'GET', f'buckets/{self.bucket_id}/dedup-files', params={ 'page': page, 'per_page': pagelen } ) return (code, body) def single(self, file_id): (code, body) = self._call( 'GET', f'buckets/{self.bucket_id}/dedup-files/{file_id}' ) return (code, body) def create(self, filename, start, end, fid=None): fingerprint = self._make_fingerprint(filename, start, end) # noqa:E501 filename = filename.split('/')[-1] default_id = f'{filename}_{start}_{end}' new_id = default_id if not fid else fid (code, body) = self._call( 'POST', f'buckets/{self.bucket_id}/dedup-files', data={ 'partner': self.partner_id, 'id': new_id, 'db_id_nodup': 1 }, files=[ ('file', fingerprint) ] ) return (code, body) def _make_fingerprint(self, filename, start, end): fingerprint = create_fingerprint_by_file( filename, start, end, True, 0 ) return fingerprint def _call(self, verb, endpoint, params={}, data={}, files=None): url = f'https://us-api-v2.acrcloud.com/api/{endpoint}' headers = { 'Accept': 'application/json', 'Authorization': f'Bearer {self.token}' } verb = verb.upper() response = requests.request( verb, url, headers=headers, params=params, data=data, files=files ) response_body = None try: response_body = response.json() except json.decoder.JSONDecodeError: pass return (response.status_code, response_body)