temp_file.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import os
  2. from tempfile import NamedTemporaryFile
  3. from django.conf import settings
  4. from django_file_form.models import UploadedFile
  5. try:
  6. from pathlib import Path
  7. except ImportError:
  8. from pathlib2 import Path
  9. class TempFile(object):
  10. def __init__(self):
  11. self.named_temporary_file = None
  12. def create(self, content='abc', prefix=None):
  13. if self.named_temporary_file:
  14. raise Exception('Tempfile is already created')
  15. def create_named_temporary_file():
  16. f = NamedTemporaryFile(mode='w+b', prefix=prefix or 'tmp')
  17. f.write(content.encode())
  18. f.seek(0)
  19. return f
  20. self.named_temporary_file = create_named_temporary_file()
  21. def base_name(self):
  22. if not self.named_temporary_file:
  23. raise Exception('Tempfile is not created')
  24. return os.path.basename(self.named_temporary_file.name)
  25. def path(self):
  26. if not self.named_temporary_file:
  27. raise Exception('Tempfile is not created')
  28. return self.named_temporary_file.name
  29. def destroy(self):
  30. if self.named_temporary_file:
  31. uploaded_file = self.uploaded_file()
  32. if uploaded_file.exists():
  33. uploaded_file.unlink()
  34. self.named_temporary_file.close()
  35. self.named_temporary_file = None
  36. for uploaded_file in UploadedFile.objects.all():
  37. uploaded_file.uploaded_file.delete()
  38. def uploaded_file(self):
  39. if not self.named_temporary_file:
  40. raise Exception('Tempfile is not created')
  41. return Path(settings.MEDIA_ROOT).joinpath('example', self.base_name())