human
Complete this python program:
def eclean_dist(destructive=False, package_names=False, size_limit=0, time_limit=0, fetch_restricted=False, exclude_file='/etc/eclean/distfiles.exclude'):
assistant
#Here is the Python program you requested.

    """Clean obsolete portage sources
    destructive
    Only keep minimum for reinstallation
    package_names
    Protect all versions of installed packages. Only meaningful if used
    with destructive=True
    size_limit <size>
    Don\t delete distfiles bigger than <size>.
    <size> is a size specification: "10M" is "ten megabytes",
    "200K" is "two hundreds kilobytes", etc. Units are: G, M, K and B.
    time_limit <time>
    Don\t delete distfiles files modified since <time>
    <time> is an amount of time: "1y" is "one year", "2w" is
    "two weeks", etc. Units are: y (years), m (months), w (weeks),
    d (days) and h (hours).
    fetch_restricted
    Protect fetch-restricted files. Only meaningful if used with
    destructive=True
    exclude_file
    Path to exclusion file. Default is /etc/eclean/distfiles.exclude
    This is the same default eclean-dist uses. Use None if this file
    exists and you want to ignore.
    Returns a dict containing the cleaned, saved, and deprecated dists:
    .. code-block:: python
    {\cleaned\: {<dist file>: <size>},
    \deprecated\: {<package>: <dist file>},
    \saved\: {<package>: <dist file>},
    \total_cleaned\: <size>}
    CLI Example:
    .. code-block:: bash
    salt \*\ gentoolkit.eclean_dist destructive=True
    """
    if (exclude_file is None):
        exclude = None
    else:
        try:
            exclude = _parse_exclude(exclude_file)
        except excludemod.ParseExcludeFileException as e:
            ret = {e: 'Invalid    exclusion    file:    {0}'.format(exclude_file)}
            return ret
    if (time_limit != 0):
        time_limit = cli.parseTime(time_limit)
    if (size_limit != 0):
        size_limit = cli.parseSize(size_limit)
    clean_size = 0
    engine = search.DistfilesSearch((lambda x: None))
    (clean_me, saved, deprecated) = engine.findDistfiles(destructive=destructive, package_names=package_names, size_limit=size_limit, time_limit=time_limit, fetch_restricted=fetch_restricted, exclude=exclude)
    cleaned = dict()
    def _eclean_progress_controller(size, key, *args):
        cleaned[key] = _pretty_size(size)
        return True
    if clean_me:
        cleaner = clean.CleanUp(_eclean_progress_controller)
        clean_size = cleaner.clean_dist(clean_me)
    ret = {'cleaned': cleaned, 'saved': saved, 'deprecated': deprecated, 'total_cleaned': _pretty_size(clean_size)}
    return ret