Skip to content

latest_dir

get_latest_directory(path)

Find the latest directory in the given path based on timestamp in the directory name.

The function expects directory names in the format ‘YYYY-MM-DD_HH-MM-SS-microseconds’. It returns the full path of the directory with the latest timestamp.

Args: path (str): The path to search for directories.

Returns:

Type Description

str or None: Full path of the latest directory, or None if no directories are found.

Raises: ValueError: If no directories are found in the given path. ValueError: If any directory name doesn’t match the expected timestamp format.

Examples:

import tempfile import pytest with tempfile.TemporaryDirectory() as tmpdir: … # Create test directories … os.mkdir(os.path.join(tmpdir, ‘2024-09-14_15-18-59_216694’)) … os.mkdir(os.path.join(tmpdir, ‘2024-09-14_16-20-00_000000’)) … os.mkdir(os.path.join(tmpdir, ‘2024-09-15_10-30-00_123456’)) … latest = get_latest_directory(tmpdir) … os.path.basename(latest) ‘2024-09-15_10-30-00_123456’ with tempfile.TemporaryDirectory() as tmpdir: … # Test with no directories … with pytest.raises(ValueError): … get_latest_directory(tmpdir) with tempfile.TemporaryDirectory() as tmpdir: … # Test with non-standard named directory … os.mkdir(os.path.join(tmpdir, ‘not_a_timestamp’)) … os.mkdir(os.path.join(tmpdir, ‘2024-09-14_15-18-59_216694’)) … with pytest.raises(ValueError): … get_latest_directory(tmpdir)

Source code in meds_torch/latest_dir.py
def get_latest_directory(path):
    """Find the latest directory in the given path based on timestamp in the directory name.

    The function expects directory names in the format 'YYYY-MM-DD_HH-MM-SS-microseconds'.
    It returns the full path of the directory with the latest timestamp.

    Args:
    path (str): The path to search for directories.

    Returns:
        str or None: Full path of the latest directory, or None if no directories are found.
    Raises:
        ValueError: If no directories are found in the given path.
        ValueError: If any directory name doesn't match the expected timestamp format.

    Examples:
    >>> import tempfile
    >>> import pytest
    >>> with tempfile.TemporaryDirectory() as tmpdir:
    ...     # Create test directories
    ...     os.mkdir(os.path.join(tmpdir, '2024-09-14_15-18-59_216694'))
    ...     os.mkdir(os.path.join(tmpdir, '2024-09-14_16-20-00_000000'))
    ...     os.mkdir(os.path.join(tmpdir, '2024-09-15_10-30-00_123456'))
    ...     latest = get_latest_directory(tmpdir)
    ...     os.path.basename(latest)
    '2024-09-15_10-30-00_123456'
    >>> with tempfile.TemporaryDirectory() as tmpdir:
    ...     # Test with no directories
    ...     with pytest.raises(ValueError):
    ...         get_latest_directory(tmpdir)
    >>> with tempfile.TemporaryDirectory() as tmpdir:
    ...     # Test with non-standard named directory
    ...     os.mkdir(os.path.join(tmpdir, 'not_a_timestamp'))
    ...     os.mkdir(os.path.join(tmpdir, '2024-09-14_15-18-59_216694'))
    ...     with pytest.raises(ValueError):
    ...         get_latest_directory(tmpdir)
    """

    def to_int(dir_name):
        # Remove '-' and '_', then convert to integer
        return int("".join(c for c in dir_name if c.isdigit()))

    def is_valid_timestamp(dir_name):
        pattern = r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}_\d+$"
        return bool(re.match(pattern, dir_name))

    directories = [d for d in os.listdir(path) if os.path.isdir(os.path.join(path, d))]

    if not directories:
        raise ValueError(f"No directories found in {path}")

    invalid_dirs = [d for d in directories if not is_valid_timestamp(d)]
    if invalid_dirs:
        raise ValueError(f"Invalid directory names found: {', '.join(invalid_dirs)}")

    latest = max(directories, key=to_int)
    return os.path.join(path, latest)