def _get_user_ownership_data(self, basket, retrieve_entitlements=False): """ Retrieves existing enrollments and entitlements for a user from LMS """ enrollments = [] entitlements = [] site_configuration = basket.site.siteconfiguration if site_configuration.enable_partial_program: client = site_configuration.oauth_api_client enrollments = self._get_lms_resource( basket, 'enrollments', client, site_configuration.enrollments_api_url ) entitlements_api_url = site_configuration.entitlements_api_url if retrieve_entitlements: response = self._get_lms_resource( basket, 'entitlements', client, entitlements_api_url ) if isinstance(response, dict): entitlements = deprecated_traverse_pagination( response, client, entitlements_api_url ) else: entitlements = response return enrollments, entitlements
def _get_discovery_response(site, cache_key, resource, resource_id): """ Return the discovery endpoint result of given resource or cached response if its already been cached. Arguments: site (Site): Site object containing Site Configuration data cache_key (str): Cache key for given resource resource_id (int or str): Identifies a specific resource to be retrieved Returns: dict: resource's information for given resource_id received from Discovery API """ course_cached_response = TieredCache.get_cached_response(cache_key) if course_cached_response.is_found: return course_cached_response.value params = {} api = site.siteconfiguration.discovery_api_client endpoint = getattr(api, resource) if resource == 'course_runs': params['partner'] = site.siteconfiguration.partner.short_code response = endpoint(resource_id).get(**params) if resource_id is None: response = deprecated_traverse_pagination(response, endpoint) TieredCache.set_all_tiers(cache_key, response, settings.COURSES_API_CACHE_TIMEOUT) return response
def get_enterprise_customers(site): resource = 'enterprise-customer' client = get_enterprise_api_client(site) endpoint = getattr(client, resource) response = endpoint.get() return sorted([{ 'name': each['name'], 'id': each['uuid'], } for each in deprecated_traverse_pagination(response, endpoint)], key=lambda k: k['name'].lower())
def get_course_catalogs(site, resource_id=None): """ Get details related to course catalogs from Discovery Service. Arguments: site (Site): Site object containing Site Configuration data resource_id (int or str): Identifies a specific resource to be retrieved Returns: dict: Course catalogs received from Discovery API Raises: ConnectionError: requests exception "ConnectionError" SlumberBaseException: slumber exception "SlumberBaseException" Timeout: requests exception "Timeout" """ resource = 'catalogs' base_cache_key = '{}.catalog.api.data'.format(site.domain) cache_key = '{}.{}'.format(base_cache_key, resource_id) if resource_id else base_cache_key cache_key = hashlib.md5(cache_key).hexdigest() cached_response = TieredCache.get_cached_response(cache_key) if cached_response.is_hit: return cached_response.value api = site.siteconfiguration.discovery_api_client endpoint = getattr(api, resource) response = endpoint(resource_id).get() if resource_id: results = response else: results = deprecated_traverse_pagination(response, endpoint) TieredCache.set_all_tiers(cache_key, results, settings.COURSES_API_CACHE_TIMEOUT) return results
def _get_discovery_response(site, cache_key, resource, resource_id): """ Return the discovery endpoint result of given resource or cached response if its already been cached. Arguments: site (Site): Site object containing Site Configuration data cache_key (str): Cache key for given resource resource_id (int or str): Identifies a specific resource to be retrieved Returns: dict: resource's information for given resource_id received from Discovery API """ course_cached_response = TieredCache.get_cached_response(cache_key) if course_cached_response.is_found: return course_cached_response.value params = {} if resource == 'course_runs': params['partner'] = site.siteconfiguration.partner.short_code api_client = site.siteconfiguration.oauth_api_client resource_path = f"{resource_id}/" if resource_id else "" discovery_api_url = urljoin( f"{site.siteconfiguration.discovery_api_url}/", f"{resource}/{resource_path}" ) response = api_client.get(discovery_api_url, params=params) response.raise_for_status() result = response.json() if resource_id is None: result = deprecated_traverse_pagination(result, api_client, discovery_api_url) TieredCache.set_all_tiers(cache_key, result, settings.COURSES_API_CACHE_TIMEOUT) return result