コード例 #1
0
ファイル: views.py プロジェクト: gopinath81/vmss
 def get(self, request, catalog_id):
     """Display a form to edit this catalog."""
     client = course_discovery_api_client(request.user)
     response = client.catalogs(catalog_id).get()
     catalog = Catalog(attributes=response)
     form = CatalogForm(instance=catalog)
     return render_to_response(self.template_name, self.get_context_data(catalog, form, client))
コード例 #2
0
ファイル: views.py プロジェクト: gopinath81/vmss
    def post(self, request, username):
        """Create a new catalog for a user."""
        form = CatalogForm(request.POST)
        client = course_discovery_api_client(request.user)
        if not form.is_valid():
            return render_to_response(self.template, self.get_context_data(client, username, form), status=400)

        attrs = form.instance.attributes
        catalog = client.catalogs.post(attrs)
        return redirect(reverse('api_admin:catalog-edit', kwargs={'catalog_id': catalog['id']}))
コード例 #3
0
ファイル: views.py プロジェクト: waheedahmed/edx-platform
 def get(self, request, username):
     """Display a list of a user's catalogs."""
     client = course_discovery_api_client(request.user)
     catalogs = self._get_catalogs(client, username)
     return render_to_response(self.template, {
         'username': username,
         'catalogs': catalogs,
         'form': CatalogForm(initial={'viewers': [username]}),
         'preview_url': reverse('api_admin:catalog-preview'),
         'catalog_api_url': client.api.v1.courses.url(),
     })
コード例 #4
0
ファイル: views.py プロジェクト: waheedahmed/edx-platform
 def get(self, request, catalog_id):
     """Display a form to edit this catalog."""
     client = course_discovery_api_client(request.user)
     response = client.api.v1.catalogs(catalog_id).get()
     catalog = Catalog(attributes=response)
     form = CatalogForm(instance=catalog)
     return render_to_response('api_admin/catalogs/edit.html', {
         'catalog': catalog,
         'form': form,
         'preview_url': reverse('api_admin:catalog-preview'),
         'catalog_api_url': client.api.v1.courses.url(),
     })
コード例 #5
0
 def get(self, request, username):
     """Display a list of a user's catalogs."""
     client = course_discovery_api_client(request.user)
     response = client.api.v1.catalogs.get(username=username)
     catalogs = [Catalog(attributes=catalog) for catalog in response['results']]
     return render_to_response(self.template, {
         'username': username,
         'catalogs': catalogs,
         'form': CatalogForm(initial={'viewers': [username]}),
         'preview_url': reverse('api_admin:catalog-preview'),
         'catalog_api_url': client.api.v1.courses.url(),
     })
コード例 #6
0
ファイル: views.py プロジェクト: gopinath81/vmss
 def get(self, request):
     """
     Return the results of a query against the course catalog API. If no
     query parameter is given, returns an empty result set.
     """
     client = course_discovery_api_client(request.user)
     # Just pass along the request params including limit/offset pagination
     if 'q' in request.GET:
         results = client.courses.get(**request.GET)
     # Ensure that we don't just return all the courses if no query is given
     else:
         results = {'count': 0, 'results': [], 'next': None, 'prev': None}
     return JsonResponse(results)
コード例 #7
0
ファイル: views.py プロジェクト: gopinath81/vmss
 def post(self, request, catalog_id):
     """Update or delete this catalog."""
     client = course_discovery_api_client(request.user)
     if request.POST.get('delete-catalog') == 'on':
         client.catalogs(catalog_id).delete()
         return redirect(reverse('api_admin:catalog-search'))
     form = CatalogForm(request.POST)
     if not form.is_valid():
         response = client.catalogs(catalog_id).get()
         catalog = Catalog(attributes=response)
         return render_to_response(self.template_name, self.get_context_data(catalog, form, client), status=400)
     catalog = client.catalogs(catalog_id).patch(form.instance.attributes)
     return redirect(reverse('api_admin:catalog-edit', kwargs={'catalog_id': catalog['id']}))
コード例 #8
0
def get_catalog_api_client(user):
    """
    Retrieve a course catalog API client.

    This method retrieves an authenticated API client that can be used
    to access the course catalog API. It raises an exception to be caught at
    a higher level if the package doesn't have OpenEdX resources available.
    """
    if course_discovery_api_client is None:
        raise NotConnectedToOpenEdX(
            _('To get a catalog API client, this package must be installed in an OpenEdX environment.'
              ))
    else:
        return course_discovery_api_client(user)
