in gnm_deliverables/views/deliverables_dash_views.py [0:0]
def get(self, request, *args, **kwargs):
if not hasattr(settings, "CAPI_KEY"):
return Response({"status": "error", "detail": "You need to set capi_key in the settings"}, status=500)
if not hasattr(settings, "CAPI_BASE"):
return Response({"status": "error", "detail": "You need to set capi_base in the settings"}, status=500)
if "url" not in request.GET:
return Response({"status": "error", "detail": "No url= parameter"}, status=500)
try:
unquoted_url = urllib.parse.unquote(request.GET["url"])
parsed_url = urllib.parse.urlparse(unquoted_url)
url_to_call = "https://{base}{0}?api-key={key}&show-atoms=media".format(parsed_url.path,
base=settings.CAPI_BASE,
key=settings.CAPI_KEY)
logger.info("CAPI url for {0} is {1}".format(request.GET["url"], url_to_call))
response = requests.get(url_to_call)
logger.info("CAPI response was {0}".format(response.status_code))
if response.status_code == 200:
capi_content = self.validate_capi_content(response.json())
if capi_content is None:
logger.error(
"CAPI did not return enough fields that we wanted. Consult deliverables_dash_views.py for details on what's needed. We got: {0}.".format(
response.text))
return Response({
"status": "capi_response_error",
"detail": "This does not seem to be a video atom"
})
elif len(capi_content["atoms"]["media"]) == 0:
logger.error("CAPI did not return any media atoms in the page. We got: {0}".format(response.text))
return Response({
"status": "capi_response_error",
"detail": "There were no video atoms on the page"
})
else:
return Response({
"status": "ok",
"webTitle": capi_content["webTitle"],
"atoms": [{
"atomTitle": atom["title"],
"atomId": atom["id"],
"image": self.find_smallest_poster(atom),
"deliverable": self.find_deliverable_url_for_id(atom["id"])
} for atom in capi_content["atoms"]["media"]]
})
else:
logger.error("Could not access {0}: CAPI returned {1} {2}".format(url_to_call, response.status_code,
response.text))
return Response({
"status": "capi_response_error",
"detail": "CAPI returned {0}".format(response.status_code)
})
except Exception as e:
logger.error("Could not make proxy request to CAPI: {0}".format(str(e)))
return Response({"status": "error", "detail": "See server logs"}, status=500)