示例#1
0
    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
示例#2
0
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
示例#3
0
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())
示例#4
0
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
示例#5
0
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