django-downloadview/django_downloadview/views/http.py

50 lines
1.3 KiB
Python
Raw Normal View History

"""Stream files given an URL, i.e. files you want to proxy."""
2024-08-05 08:51:17 +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
class HTTPDownloadView(BaseDownloadView):
"""Proxy files that live on remote servers."""
2020-01-07 14:10:42 +00:00
#: URL to download (the one we are proxying).
2020-01-07 14:21:34 +00:00
url = ""
#: Additional keyword arguments for request handler.
request_kwargs = {}
def get_request_factory(self):
"""Return request factory to perform actual HTTP request.
Default implementation returns :func:`requests.get` callable.
"""
return requests.get
def get_request_kwargs(self):
"""Return keyword arguments for use with :meth:`get_request_factory`.
Default implementation returns :attr:`request_kwargs`.
"""
return self.request_kwargs
def get_url(self):
"""Return remote file URL (the one we are proxying).
Default implementation returns :attr:`url`.
"""
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
)