Skip to content
Snippets Groups Projects
Select Git revision
  • 482d91ca67a0efca851492d757818e0fd66c6445
  • master default protected
  • develop protected
  • conda
  • 3.6.0
  • 3.5.0
  • 3.4.2
  • 3.4.1
  • 3.4.0
  • 3.4.0-rc2
  • 3.4.0-rc
  • 3.3.1
  • 3.3.1-rc
  • 3.3.0
  • 3.3.0-rc2
  • 3.3.0-rc
  • 3.2.1
  • 3.2.1-rc
  • 3.2.0
  • 3.2.0-rc
  • 3.1.1
  • 3.1.1-rc2
  • 3.1.1-rc
  • 3.1.0
24 results

FindPython.cmake

Blame
  • pathtools.py 5.64 KiB
    """Helper functions to work with filenames."""
    
    import platform
    from os import sep
    import os.path
    
    from .log import LOG as log
    
    
    def parse_path(path):
        """Parse a path into its components.
    
        If the path doesn't end with the pathsep, it is assumed being a file!
        No tests based on existing files are done, as this is supposed to also work
        on path strings that don't exist on the system running this code.
    
        Returns
        -------
        parsed = {
            'orig' : str   # string as passed into this function
            'full' : str   # separators adjusted to current platform
            'path' : str   # like previous, up to (including) the last separator
            'dname' : str  # segment between the last two separators (directory)
            'fname' : str  # segment after the last separator (filename)
            'ext' : str    # filename extension, containing max 1 dot (included)
        }
    
        Example
        -------
    
        >>> path_to_file = parse_path('/tmp/foo/file')
        >>> path_to_dir = parse_path('/tmp/foo/')
    
        orig : The full path string as given to this function.
        full : Backslashes replaced by the current separator.
    
        path : 'full' up to the last separator (included)
        >>> path_to_file['path']
        '/tmp/foo/'
        >>> path_to_dir['path']
        '/tmp/foo/'
    
        dname : The last directory of the path in 'full'.
        >>> path_to_file['dname']
        'foo'
        >>> path_to_dir['dname']
        'foo'
    
        fname : The filename of 'full', empty in case of a directory.
        >>> path_to_file['fname']
        'file'
        >>> path_to_dir['fname']
        ''
        """
        parsed = {}
        parsed['orig'] = path
        path = path.replace('\\', sep)
        parsed['full'] = path
        parsed['path'] = os.path.dirname(path) + sep
        parsed['fname'] = os.path.basename(path)
        parsed['dname'] = os.path.basename(os.path.dirname(parsed['path']))
        parsed['ext'] = os.path.splitext(parsed['fname'])[1]
        return parsed
    
    
    def jython_fiji_exists(path):
        """Wrapper to work around problems with Jython 2.7 in Fiji.
    
        In current Fiji, the Jython implementation of os.path.exists(path) raises a
        java.lang.AbstractMethodError iff 'path' doesn't exist. This function
        catches the exception to allow normal usage of the exists() call.
        """
        try:
            return os.path.exists(path)
        except java.lang.AbstractMethodError:
            return False
    
    
    def listdir_matching(path, suffix):
        """Get a list of files in a directory matching a given suffix.
    
        Parameters
        ----------
        path : str
            The directory to scan for files.
        suffix : str
            The suffix to match filenames against.
    
        Returns
        -------
        list
            All file names in the directory matching the suffix (without path!).
        """
        matching_files = list()
        for candidate in os.listdir(path):
            if candidate.lower().endswith(suffix.lower()):
                # log.debug("Found file %s", candidate)
                matching_files.append(candidate)
    
        return matching_files
    
    
    def image_basename(orig_name):
        """Return the file name component without suffix(es).
    
        Strip away the path and suffix of a given file name, doing a special
        treatment for the composite suffix ".ome.tif(f)" which will be fully
        stripped as well.
    
        Parameters
        ----------
        orig_name : str
    
        Example
        -------
        >>> image_basename('/path/to/some_funny_image_file_01.png')
        'some_funny_image_file_01'
    
        >>> image_basename('some-more-complex-stack.ome.tif')
        'some-more-complex-stack'
    
        >>> image_basename('/tmp/FoObAr.OMe.tIf')
        'FoObAr'
        """
        base = os.path.splitext(os.path.basename(orig_name))[0]
        if base.lower().endswith('.ome'):
            base = base[:-4]
        return base
    
    
    def gen_name_from_orig(path, orig_name, tag, suffix):
        """Derive a file name from a given input file, an optional tag and a suffix.
    
        Parameters
        ----------
        path : str or object that can be cast to a str
            The output path.
        orig_name : str or object that can be cast to a str
            The input file name, may contain arbitrary path components.
        tag : str
            An optional tag to be added at the end of the new file name, can be used
            to denote information like "-avg" for an average projection image.
        suffix : str
            The new file name suffix, which also sets the file format for BF.
    
        Returns
        -------
        out_file : str
            The newly generated file name with its full path.
        """
        name = os.path.join(path, image_basename(orig_name) + tag + suffix)
        return name
    
    
    def derive_out_dir(in_dir, out_dir):
        """Derive `out_dir` from its own value and the value of `in_dir`.
    
        In case the supplied value of `out_dir` is one of '-' or 'NONE', the
        returned value will be set to `in_dir`. Otherwise the value of `out_dir`
        will be returned unchanged.
    
        Parameters
        ----------
        in_dir : str
            The full path to the input directory.
        out_dir : str
            Either the full path to an output directory or one of '-' or 'NONE'.
    
        Returns
        -------
        str
            The full path to the directory to be used for output and temp files.
        """
        if out_dir in ["-", "NONE"]:
            out_dir = in_dir
            log.info("No output directory given, using input dir [%s].", out_dir)
        else:
            log.info("Using directory [%s] for results and temp files.", out_dir)
    
        return out_dir
    
    
    # pylint: disable-msg=C0103
    #   we use the variable name 'exists' in its common spelling (lowercase), so
    #   removing this workaround will be straightforward at a later point
    if platform.python_implementation() == 'Jython':
        # pylint: disable-msg=F0401
        #   java.lang is only importable within Jython, pylint would complain
        import java.lang
        exists = jython_fiji_exists
    else:
        exists = os.path.exists