storage.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import errno
  2. import os
  3. from datetime import datetime
  4. from django.conf import settings
  5. from django.contrib.staticfiles.storage import CachedStaticFilesStorage
  6. from django.core.files import storage
  7. from django.utils import timezone
  8. class DummyStorage(storage.Storage):
  9. """
  10. A storage class that implements get_modified_time().
  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.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.listdir(path):
  31. if os.path.isdir(os.path.join(path, entry)):
  32. directories.append(entry)
  33. else:
  34. files.append(entry)
  35. return directories, files
  36. def delete(self, name):
  37. name = self._path(name)
  38. if os.path.exists(name):
  39. try:
  40. os.remove(name)
  41. except OSError as e:
  42. if e.errno != errno.ENOENT:
  43. raise
  44. def path(self, name):
  45. raise NotImplementedError
  46. class SimpleCachedStaticFilesStorage(CachedStaticFilesStorage):
  47. def file_hash(self, name, content=None):
  48. return 'deploy12345'
  49. class ExtraPatternsCachedStaticFilesStorage(CachedStaticFilesStorage):
  50. """
  51. A storage class to test pattern substitutions with more than one pattern
  52. entry. The added pattern rewrites strings like "url(...)" to JS_URL("...").
  53. """
  54. patterns = tuple(CachedStaticFilesStorage.patterns) + (
  55. (
  56. "*.js", (
  57. (r"""(url\(['"]{0,1}\s*(.*?)["']{0,1}\))""", 'JS_URL("%s")'),
  58. ),
  59. ),
  60. )