view profilemanager/manager.py @ 4:35dc297efa25

adding listing function and other cleanup
author Jeff Hammel <jhammel@mozilla.com>
date Mon, 05 Apr 2010 13:53:22 -0700
parents 4d1cd60dd2a1
children ca57920aa223
line wrap: on
line source

"""
manage Mozilla/Firefox profiles
"""

import os
import shutil

class ProfileNotFound(Exception):
    """
    exception when a profile is specified but is not present in a given
    .ini file
    """

class ProfileManager(object):

    def __init__(self, profiles):
        """
        - profiles: filesystem path to profiles.ini file
        """
        self.profiles = profiles
        self.profile_dir = os.path.abspath(os.path.dirname(profiles))

    ### (public) API

    def list(self, directories=False):
        """
        lists the profiles available in the config file
        """
        from ConfigParser import SafeConfigParser as ConfigParser
        parser = ConfigParser()
        parser.read(self.profiles)
        names = []
        for section in parser.sections():
            if section == 'General':
                continue
            names.append(parser.get(section, 'name'))
        return '\n'.join(names)

    def clone(self, source, dest):
        """
        clones the profile `source` and output to `dest`
        """
        source_path = self.path(source)    # fs path of the `from` profile
        dest_path = self.path(dest)  # fs path to back up to
        shutil.copytree(src_path, backup, symlinks=False)


    def backup(self, profile, dest=None):
        """
        backup the profile
        - profile: name of the profile to be backed up
        - dest: name of the destination (optional)
        """
        # XXX should use `self.clone` !
        if dest is None:
            dest = ''
        self.clone(profile, dest)
        # TODO: add something like
        # `Backup=$(profile)s.$(datestamp)s.bak`
        # to self.profiles

    def restore(self, profile, date=None, delete=False):
        """
        restore the profile from a backup
        the most recent backup is used unless `date` is given
        - date : date to restore from
        - delete : delete the backup after restoration
        """
        if delete:
            # delete the backup
            pass

    def merge(self, *profiles):
        """merge a set of profiles (not trivial!)"""
        raise NotImplementedError

    ### internal functions

    def path(self, profile):
        """returns the path to the profile"""