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))
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']}))
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(), })
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(), })
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(), })
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)
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']}))
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)
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
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']}))
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']}))
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)
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
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))