def testDefaultSessionsDir(self): from omero.util import get_user_dir from path import path # Default store sessions dir is under user dir store = self.cli.controls['sessions'].store(None) assert store.dir == path(get_user_dir()) / 'omero' / 'sessions'
def testCustomSessionsDir(self, tmpdir, monkeypatch, environment, session_args): from argparse import Namespace from omero.util import get_user_dir from path import path for var in environment.keys(): if environment[var]: monkeypatch.setenv(var, tmpdir / environment.get(var)) else: monkeypatch.delenv(var, raising=False) # args.session_dir sets the sessions dir args = Namespace() if session_args: setattr(args, session_args, tmpdir / session_args) if environment.get('OMERO_SESSION_DIR') or session_args: pytest.deprecated_call(self.cli.controls['sessions'].store, args) store = self.cli.controls['sessions'].store(args) # By order of precedence if environment.get('OMERO_SESSIONDIR'): sdir = path(tmpdir) / environment.get('OMERO_SESSIONDIR') elif environment.get('OMERO_SESSION_DIR'): sdir = (path(tmpdir) / environment.get('OMERO_SESSION_DIR') / 'omero' / 'sessions') elif session_args: sdir = path(getattr(args, session_args)) / 'omero' / 'sessions' elif environment.get('OMERO_USERDIR'): sdir = path(tmpdir) / environment.get('OMERO_USERDIR') / 'sessions' else: sdir = path(get_user_dir()) / 'omero' / 'sessions' assert store.dir == sdir
def testCustomSessionsDir( self, tmpdir, monkeypatch, environment, session_args): from argparse import Namespace from omero.util import get_user_dir from path import path for var in environment.keys(): if environment[var]: monkeypatch.setenv(var, tmpdir / environment.get(var)) else: monkeypatch.delenv(var, raising=False) # args.session_dir sets the sessions dir args = Namespace() if session_args: setattr(args, session_args, tmpdir / session_args) if environment.get('OMERO_SESSION_DIR') or session_args: pytest.deprecated_call(self.cli.controls['sessions'].store, args) store = self.cli.controls['sessions'].store(args) # By order of precedence if environment.get('OMERO_SESSIONDIR'): sdir = path(tmpdir) / environment.get('OMERO_SESSIONDIR') elif environment.get('OMERO_SESSION_DIR'): sdir = (path(tmpdir) / environment.get('OMERO_SESSION_DIR') / 'omero' / 'sessions') elif session_args: sdir = path(getattr(args, session_args)) / 'omero' / 'sessions' elif environment.get('OMERO_USERDIR'): sdir = path(tmpdir) / environment.get('OMERO_USERDIR') / 'sessions' else: sdir = path(get_user_dir()) / 'omero' / 'sessions' assert store.dir == sdir
def testTmpdir2805_1(self, monkeypatch, tmpdir): monkeypatch.setenv('OMERO_TEMPDIR', tmpdir) monkeypatch.delenv('OMERO_USERDIR', raising=False) tmpfile = tmpdir / 'omero' tmpfile.write('') assert manager.tmpdir() == path(get_user_dir()) / "omero" / "tmp"
def testTmpdir2805_1(self, monkeypatch, tmpdir): monkeypatch.setenv(native_str('OMERO_TEMPDIR'), native_str(tmpdir)) monkeypatch.delenv(native_str('OMERO_USERDIR'), raising=False) tmpfile = old_div(tmpdir, 'omero') tmpfile.write('') value = pytest.deprecated_call(manager.tmpdir) assert value == path(get_user_dir()) / "omero" / "tmp"
def testTmpdir2805_2(self, monkeypatch, tmpdir): monkeypatch.setenv('OMERO_TEMPDIR', str(tmpdir)) monkeypatch.delenv('OMERO_USERDIR', raising=False) tempdir = old_div(tmpdir, 'omero') tempdir.mkdir() tmpfile = old_div(tempdir, 'tmp') tmpfile.write('') assert manager.tmpdir() == path(get_user_dir()) / "omero" / "tmp"
def __init__(self, dir = None): """ """ self.logger = logging.getLogger(make_logname(self)) if dir == None: dir = get_user_dir() self.dir = path(dir) / "omero" / "sessions" if not self.dir.exists(): self.dir.makedirs() try: self.dir.chmod(0700) except: print "WARN: failed to chmod %s" % self.dir
def open_config(self, args): if args.source: cfg_xml = path(args.source) if not cfg_xml.exists(): self.ctx.die(124, "File not found: %s" % args.source) else: grid_dir = self.ctx.dir / "etc" / "grid" if grid_dir.exists(): cfg_xml = grid_dir / "config.xml" else: userdir = path(get_user_dir()) usr_xml = userdir / "omero" / "config.xml" self.ctx.err("%s not found; using %s" % (grid_dir, usr_xml)) cfg_xml = usr_xml try: return ConfigXml(str(cfg_xml)) except portalocker.LockException: self.ctx.die(112, "Could not acquire lock on %s" % cfg_xml)
def open_config(self, args): if args.source: cfg_xml = path(args.source) if not cfg_xml.exists(): self.ctx.die(124, "File not found: %s" % args.source) else: grid_dir = self.ctx.dir / "etc" / "grid" if grid_dir.exists(): cfg_xml = grid_dir / "config.xml" else: userdir = path(get_user_dir()) usr_xml = userdir / "omero"/ "config.xml" self.ctx.err("%s not found; using %s" % (grid_dir, usr_xml)) cfg_xml = usr_xml try: return ConfigXml(str(cfg_xml)) except portalocker.LockException: self.ctx.die(112, "Could not acquire lock on %s" % cfg_xml)
def testTmpdirEnvironment(self, monkeypatch, tmpdir, environment): for var in environment.keys(): if environment[var]: monkeypatch.setenv(var, tmpdir / environment.get(var)) else: monkeypatch.delenv(var, raising=False) if environment.get('OMERO_TEMPDIR'): pytest.deprecated_call(manager.tmpdir) if environment.get('OMERO_TMPDIR'): tdir = tmpdir / environment.get('OMERO_TMPDIR') elif environment.get('OMERO_TEMPDIR'): tdir = tmpdir / environment.get('OMERO_TEMPDIR') / "omero" / "tmp" elif environment.get('OMERO_USERDIR'): tdir = tmpdir / environment.get('OMERO_USERDIR') / "tmp" else: tdir = path(get_user_dir()) / "omero" / "tmp" assert manager.tmpdir() == str(tdir)
def testTmpdirEnvironment(self, monkeypatch, tmpdir, environment): for var in list(environment.keys()): if environment[var]: monkeypatch.setenv( native_str(var), native_str(old_div(tmpdir, environment.get(var)))) else: monkeypatch.delenv(native_str(var), raising=False) if environment.get('OMERO_TEMPDIR'): value = pytest.deprecated_call(manager.tmpdir) else: value = manager.tmpdir() if environment.get('OMERO_TMPDIR'): tdir = old_div(tmpdir, environment.get('OMERO_TMPDIR')) elif environment.get('OMERO_TEMPDIR'): tdir = tmpdir / environment.get('OMERO_TEMPDIR') / "omero" / "tmp" elif environment.get('OMERO_USERDIR'): tdir = tmpdir / environment.get('OMERO_USERDIR') / "tmp" else: tdir = path(get_user_dir()) / "omero" / "tmp" assert value == str(tdir)
def tmpdir(self): """ Returns a platform-specific user-writable temporary directory First, the value of "OMERO_TEMPDIR" is attempted (if available), then user's home directory, then the global temp director. Typical errors for any of the possible temp locations are: * non-existence * inability to lock See: http://trac.openmicroscopy.org.uk/ome/ticket/1653 """ locktest = None omerotemp = os.environ.get("OMERO_TEMPDIR", None) homeprop = None try: homeprop = get_user_dir() except: pass # ticket:3194, ticket:5583 tempprop = tempfile.gettempdir() targets = [omerotemp, homeprop, tempprop] name = None choice = None locktest = None for target in targets: if target is None: continue if choice is not None: break try: # 2805 omero_dir = path(target) / "omero" if omero_dir.exists() and not omero_dir.isdir(): self.logger.debug(""""omero" is not a directory: %s""" % omero_dir) continue tmp_dir = omero_dir / "tmp" if tmp_dir.exists() and not tmp_dir.isdir(): self.logger.debug(""""tmp" is not a directory: %s""" % tmp_dir) continue try: name = self.mkstemp(prefix=".lock_test", suffix=".tmp", dir=target) locktest = open(name, "a+") portalocker.lock(locktest, portalocker.LOCK_EX | portalocker.LOCK_NB) locktest.close() locktest = None choice = target self.logger.debug("Chose gloabl tmpdir: %s", choice) finally: if locktest is not None: try: locktest.close() except: self.logger.warn("Failed to close locktest: %s", name, exc_info=True) if name is not None: try: os.remove(name) except: self.logger.debug("Failed os.remove(%s)", name) except Exception, e: if "Operation not permitted" in str(e) or \ "Operation not supported" in str(e): # This is the issue described in ticket:1653 # To prevent printing the warning, we just continue # here. self.logger.debug("%s does not support locking.", target) else: self.logger.warn("Invalid tmp dir: %s" % target, exc_info=True)
def tmpdir(self): """ Returns a platform-specific user-writable temporary directory First, the value of "OMERO_TEMPDIR" is attempted (if available), then user's home directory, then the global temp director. Typical errors for any of the possible temp locations are: * non-existence * inability to lock See: http://trac.openmicroscopy.org.uk/ome/ticket/1653 """ locktest = None omerotemp = os.environ.get("OMERO_TEMPDIR", None) homeprop = None try: homeprop = get_user_dir() except: pass # ticket:3194, ticket:5583 tempprop = tempfile.gettempdir() targets = [omerotemp, homeprop, tempprop] name = None choice = None locktest = None for target in targets: if target is None: continue if choice is not None: break try: # 2805 omero_dir = path(target) / "omero" if omero_dir.exists() and not omero_dir.isdir(): self.logger.debug(""""omero" is not a directory: %s""" % omero_dir) continue tmp_dir = omero_dir / "tmp" if tmp_dir.exists() and not tmp_dir.isdir(): self.logger.debug(""""tmp" is not a directory: %s""" % tmp_dir) continue try: name = self.mkstemp(prefix=".lock_test", suffix=".tmp", dir=target) locktest = open(name, "a+") portalocker.lock(locktest, portalocker.LOCK_EX|portalocker.LOCK_NB) locktest.close() locktest = None choice = target self.logger.debug("Chose gloabl tmpdir: %s", choice) finally: if locktest is not None: try: locktest.close() except: self.logger.warn("Failed to close locktest: %s", name, exc_info = True) if name is not None: try: os.remove(name) except: self.logger.debug("Failed os.remove(%s)", name) except Exception, e: if "Operation not permitted" in str(e) or \ "Operation not supported" in str(e): # This is the issue described in ticket:1653 # To prevent printing the warning, we just continue # here. self.logger.debug("%s does not support locking.", target) else: self.logger.warn("Invalid tmp dir: %s" % target, exc_info = True)