storage.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import os
  2. from datetime import datetime, timedelta
  3. from django.conf import settings
  4. from django.contrib.staticfiles.storage import ManifestStaticFilesStorage
  5. from django.core.files import storage
  6. from django.utils import timezone
  7. class DummyStorage(storage.Storage):
  8. """
  9. A storage class that implements get_modified_time() but raises
  10. NotImplementedError for path().
  11. """
  12. def _save(self, name, content):
  13. return 'dummy'
  14. def delete(self, name):
  15. pass
  16. def exists(self, name):
  17. pass
  18. def get_modified_time(self, name):
  19. return datetime(1970, 1, 1, tzinfo=timezone.utc)
  20. class PathNotImplementedStorage(storage.Storage):
  21. def _save(self, name, content):
  22. return 'dummy'
  23. def _path(self, name):
  24. return os.path.join(settings.STATIC_ROOT, name)
  25. def exists(self, name):
  26. return os.path.exists(self._path(name))
  27. def listdir(self, path):
  28. path = self._path(path)
  29. directories, files = [], []
  30. for entry in os.scandir(path):
  31. if entry.is_dir():
  32. directories.append(entry.name)
  33. else:
  34. files.append(entry.name)
  35. return directories, files
  36. def delete(self, name):
  37. name = self._path(name)
  38. try:
  39. os.remove(name)
  40. except FileNotFoundError:
  41. pass
  42. def path(self, name):
  43. raise NotImplementedError
  44. class NeverCopyRemoteStorage(PathNotImplementedStorage):
  45. """
  46. Return a future modified time for all files so that nothing is collected.
  47. """
  48. def get_modified_time(self, name):
  49. return datetime.now() + timedelta(days=30)
  50. class QueryStringStorage(storage.Storage):
  51. def url(self, path):
  52. return path + '?a=b&c=d'
  53. class SimpleStorage(ManifestStaticFilesStorage):
  54. def file_hash(self, name, content=None):
  55. return 'deploy12345'
  56. class ExtraPatternsStorage(ManifestStaticFilesStorage):
  57. """
  58. A storage class to test pattern substitutions with more than one pattern
  59. entry. The added pattern rewrites strings like "url(...)" to JS_URL("...").
  60. """
  61. patterns = tuple(ManifestStaticFilesStorage.patterns) + (
  62. (
  63. "*.js", (
  64. (r"""(url\(['"]{0,1}\s*(.*?)["']{0,1}\))""", 'JS_URL("%s")'),
  65. ),
  66. ),
  67. )