Пример #1
0
    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'
Пример #2
0
    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 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'
Пример #5
0
    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"
Пример #6
0
    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"
Пример #7
0
    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"
Пример #8
0
    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"
Пример #9
0
 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
Пример #10
0
 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
Пример #11
0
 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)
Пример #12
0
 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)
Пример #13
0
    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)
Пример #14
0
    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)
Пример #15
0
    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)
Пример #16
0
    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)
Пример #17
0
    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)