Skip to content

Commit

Permalink
"Merge pull request #442 from JDeuce/master\n\nAdd new cache_file_mod…
Browse files Browse the repository at this point in the history
…e setting and wire it up to the FileSystemCache"
  • Loading branch information
miracle2k committed Feb 11, 2016
2 parents bbdd662 + 7117914 commit 95dff0a
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 3 deletions.
9 changes: 7 additions & 2 deletions src/webassets/cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,8 +167,9 @@ class FilesystemCache(BaseCache):

V = 2 # We have changed the cache format once

def __init__(self, directory):
def __init__(self, directory, new_file_mode=None):
self.directory = directory
self.new_file_mode = new_file_mode

def __eq__(self, other):
"""Return equality with the config values
Expand Down Expand Up @@ -205,6 +206,10 @@ def set(self, key, data):
with os.fdopen(fd, 'wb') as f:
pickle.dump(data, f)
f.flush()
# If a non default mode is specified, then chmod the file to
# it before renaming it into place
if self.new_file_mode is not None:
os.chmod(temp_filename, self.new_file_mode)
if os.path.isfile(filename):
os.unlink(filename)
os.rename(temp_filename, filename)
Expand All @@ -231,4 +236,4 @@ def get_cache(option, ctx):
os.makedirs(directory)
else:
directory = option
return FilesystemCache(directory)
return FilesystemCache(directory, ctx.cache_file_mode)
21 changes: 20 additions & 1 deletion src/webassets/env.py
Original file line number Diff line number Diff line change
Expand Up @@ -392,7 +392,8 @@ def add(self, *bundles):
# filter setting might be CSSMIN_BIN.
env_options = [
'directory', 'url', 'debug', 'cache', 'updater', 'auto_build',
'url_expire', 'versions', 'manifest', 'load_path', 'url_mapping']
'url_expire', 'versions', 'manifest', 'load_path', 'url_mapping',
'cache_file_mode' ]


class ConfigurationContext(object):
Expand Down Expand Up @@ -432,6 +433,23 @@ def _get_debug(self):
Merge the source files, but do not apply filters.
""")

def _set_cache_file_mode(self, mode):
self._storage['cache_file_mode'] = mode
def _get_cache_file_mode(self):
return self._storage['cache_file_mode']
cache_file_mode = property(_get_cache_file_mode, _set_cache_file_mode, doc=
"""Controls the mode of files created in the cache. The default mode
is 0600. Follows standard unix mode.
Possible values are any unix mode, e.g.:
``0660``
Enable the group read+write bits
``0666``
Enable world read+write bits
""")

def _set_cache(self, enable):
self._storage['cache'] = enable
def _get_cache(self):
Expand Down Expand Up @@ -708,6 +726,7 @@ def __init__(self, **config):
self.config.setdefault('load_path', [])
self.config.setdefault('url_mapping', {})
self.config.setdefault('resolver', self.resolver_class())
self.config.setdefault('cache_file_mode', None)

self.config.update(config)

Expand Down
1 change: 1 addition & 0 deletions src/webassets/loaders.py
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,7 @@ def load_environment(self):
# Load environment settings
for setting in ('debug', 'cache', 'versions', 'url_expire',
'auto_build', 'url', 'directory', 'manifest', 'load_path',
'cache_file_mode',
# TODO: The deprecated values; remove at some point
'expire', 'updater'):
if setting in obj:
Expand Down

0 comments on commit 95dff0a

Please sign in to comment.