2013-10-21 12:57:54 +00:00
|
|
|
"""Stream files given an URL, i.e. files you want to proxy."""
|
2024-08-05 08:51:17 +00:00
|
|
|
|
2013-10-21 12:57:54 +00:00
|
|
|
from django_downloadview.files import HTTPFile
|
|
|
|
|
from django_downloadview.views.base import BaseDownloadView
|
|
|
|
|
|
2020-01-07 14:51:55 +00:00
|
|
|
import requests
|
|
|
|
|
|
2013-10-21 12:57:54 +00:00
|
|
|
|
|
|
|
|
class HTTPDownloadView(BaseDownloadView):
|
|
|
|
|
"""Proxy files that live on remote servers."""
|
2020-01-07 14:10:42 +00:00
|
|
|
|
2013-10-21 12:57:54 +00:00
|
|
|
#: URL to download (the one we are proxying).
|
2020-01-07 14:21:34 +00:00
|
|
|
url = ""
|
2013-10-21 12:57:54 +00:00
|
|
|
|
|
|
|
|
#: Additional keyword arguments for request handler.
|
|
|
|
|
request_kwargs = {}
|
|
|
|
|
|
|
|
|
|
def get_request_factory(self):
|
2013-10-28 15:58:18 +00:00
|
|
|
"""Return request factory to perform actual HTTP request.
|
|
|
|
|
|
|
|
|
|
Default implementation returns :func:`requests.get` callable.
|
|
|
|
|
|
|
|
|
|
"""
|
2013-10-21 12:57:54 +00:00
|
|
|
return requests.get
|
|
|
|
|
|
|
|
|
|
def get_request_kwargs(self):
|
2013-10-28 15:58:18 +00:00
|
|
|
"""Return keyword arguments for use with :meth:`get_request_factory`.
|
|
|
|
|
|
|
|
|
|
Default implementation returns :attr:`request_kwargs`.
|
|
|
|
|
|
|
|
|
|
"""
|
2013-10-21 12:57:54 +00:00
|
|
|
return self.request_kwargs
|
|
|
|
|
|
|
|
|
|
def get_url(self):
|
2013-10-28 15:58:18 +00:00
|
|
|
"""Return remote file URL (the one we are proxying).
|
|
|
|
|
|
|
|
|
|
Default implementation returns :attr:`url`.
|
|
|
|
|
|
|
|
|
|
"""
|
2013-10-21 12:57:54 +00:00
|
|
|
return self.url
|
|
|
|
|
|
|
|
|
|
def get_file(self):
|
|
|
|
|
"""Return wrapper which has an ``url`` attribute."""
|
2020-01-07 14:10:42 +00:00
|
|
|
return HTTPFile(
|
|
|
|
|
request_factory=self.get_request_factory(),
|
|
|
|
|
name=self.get_basename(),
|
|
|
|
|
url=self.get_url(),
|
2024-08-05 08:51:17 +00:00
|
|
|
**self.get_request_kwargs(),
|
2020-01-07 14:10:42 +00:00
|
|
|
)
|