Exemplo n.º 1
0
    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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
    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)
Exemplo n.º 5
0
    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
Exemplo n.º 6
0
    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)
Exemplo n.º 7
0
    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
Exemplo n.º 8
0
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
Exemplo n.º 9
0
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)
Exemplo n.º 10
0
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)