* Use full LMS imports paths in LMS settings and urls modules * Use full LMS import paths in Studio settings and urls modules * Import from lms.djangoapps.badges instead of badges * Import from lms.djangoapps.branding instead of branding * Import from lms.djangoapps.bulk_email instead of bulk_email * Import from lms.djangoapps.bulk_enroll instead of bulk_enroll * Import from lms.djangoapps.ccx instead of ccx * Import from lms.djangoapps.course_api instead of course_api * Import from lms.djangoapps.course_blocks instead of course_blocks * Import from lms.djangoapps.course_wiki instead of course_wiki * Import from lms.djangoapps.courseware instead of courseware * Import from lms.djangoapps.dashboard instead of dashboard * Import from lms.djangoapps.discussion import discussion * Import from lms.djangoapps.email_marketing instead of email_marketing * Import from lms.djangoapps.experiments instead of experiments * Import from lms.djangoapps.gating instead of gating * Import from lms.djangoapps.grades instead of grades * Import from lms.djangoapps.instructor_analytics instead of instructor_analytics * Import form lms.djangoapps.lms_xblock instead of lms_xblock * Import from lms.djangoapps.lti_provider instead of lti_provider * Import from lms.djangoapps.mobile_api instead of mobile_api * Import from lms.djangoapps.rss_proxy instead of rss_proxy * Import from lms.djangoapps.static_template_view instead of static_template_view * Import from lms.djangoapps.survey instead of survey * Import from lms.djangoapps.verify_student instead of verify_student * Stop suppressing EdxPlatformDeprecatedImportWarnings
40 lines
1.2 KiB
Python
40 lines
1.2 KiB
Python
"""
|
|
Views for the rss_proxy djangoapp.
|
|
"""
|
|
|
|
|
|
import requests
|
|
from django.conf import settings
|
|
from django.core.cache import cache
|
|
from django.http import HttpResponse, HttpResponseNotFound
|
|
|
|
from lms.djangoapps.rss_proxy.models import WhitelistedRssUrl
|
|
|
|
CACHE_KEY_RSS = "rss_proxy.{url}"
|
|
|
|
|
|
def proxy(request):
|
|
"""
|
|
Proxy requests for the given RSS url if it has been whitelisted.
|
|
"""
|
|
|
|
url = request.GET.get('url')
|
|
if url and WhitelistedRssUrl.objects.filter(url=url).exists():
|
|
# Check cache for RSS if the given url is whitelisted
|
|
cache_key = CACHE_KEY_RSS.format(url=url)
|
|
status_code = 200
|
|
rss = cache.get(cache_key, '')
|
|
print(cache_key)
|
|
print(u'Cached rss: %s' % rss)
|
|
if not rss:
|
|
# Go get the RSS from the URL if it was not cached
|
|
resp = requests.get(url)
|
|
status_code = resp.status_code
|
|
if status_code == 200:
|
|
# Cache RSS
|
|
rss = resp.content
|
|
cache.set(cache_key, rss, settings.RSS_PROXY_CACHE_TIMEOUT)
|
|
return HttpResponse(rss, status=status_code, content_type='application/xml')
|
|
|
|
return HttpResponseNotFound()
|