def load_selection_bytes():
        """
        Loads a platform/device selection from disk and returns a tuple
        ``(platform, device)``. Each entry in the tuple is either a string
        with the platform/device name, or ``None`` if no preference was set.
        """
        platform = device = None

        # Read ini file
        inifile = os.path.expanduser(SETTINGS_FILE)
        if os.path.isfile(inifile):
            config = ConfigParser()
            try:
                config.read(inifile, encoding='ascii')  # Python 3
            except TypeError:
                config.read(inifile)

            def get(section, option):
                x = None
                if config.has_section(section):
                    if config.has_option(section, option):
                        x = config.get(section, option).strip()
                        if x:
                            return x
                return None

            platform = get('selection', 'platform')
            device = get('selection', 'device')

        # Ensure platform and device are ascii compatible byte strings, or None
        if platform:
            platform = platform.encode('ascii')
        if device:
            device = device.encode('ascii')

        return platform, device
    def save_selection(platform=None, device=None):
        """"
        Stores a platform/device selection to disk.

        Both platform and device are identified by their names.
        """
        # Make sure platform and device can be stored as ascii
        if platform:
            platform = platform.encode('ascii').decode('ascii')
        if device:
            device = device.encode('ascii').decode('ascii')

        # Create configuration
        config = ConfigParser()
        config.add_section('selection')
        if platform:
            config.set('selection', 'platform', platform)
        if device:
            config.set('selection', 'device', device)

        # Write configuration to ini file
        inifile = os.path.expanduser(SETTINGS_FILE)
        with open(inifile, 'w') as configfile:
            config.write(configfile)
Пример #3
0
def _write_tar(archive_root_name, infos, filename, compression, packed_envs,
               frontend):
    if compression is None:
        compression = ""
    else:
        compression = ":" + compression
    with tarfile.open(filename, ('w%s' % compression)) as tf:
        for info in _leaf_infos(infos):
            arcname = os.path.join(archive_root_name, info.relative_path)
            frontend.info("  added %s" % arcname)
            tf.add(info.full_path, arcname=arcname)

        for pack in packed_envs:
            env_name = os.path.basename(pack)
            print('Joining packed env {}'.format(env_name))
            with tarfile.open(pack, mode='r', dereference=False) as env:
                with progressbar(env.getmembers()) as env_p:
                    for file in env_p:
                        try:
                            data = env.extractfile(file)
                            tf.addfile(file, data)
                        except KeyError:  # pragma: no cover
                            tf.addfile(file)
                    env_spec = env_name.split('.')[0].split('_')[-1]
                    dot_packed = os.path.join(archive_root_name, 'envs',
                                              env_spec, 'conda-meta',
                                              '.packed')
                    platform = '{}\n'.format(current_platform())

                    f = BytesIO()
                    f.write(platform.encode())

                    tinfo = tarfile.TarInfo(dot_packed)
                    tinfo.size = f.tell()
                    f.seek(0)
                    tf.addfile(tinfo, fileobj=f)