from ConfigParser import ConfigParser import os import Tkinter as tk import tkSimpleDialog, tkMessageBox import platform def get_config_dir(make=False): if platform.system() == 'Windows': config_suffix = os.path.join('AppData', 'Local', 'ed_tools') else: config_suffix = '.ed_tools' return os.path.join(os.path.expanduser('~'), config_suffix) def get_settings(use_gui=True, parent=None): """ Try to read the settings from file into ConfigParser object. If the config file isn't found, initialize it. """ filename = os.path.join(get_config_dir(), 'settings.conf') settings = ConfigParser() if os.path.isfile(filename): settings.read(filename) else: try: os.makedirs(get_config_dir()) except: pass settings = update_settings(use_gui, parent) return settings def update_settings(gui=True, parent=None, settings=None): if settings is None: settings = ConfigParser() settings.add_section('ed_companion') settings.add_section('inara') if gui: dialog = ConfigDialog(parent, settings) else: _settings_prompt_cli(settings) print "To change these settings later, edit " + filename with open(os.path.join(get_config_dir(), 'settings.conf'), 'wb') as f: settings.write(f) return settings def _settings_prompt_cli(settings): settings.set('ed_companion', 'username', raw_input("Elite Username (email address): ")) settings.set('ed_companion', 'password', raw_input("Elite Password: ")) settings.set('inara', 'username', raw_input("Inara Username: ")) settings.set('inara', 'password', raw_input("Inara Password: ")) class ConfigDialog(tkSimpleDialog.Dialog): def __init__(self, parent, settings, title="Authentication Data"): self.settings = settings self.entries = [] self.data = [] tkSimpleDialog.Dialog.__init__(self, parent, title) def body(self, parent): i = 0 values = [] for section, value in (('ed_companion', 'username'), ('ed_companion', 'password'), ('inara', 'username'), ('inara', 'password')): if self.settings.has_option(section, value): values.append(self.settings.get(section, value)) else: values.append("") for field in ("Elite Username (email address):", "Elite Password:", "Inara Username:", "Inara Password:"): label = tk.Label(parent, text=field) label.grid(row=i, column=0, sticky=tk.W) entry = tk.Entry(parent, width=30) entry.insert(0, values[i]) entry.grid(row=i, column=1, sticky=tk.E) self.entries.append(entry) i += 1 return self.entries[0] def validate(self): for entry in self.entries: if entry.get().strip() == "": tkMessageBox.showwarning("Missing Data", "You must provide a value for every field.") return False return True def apply(self): self.settings.set('ed_companion', 'username', self.entries[0].get().strip()) self.settings.set('ed_companion', 'password', self.entries[1].get().strip()) self.settings.set('inara', 'username', self.entries[2].get().strip()) self.settings.set('inara', 'password', self.entries[3].get().strip())