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)
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)