# coding: utf-8 """ Module config ============= """ from configparser import NoSectionError from configparser import SafeConfigParser as ConfigParser import os import sys import fnmatch from msspec.misc import LOGGER class NoConfigFile(Exception): pass class Config(object): def __init__(self, **kwargs): self.fname = os.path.join(os.environ['HOME'], '.config/msspec/pymsspec.cfg') self.version = sys.modules['msspec'].__version__ self.config = ConfigParser() self.defaults = {'path': 'None'} self.defaults.update(kwargs) # try to load the config file, create one with defaults if none is found try: self.options = self.read() self.options.update(kwargs) self.set(**self.options) self.write() except NoConfigFile: # write a file with default options self.write(defaults=True) except NoSectionError: # the file exists but has no options for this version of pymsspec self.config.add_section(self.version) self.set(**self.defaults) self.write() def read(self): fp = self.config.read(self.fname) if len(fp) == 0: raise NoConfigFile self.version = self.config.get('general', 'version') return dict(self.config.items(self.version)) def set(self, **kwargs): if not(self.config.has_section(self.version)): self.config.add_section(self.version) for k, v in list(kwargs.items()): self.config.set(self.version, k, v) def get(self, key): return self.config.get(self.version, key) def choose_msspec_folder(self, *folders): print("Several folders containing the appropriate version of MsSpec were found.") print("Please choose one tu use:") s = "" for i, f in enumerate(folders): s += '{:d}) {:s}\n'.format(i, f) print(s) return(folders[int(input('Your choice: '))]) def find_msspec_folders(self): version = sys.modules['msspec'].__version__ folders = [] i = 0 prompt = 'Please wait while scanning the filesystem (%3d found) ' sys.stdout.write(prompt % len(folders)) sys.stdout.write('\033[s') for root, dirnames, filenames in os.walk('/home/stricot'): sys.stdout.write('\033[u\033[k') sys.stdout.write('%d folders scanned' % i) i += 1 for fn in fnmatch.filter(filenames, 'VERSION'): with open(os.path.join(root, fn), 'r') as fd: try: line = fd.readline() if line.strip() == version: folders.append(root) sys.stdout.write('\033[2000D\033[k') sys.stdout.write(prompt % len(folders)) except: pass sys.stdout.write('\033[u\033[k\n') print('Done.') return(folders) def write(self, defaults=False): if defaults: self.set(**self.defaults) with open(self.fname, 'w') as fd: self.config.write(fd) LOGGER.info("{} file written".format(self.fname)) def set_mode(self, mode="pymsspec"): if not(self.config.has_section("general")): self.config.add_section("general") self.config.set("general", "mode", str(mode)) def get_mode(self): return self.config.get("general", "mode") def set_version(self, version=""): if not(self.config.has_section("general")): self.config.add_section("general") self.config.set("general", "version", version) def remove_version(self, version): pass