Advertisement
kastielspb

Url to file serializer field

Mar 15th, 2021
652
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.05 KB | None | 0 0
  1. # shared/rest/fields/utils.py
  2. from os.path import basename
  3. import requests
  4. from tempfile import TemporaryFile
  5. from urllib.parse import urlsplit
  6.  
  7. from django.core.files import File
  8.  
  9. __all__ = ('url_to_file', )
  10.  
  11.  
  12. def url_to_file(url: str):
  13.     try:
  14.         temp_file = TemporaryFile()
  15.         result = requests.get(url, stream=True)
  16.         for chunk in result.iter_content(chunk_size=4096):
  17.             temp_file.write(chunk)
  18.         temp_file.seek(0)
  19.         return File(temp_file, name=basename(urlsplit(url).path))
  20.     except Exception:
  21.         pass
  22.  
  23.  
  24. # shared/rest/fields/files.py
  25. from rest_framework.serializers import FileField, ImageField
  26.  
  27. from .utils import url_to_file
  28.  
  29. __all__ = ('UrlToFileField', 'UrlToImageField')
  30.  
  31. class UrlToFieldMixin:
  32.  
  33.     def to_internal_value(self, data):
  34.         """
  35.        Transform the *incoming* url into a native File.
  36.        """
  37.         return url_to_file(data)
  38.  
  39.  
  40. class UrlToFileField(UrlToFieldMixin, FileField):
  41.     pass
  42.  
  43.  
  44. class UrlToImageField(UrlToFieldMixin, ImageField):
  45.     pass
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement