Skip to content

Conversation

@leo-naeka
Copy link
Contributor

This pull request adds both CachedStaticSwiftStorage and ManifestStaticSwiftStorage, based on django.contrib.staticfiles equivalents : CachedStaticFilesStorage and ManifestStaticFilesStorage.

There's not much code added, it mainly relies on staticfiles' mixins, but there's 2 notable changes:

  • It normalizes the path, because some path may be relative and swift evaluates paths as a whole, nor like a filesystem where myapp/css/../img/background.png is myapp/img/background.png.
  • The ManifestStaticSwiftStorage overrides read_manifest to handle ClientException which indicates that the manifest doesn't exist (like IOError on filesystem).
try:
super(ManifestStaticSwiftStorage, self).read_manifest()
except swiftclient.ClientException:
return None
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of silently swallowing the exception I would suggest to wrap it in IOError instead, like this (and maybe in the StaticSwiftStorage._open method instead of ManifestStaticSwiftStorage.read_manifest ):

except swiftclient.exceptions.ClientException as e: # django.contrib.staticfiles.storage.ManifestFilesMixin#read_manifest # When manifest file doesn't exist, the raised error must be an instance of IOError. raise IOError(e)

If you want to ignore the missing manifest error, it's possible by setting ManifestStaticSwiftStorage.manifest_strict property to False. So something like this will allow to make the ignoring of the error configurable:

class ManifestStaticSwiftStorage(ManifestFilesMixin, StaticSwiftStorage): manifest_strict = setting('SWIFT_MANIFEST_STRICT', True)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

2 participants