def SaveToFile(self, settings=None): """Save settings to the file""" if settings is None: settings = self.userSettings dirPath = GetSettingsPath() if not os.path.exists(dirPath): try: os.mkdir(dirPath) except: GError(_('Unable to create settings directory')) return try: with open(self.filePath, 'w') as f: json.dump(settings, f, indent=2, cls=SettingsJSONEncoder) except IOError as e: raise GException(e) except Exception as e: raise GException( _('Writing settings to file <%(file)s> failed.' '\n\nDetails: %(detail)s') % { 'file': self.filePath, 'detail': e }) return self.filePath
def _setupToolboxes(): """Create 'toolboxes' directory if doesn't exist.""" basePath = GetSettingsPath() path = os.path.join(basePath, 'toolboxes') if not os.path.exists(basePath): return None if _createPath(path): return path return None
def __init__(self): # settings file self.filePath = os.path.join(GetSettingsPath(), 'wx.json') self.legacyFilePath = os.path.join(GetSettingsPath(), 'wx') # key/value separator self.sep = ';' # define default settings self._defaultSettings() # -> self.defaultSettings # read settings from the file self.userSettings = copy.deepcopy(self.defaultSettings) try: self.ReadSettingsFile() except GException as e: print(e.value, file=sys.stderr) # define internal settings self._internalSettings() # -> self.internalSettings
def SaveToFile(self, settings=None): """!Save settings to the file""" if settings is None: settings = self.userSettings dirPath = GetSettingsPath() if not os.path.exists(dirPath): try: os.mkdir(dirPath) except: GError(_('Unable to create settings directory')) return try: file = open(self.filePath, "w") for group in settings.keys(): for key in settings[group].keys(): subkeys = settings[group][key].keys() file.write('%s%s%s%s' % (group, self.sep, key, self.sep)) for idx in range(len(subkeys)): value = settings[group][key][subkeys[idx]] if type(value) == types.DictType: if idx > 0: file.write('%s%s%s%s%s' % (os.linesep, group, self.sep, key, self.sep)) file.write('%s%s' % (subkeys[idx], self.sep)) kvalues = settings[group][key][subkeys[idx]].keys() srange = range(len(kvalues)) for sidx in srange: svalue = self._parseValue(settings[group][key][ subkeys[idx]][kvalues[sidx]]) file.write('%s%s%s' % (kvalues[sidx], self.sep, svalue)) if sidx < len(kvalues) - 1: file.write('%s' % self.sep) else: if idx > 0 and \ type(settings[group][key][subkeys[idx - 1]]) == types.DictType: file.write('%s%s%s%s%s' % (os.linesep, group, self.sep, key, self.sep)) value = self._parseValue( settings[group][key][subkeys[idx]]) file.write('%s%s%s' % (subkeys[idx], self.sep, value)) if idx < len(subkeys) - 1 and \ type(settings[group][key][subkeys[idx + 1]]) != types.DictType: file.write('%s' % self.sep) file.write(os.linesep) except IOError, e: raise GException(e)
def __init__(self): # settings file self.filePath = os.path.join(GetSettingsPath(), 'wx') # key/value separator self.sep = ';' # define default settings self._defaultSettings() # -> self.defaultSettings # read settings from the file self.userSettings = copy.deepcopy(self.defaultSettings) try: self.ReadSettingsFile() except GException, e: print >> sys.stderr, e.value
def _createWidgets(self): settingsFile = os.path.join(GetSettingsPath(), "wxWS") self.settsManager = WSManageSettingsWidget( parent=self, settingsFile=settingsFile, default_servers=self.default_servers) self.settingsBox = StaticBox(parent=self, id=wx.ID_ANY, label=_(" Server settings ")) self.serverText = StaticText(parent=self, id=wx.ID_ANY, label=_("Server:")) self.server = TextCtrl(parent=self, id=wx.ID_ANY) self.btn_connect = Button(parent=self, id=wx.ID_ANY, label=_("&Connect")) self.btn_connect.SetToolTip(_("Connect to the server")) if not self.server.GetValue(): self.btn_connect.Enable(False) self.infoCollapseLabelExp = _("Show advanced connection settings") self.infoCollapseLabelCol = _("Hide advanced connection settings") self.adv_conn = wx.CollapsiblePane( parent=self, label=self.infoCollapseLabelExp, style=wx.CP_DEFAULT_STYLE | wx.CP_NO_TLW_RESIZE | wx.EXPAND, ) self.MakeAdvConnPane(pane=self.adv_conn.GetPane()) self.adv_conn.Collapse(True) self.Bind(wx.EVT_COLLAPSIBLEPANE_CHANGED, self.OnAdvConnPaneChanged, self.adv_conn) self.reqDataPanel = wx.Panel(parent=self, id=wx.ID_ANY) self.layerNameBox = StaticBox(parent=self.reqDataPanel, id=wx.ID_ANY, label=_(" Layer Manager Settings ")) self.layerNameText = StaticText(parent=self.reqDataPanel, id=wx.ID_ANY, label=_("Output layer name:")) self.layerName = TextCtrl(parent=self.reqDataPanel, id=wx.ID_ANY) for ws in six.iterkeys(self.ws_panels): # set class WSPanel argument layerNameTxtCtrl self.ws_panels[ws]["panel"] = WSPanel(parent=self.reqDataPanel, web_service=ws) self.ws_panels[ws]["panel"].capParsed.connect( self.OnPanelCapParsed) self.ws_panels[ws]["panel"].layerSelected.connect( self.OnLayerSelected) # buttons self.btn_close = Button(parent=self, id=wx.ID_CLOSE) self.btn_close.SetToolTip(_("Close dialog")) # statusbar self.statusbar = wx.StatusBar(parent=self, id=wx.ID_ANY) # bindings self.btn_close.Bind(wx.EVT_BUTTON, self.OnClose) self.Bind(wx.EVT_CLOSE, self.OnClose) self.btn_connect.Bind(wx.EVT_BUTTON, self.OnConnect) self.server.Bind(wx.EVT_TEXT, self.OnServer) self.layerName.Bind(wx.EVT_TEXT, self.OnOutputLayerName) self.settsManager.settingsChanged.connect(self.OnSettingsChanged) self.settsManager.settingsSaving.connect(self.OnSettingsSaving)
def SaveToFile(self, settings=None): """Save settings to the file""" if settings is None: settings = self.userSettings dirPath = GetSettingsPath() if not os.path.exists(dirPath): try: os.mkdir(dirPath) except: GError(_('Unable to create settings directory')) return try: file = open(self.filePath, "w") for group in list(settings.keys()): for key in list(settings[group].keys()): subkeys = list(settings[group][key].keys()) file.write('%s%s%s%s' % (group, self.sep, key, self.sep)) for idx in range(len(subkeys)): value = settings[group][key][subkeys[idx]] if isinstance(value, dict): if idx > 0: file.write('%s%s%s%s%s' % (os.linesep, group, self.sep, key, self.sep)) file.write('%s%s' % (subkeys[idx], self.sep)) kvalues = list( settings[group][key][subkeys[idx]].keys()) srange = range(len(kvalues)) for sidx in srange: svalue = self._parseValue(settings[group][key][ subkeys[idx]][kvalues[sidx]]) file.write('%s%s%s' % (kvalues[sidx], self.sep, svalue)) if sidx < len(kvalues) - 1: file.write('%s' % self.sep) else: if idx > 0 and isinstance( settings[group][key][subkeys[idx - 1]], dict): file.write('%s%s%s%s%s' % (os.linesep, group, self.sep, key, self.sep)) value = self._parseValue( settings[group][key][subkeys[idx]]) file.write('%s%s%s' % (subkeys[idx], self.sep, value)) if idx < len(subkeys) - 1 and not isinstance( settings[group][key][subkeys[idx + 1]], dict): file.write('%s' % self.sep) file.write(os.linesep) except IOError as e: raise GException(e) except Exception as e: raise GException( _('Writing settings to file <%(file)s> failed.' '\n\nDetails: %(detail)s') % { 'file': self.filePath, 'detail': e }) file.close() return self.filePath
def getMenudataFile(userRootFile, newFile, fallback): """Returns path to XML file for building menu or another tree. Creates toolbox directory where user defined toolboxes should be located. Checks whether it is needed to create new XML file (user changed toolboxes) or the already generated file could be used. If something goes wrong during building or user doesn't modify menu, default file (from distribution) is returned. """ Debug.msg( 1, "toolboxes.getMenudataFile: {userRootFile}, {newFile}, {fallback}". format(**locals())) distributionRootFile = os.path.join(WXGUIDIR, 'xml', userRootFile) userRootFile = os.path.join(GetSettingsPath(), 'toolboxes', userRootFile) if not os.path.exists(userRootFile): userRootFile = None # always create toolboxes directory if does not exist yet tbDir = _setupToolboxes() if tbDir: menudataFile = os.path.join(tbDir, newFile) generateNew = False # when any of main_menu.xml or toolboxes.xml are changed, # generate new menudata.xml if os.path.exists(menudataFile): # remove menu file when there is no main_menu and toolboxes if not userToolboxesFile and not userRootFile: os.remove(menudataFile) Debug.msg( 2, "toolboxes.getMenudataFile: no user defined files, menudata deleted" ) return fallback if bool(userToolboxesFile) != bool(userRootFile): # always generate new because we don't know if there has been any change generateNew = True Debug.msg( 2, "toolboxes.getMenudataFile: only one of the user defined files" ) else: # if newer files -> generate new menudataTime = os.path.getmtime(menudataFile) if userToolboxesFile: if os.path.getmtime(userToolboxesFile) > menudataTime: Debug.msg( 2, "toolboxes.getMenudataFile: user toolboxes is newer than menudata" ) generateNew = True if userRootFile: if os.path.getmtime(userRootFile) > menudataTime: Debug.msg( 2, "toolboxes.getMenudataFile: user root file is newer than menudata" ) generateNew = True elif userToolboxesFile or userRootFile: Debug.msg(2, "toolboxes.getMenudataFile: no menudata") generateNew = True else: Debug.msg(2, "toolboxes.getMenudataFile: no user defined files") return fallback if generateNew: try: # The case when user does not have custom root # file but has toolboxes requieres regeneration. # Unfortunately, this is the case can be often: defined # toolboxes but undefined module tree file. Debug.msg(2, "toolboxes.getMenudataFile: creating a tree") tree = createTree(distributionRootFile=distributionRootFile, userRootFile=userRootFile) except ETREE_EXCEPTIONS: GError( _("Unable to parse user toolboxes XML files. " "Default files will be loaded.")) return fallback try: xml = _getXMLString(tree.getroot()) fh = open(menudataFile, 'w') fh.write(xml) fh.close() return menudataFile except: Debug.msg( 2, "toolboxes.getMenudataFile: writing menudata failed, returning fallback file" ) return fallback else: return menudataFile else: Debug.msg( 2, "toolboxes.getMenudataFile: returning menudata fallback file") return fallback
def toolboxesOutdated(): """Removes auto-generated menudata.xml to let gui regenerate it next time it starts.""" path = os.path.join(GetSettingsPath(), 'toolboxes', 'menudata.xml') if os.path.exists(path): try_remove(path)
from core.utils import GetSettingsPath, _ from core.gcmd import GError, RunCommand import grass.script.task as gtask import grass.script.core as gcore from grass.script.utils import try_remove from grass.script.core import ScriptError from core.debug import Debug # this could be placed to functions mainMenuFile = os.path.join(WXGUIDIR, 'xml', 'main_menu.xml') toolboxesFile = os.path.join(WXGUIDIR, 'xml', 'toolboxes.xml') wxguiItemsFile = os.path.join(WXGUIDIR, 'xml', 'wxgui_items.xml') moduleItemsFile = os.path.join(WXGUIDIR, 'xml', 'module_items.xml') userToolboxesFile = os.path.join(GetSettingsPath(), 'toolboxes', 'toolboxes.xml') userMainMenuFile = os.path.join(GetSettingsPath(), 'toolboxes', 'main_menu.xml') if not os.path.exists(userToolboxesFile): userToolboxesFile = None if not os.path.exists(userMainMenuFile): userMainMenuFile = None def toolboxesOutdated(): """Removes auto-generated menudata.xml to let gui regenerate it next time it starts.""" path = os.path.join(GetSettingsPath(), 'toolboxes', 'menudata.xml') if os.path.exists(path): try_remove(path)