コード例 #9
0
ファイル: api.py プロジェクト: khand5/edx-platform
def is_course_in_enterprise_catalog(site, course_id, enterprise_catalog_id):
    """
    Verify that the provided course id exists in the site base list of course
    run keys from the provided enterprise course catalog.

    Arguments:
        course_id (str): The course ID.
        site: (django.contrib.sites.Site) site instance
        enterprise_catalog_id (Int): Course catalog id of enterprise

    Returns:
        Boolean

    """
    cache_key = get_cache_key(site_domain=site.domain,
                              resource='catalogs.contains',
                              course_id=course_id,
                              catalog_id=enterprise_catalog_id)
    response = cache.get(cache_key)
    if not response:
        catalog_integration = CatalogIntegration.current()
        if not catalog_integration.enabled:
            LOGGER.error("Catalog integration is not enabled.")
            return False

        try:
            user = User.objects.get(
                username=catalog_integration.service_username)
        except User.DoesNotExist:
            LOGGER.exception("Catalog service user '%s' does not exist.",
                             catalog_integration.service_username)
            return False

        try:
            # GET: /api/v1/catalogs/{catalog_id}/contains?course_run_id={course_run_ids}
            response = course_discovery_api_client(
                user=user).catalogs(enterprise_catalog_id).contains.get(
                    course_run_id=course_id)
            cache.set(cache_key, response, settings.COURSES_API_CACHE_TIMEOUT)
        except (ConnectionError, SlumberBaseException, Timeout):
            LOGGER.exception(
                'Unable to connect to Course Catalog service for catalog contains endpoint.'
            )
            return False

    try:
        return response['courses'][course_id]
    except KeyError:
        return False
コード例 #10
0
ファイル: views.py プロジェクト: waheedahmed/edx-platform
    def post(self, request, username):
        """Create a new catalog for a user."""
        form = CatalogForm(request.POST)
        client = course_discovery_api_client(request.user)
        if not form.is_valid():
            catalogs = self._get_catalogs(client, username)
            return render_to_response(self.template, {
                'form': form,
                'catalogs': catalogs,
                'username': username,
                'preview_url': reverse('api_admin:catalog-preview'),
                'catalog_api_url': client.api.v1.courses.url(),
            }, status=400)

        attrs = form.instance.attributes
        catalog = client.api.v1.catalogs.post(attrs)
        return redirect(reverse('api_admin:catalog-edit', kwargs={'catalog_id': catalog['id']}))
コード例 #11
0
ファイル: views.py プロジェクト: waheedahmed/edx-platform
 def post(self, request, catalog_id):
     """Update or delete this catalog."""
     client = course_discovery_api_client(request.user)
     if request.POST.get('delete-catalog') == 'on':
         client.api.v1.catalogs(catalog_id).delete()
         return redirect(reverse('api_admin:catalog-search'))
     form = CatalogForm(request.POST)
     if not form.is_valid():
         response = client.api.v1.catalogs(catalog_id).get()
         catalog = Catalog(attributes=response)
         return render_to_response('api_admin/catalogs/edit.html', {
             'catalog': catalog,
             'form': form,
             'preview_url': reverse('api_admin:catalog-preview'),
             'catalog_api_url': client.api.v1.courses.url(),
         }, status=400)
     catalog = client.api.v1.catalogs(catalog_id).patch(form.instance.attributes)
     return redirect(reverse('api_admin:catalog-edit', kwargs={'catalog_id': catalog['id']}))
コード例 #12
0
    def __init__(self, user):
        """
        Create an Course Catalog API client, authenticated with the API token from Django settings.

        This method retrieves an authenticated API client that can be used
        to access the course catalog API. It raises an exception to be caught at
        a higher level if the package doesn't have OpenEdX resources available.
        """
        if CatalogIntegration is None:
            raise NotConnectedToOpenEdX(
                _("To get a CatalogIntegration object, this package must be "
                  "installed in an Open edX environment."))
        if get_edx_api_data is None:
            raise NotConnectedToOpenEdX(
                _("To parse a Catalog API response, this package must be "
                  "installed in an Open edX environment."))
        if course_discovery_api_client is None:
            raise NotConnectedToOpenEdX(
                _("To get a Catalog API client, this package must be "
                  "installed in an Open edX environment."))

        self.user = user
        self.client = course_discovery_api_client(user)
コード例 #13
0
def is_course_in_enterprise_catalog(site, course_id, user, enterprise_catalog_id):
    """
    Verify that the provided course id exists in the site base list of course
    run keys from the provided enterprise course catalog.

    Arguments:
        course_id (str): The course ID.
        site: (django.contrib.sites.Site) site instance
        enterprise_catalog_id (Int): Course catalog id of enterprise

    Returns:
        Boolean

    """
    cache_key = get_cache_key(
        site_domain=site.domain,
        resource='catalogs.contains',
        course_id=course_id,
        catalog_id=enterprise_catalog_id
    )
    response = cache.get(cache_key)
    if not response:
        try:
            # GET: /api/v1/catalogs/{catalog_id}/contains?course_run_id={course_run_ids}
            response = course_discovery_api_client(user=user).catalogs(enterprise_catalog_id).contains.get(
                course_run_id=course_id
            )
            cache.set(cache_key, response, settings.COURSES_API_CACHE_TIMEOUT)
        except (ConnectionError, SlumberBaseException, Timeout):
            LOGGER.exception('Unable to connect to Course Catalog service for catalog contains endpoint.')
            return False

    try:
        return response['courses'][course_id]
    except KeyError:
        return False
コード例 #14
0
ファイル: views.py プロジェクト: gopinath81/vmss
 def get(self, request, username):
     """Display a list of a user's catalogs."""
     client = course_discovery_api_client(request.user)
     form = CatalogForm(initial={'viewers': [username]})
     return render_to_response(self.template, self.get_context_data(client, username, form))