"""Interface for ows-permissions microservice.""" from oto import response from owsrequest import request as requests from reporting.constants import service_name from reporting.utils.response_handler_util import safe_decode_json LABEL_RESOURCE = 'label' VENDOR_RESOURCE_TYPE = 'Vendor' SUBACCOUNT_RESOURCE_TYPES = ('Subaccount', 'SubAccount') FULL_ACCESS_ID = '*' PROFILE_RESOURCE_PATH = ( '/admin/profile-type/{profile_type}/profile/{profile_id}' '/resource/{resource}' ) def get_label_resources(profile_type, profile_id): """Get the vendors/subaccounts a profile has label access to. Args: profile_type (str): Orchard profile type, e.g. 'Label'. profile_id (str): Orchard profile id. Returns: oto.Response: on success, message contains 'full_access' (bool), 'vendor_ids' (list) and 'subaccount_ids' (list). 'full_access' is True when ows-permissions grants an unrestricted ('*') Vendor entry. """ permissions_response = requests.get( service_name.OWS_PERMISSIONS, PROFILE_RESOURCE_PATH.format( profile_type=profile_type, profile_id=profile_id, resource=LABEL_RESOURCE, ), ) content = safe_decode_json( permissions_response, service_name.OWS_PERMISSIONS ) if permissions_response.status_code != 200: return response.create_error_response( status=permissions_response.status_code, code=content.get('code'), message=content.get('message'), ) full_access = False vendor_ids = [] subaccount_ids = [] for item in content.get('items') or []: item_type = item.get('type') item_id = item.get('id') if item_type == VENDOR_RESOURCE_TYPE: if item_id == FULL_ACCESS_ID: full_access = True continue vendor_ids.append(item_id) elif item_type in SUBACCOUNT_RESOURCE_TYPES: subaccount_ids.append(item_id) return response.Response( status=200, message={ 'full_access': full_access, 'vendor_ids': vendor_ids, 'subaccount_ids': subaccount_ids, }, )