Skip to content
Snippets Groups Projects
Commit f1a9e836 authored by John Chilton's avatar John Chilton
Browse files

Allow explicit configuration of mode to create directories with.

By default pulsar will use 0777 with current umask filtered out.

Closes #65.
parent 0a9f82ca
No related branches found
No related tags found
No related merge requests found
......@@ -66,6 +66,12 @@ def _get_default_options(conf):
if "assign_ids" in conf:
options["assign_ids"] = conf["assign_ids"]
options["debug"] = conf.get("debug", False)
# mode to create job directories with, if None just use
# default (usually 0777 with umask applied).
job_directory_mode = conf.get("job_directory_mode", None)
options["job_directory_mode"] = None
if job_directory_mode is not None:
options["job_directory_mode"] = int(job_directory_mode, 8)
return options
......
......@@ -56,6 +56,7 @@ class BaseManager(ManagerInterface):
self.name = name
self.persistence_directory = getattr(app, 'persistence_directory', None)
self.lock_manager = locks.LockManager()
self._directory_maker = DirectoryMaker(kwds.get("job_directory_mode", None))
self._setup_staging_directory(app.staging_directory)
self.id_assigner = get_id_assigner(kwds.get("assign_ids", None))
self.__init_galaxy_system_properties(kwds)
......@@ -122,12 +123,17 @@ class BaseManager(ManagerInterface):
def _setup_staging_directory(self, staging_directory):
assert staging_directory is not None
if not exists(staging_directory):
makedirs(staging_directory)
self._directory_maker.make(staging_directory, recursive=True)
assert isdir(staging_directory)
self.staging_directory = staging_directory
def _job_directory(self, job_id):
return JobDirectory(self.staging_directory, job_id, self.lock_manager)
return JobDirectory(
self.staging_directory,
job_id,
self.lock_manager,
self._directory_maker,
)
job_directory = _job_directory
......@@ -183,8 +189,15 @@ class BaseManager(ManagerInterface):
class JobDirectory(RemoteJobDirectory):
def __init__(self, staging_directory, job_id, lock_manager=None):
def __init__(
self,
staging_directory,
job_id,
lock_manager=None,
directory_maker=None
):
super(JobDirectory, self).__init__(staging_directory, remote_id=job_id, remote_sep=sep)
self._directory_maker = directory_maker or DirectoryMaker()
self.lock_manager = lock_manager
# Assert this job id isn't hacking path somehow.
assert job_id == basename(job_id)
......@@ -248,11 +261,11 @@ class JobDirectory(RemoteJobDirectory):
return rmtree(self.path)
def setup(self):
os.mkdir(self.job_directory)
self._directory_maker.make(self.job_directory)
def make_directory(self, name):
path = self._job_file(name)
os.mkdir(path)
self._directory_maker.make(path)
def lock(self, name=".state"):
assert self.lock_manager, "Can only use job directory locks if lock manager defined."
......@@ -342,3 +355,18 @@ def __posix_to_local_path(path, local_path_module=os.path):
(path, base) = posixpath.split(path)
partial_path.appendleft(base)
return local_path_module.join(*partial_path)
class DirectoryMaker(object):
def __init__(self, mode=None):
self.mode = mode
def make(self, path, recursive=False):
makedir_args = [path]
if self.mode is not None:
makedir_args.append(self.mode)
if recursive:
makedirs(*makedir_args)
else:
os.mkdir(*makedir_args)
......@@ -23,6 +23,10 @@ paste.app_factory = pulsar.web.wsgi:app_factory
## to an absolute path, such as /tmp/pulsar_staging or C:\\pulsar_staging
#staging_directory = files/staging
## Mode to create job releated directories with. If unset
## will just use 0777 with umask mask applied.
#job_directory_mode = 0777
## Private token that must be sent as part of the request to
## authorize use. If security is important, please use this in
## combination with SSL.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment