Source code for femagtools.config

# -*- coding: utf-8 -*-
"""
    femagtools.config
    ~~~~~~~~~~~~~~~~~

    Config FEMAG



"""
import sys
import platform
import os
try:
    # Load python 2 config parser
    import ConfigParser as configparser
except ImportError:
    import configparser


[docs]def is_exe(fpath): return os.path.isfile(fpath) and os.access(fpath, os.X_OK)
[docs]def which(program): """returns complete pathname of program or None if not found""" fpath, fname = os.path.split(program) if fpath: if is_exe(program): return program else: for path in os.environ["PATH"].split(os.pathsep): path = path.strip('"') exe_file = os.path.join(path, program) if is_exe(exe_file): return exe_file return None
[docs]def get_executable(): """returns platform specific pathname of femag executable""" if platform.system() == "Windows": wfemag = which("wfemagw64.exe") if not wfemag: raise Exception("wfemagw64 not found in {}".format( os.environ["PATH"])) # TODO: for l in ['libstdc++-6.dll', 'libgcc_s_dw2-1.dll']: # lib = which(l) # if not lib: # raise Exception("{} not found in {}".format( # l, os.environ["PATH"])) # transfer_files.append(lib) return wfemag xfemag = which("xfemag64") if not xfemag: raise Exception("xfemag64 not found in {}".format( os.environ["PATH"])) return xfemag
[docs]def get_femag(): """returns femag command""" if sys.platform.startswith('linux'): if platform.machine() == 'x86_64': return 'xfemag64' return 'xfemag' if platform.machine() == 'AMD64': return 'wfemagw64' return 'wfemag'
[docs]class Config(dict): def __init__(self, defaults=None, configfile=None): dict.__init__(self, defaults or {})
[docs] def from_ini_file(self, ini_file): if not ini_file: return config = configparser.ConfigParser() config.read(ini_file) # Only get config for this engine section = self['ENGINE'] try: if config.items(section.lower()): engine = section.lower() else: if config.items(section.upper()): engine = section.upper() else: return except configparser.NoSectionError: try: config[section.upper()] engine = section.upper() except: return for key, value in config.items(engine): if ',' in value: self[key.upper()] = value.split(',') continue self[key.upper()] = value
[docs] def from_ini_file_all(self, ini_file): if not ini_file: return config = configparser.ConfigParser() config.read(ini_file) for group in config: for key in config[group]: self[key.upper()] = config[group][key]