コード例 #1
0
 def save_credentials_changed(self, state):
     if state == 0:
         self._remove_auth_creds()
     self._save_creds = state > 0
     setPluginSetting(SAVE_CREDS_KEY,
                      self._save_creds,
                      namespace=SETTINGS_NAMESPACE)
コード例 #2
0
 def okPressed(self):
     self.url = self.comboBox.currentText()
     endpoints = pluginSetting(self.ENDPOINTS)
     if endpoints:
         endpoints = set(endpoints.split(";"))
         endpoints.add(self.url)
         setPluginSetting(self.ENDPOINTS, ";".join(endpoints))
     else:
         setPluginSetting(self.ENDPOINTS, self.url)
     self.close()
コード例 #3
0
    def unload(self):
        """Removes the plugin menu item and icon from QGIS GUI."""

        self.provider.logoutLayerWidgets()

        # Delete the contents of the thumbnail temp directory
        if os.path.exists(TEMP_CACHE_DIR) and 'p_thumbcache' in TEMP_CACHE_DIR:
            for f_name in os.listdir(TEMP_CACHE_DIR):
                f_path = os.path.join(TEMP_CACHE_DIR, f_name)
                try:
                    shutil.rmtree(f_path)
                except OSError:
                    os.remove(f_path)

        # noinspection PyBroadException
        # try:
        #     from .tests import testerplugin
        #     from qgistester.tests import removeTestModule
        #     removeTestModule(testerplugin, P_E)
        # except:
        #     pass

        # noinspection PyBroadException
        # try:
        #     from lessons import removeLessonsFolder
        #     folder = os.path.join(pluginPath, "_lessons")
        #     removeLessonsFolder(folder)
        # except:
        #     pass

        # unregisterFunctions()

        removeSettingsMenu(P_E, self.iface.removePluginWebMenu)
        # removeHelpMenu(P_E, self.iface.removePluginWebMenu)
        removeAboutMenu(P_E, self.iface.removePluginWebMenu)

        for action in self.actions:
            self.iface.removePluginWebMenu(self.tr('&{0}'.format(P_E)), action)
            self.iface.removeToolBarIcon(action)

        # remove the toolbar
        if self.toolbar is not None:
            del self.toolbar

        if self.dock_widget is not None:
            setPluginSetting(DOCK_SHOWN_STATE,
                             self.dock_widget.isVisible(),
                             namespace=SETTINGS_NAMESPACE)
            self.iface.removeDockWidget(self.dock_widget)
            del self.dock_widget

        sys.excepthook = self.qgis_hook

        QgsProject.instance().projectSaved.disconnect(self.project_saved)
コード例 #4
0
 def initConfigParams(self):
     folder = pluginSetting("gpkgfolder")
     if folder.strip() == "":
         setPluginSetting(
             "gpkgfolder",
             os.path.join(os.path.expanduser('~'), 'geogig', 'repos'))
     folder = pluginSetting("difffolder")
     if folder.strip() == "":
         setPluginSetting(
             "difffolder",
             os.path.join(os.path.expanduser('~'), 'geogig', 'diff'))
コード例 #5
0
    def setUpClass(cls):
        # do workspace popuplation
        super(DeleteTests, cls).setUpClass()

        cls.ws = cls.cat.get_workspaces(WORKSPACE)[0]        

        # load project
        projectFile = os.path.join(os.path.dirname(os.path.abspath(__file__)), "data", "test.qgs")
        if os.path.normcase(projectFile) != os.path.normcase(QgsProject.instance().fileName()):
            iface.addProject(projectFile)
        # set flags to instruct GUI interaction
        cls.confirmDelete = pluginSetting("ConfirmDelete")
        setPluginSetting("ConfirmDelete", False)
コード例 #6
0
def setRepositoryUrl():
    """Adds Boundless repository URL to Connect settings"""
    fName = os.path.join(QgsApplication.qgisSettingsDirPath(), repoUrlFile)
    if os.path.exists(fName):
        cfg = ConfigParser()
        cfg.read(fName)
        url = cfg.get('general', 'repoUrl')
        os.remove(fName)
    else:
        url = pluginSetting('repoUrl')

    setPluginSetting('repoUrl', url)
    return url
コード例 #7
0
    def testCustomRepoUrl(self):
        """Test that Connect read custom repository URL and apply it"""
        oldRepoUrl = pluginSetting('repoUrl')
        setPluginSetting('repoUrl', 'test')
        self.assertEqual('test', pluginSetting('repoUrl'))

        fName = os.path.join(QgsApplication.qgisSettingsDirPath(), repoUrlFile)
        with open(fName, 'w') as f:
            f.write('[general]\nrepoUrl=http://dummyurl.com')
        utils.setRepositoryUrl()

        self.assertTrue('http://dummyurl.com', pluginSetting('repoUrl'))
        setPluginSetting('repoUrl', oldRepoUrl)
        if os.path.isfile(fName):
            os.remove(fName)
コード例 #8
0
    def setUpClass(cls):
        # do workspace popuplation
        super(DeleteTests, cls).setUpClass()

        cls.ws = cls.cat.get_workspaces(WORKSPACE)[0]

        # load project
        projectFile = os.path.join(os.path.dirname(os.path.abspath(__file__)),
                                   "data", "test.qgs")
        if os.path.normcase(projectFile) != os.path.normcase(
                QgsProject.instance().fileName()):
            iface.addProject(projectFile)
        # set flags to instruct GUI interaction
        cls.confirmDelete = pluginSetting("ConfirmDelete")
        setPluginSetting("ConfirmDelete", False)
コード例 #9
0
 def setUpClass(cls):
     cls.explorer = GeoServerExplorer()
     # Disable cache
     cls.cache_time = pluginSetting("AuthCatalogXMLCacheTime")
     setPluginSetting("AuthCatalogXMLCacheTime", 1)
     cls.catWrapper = utils.getGeoServerCatalog()
     cls.cat = cls.catWrapper.catalog
     utils.populateCatalog(cls.cat)
     cls.catalogItem = GsCatalogItem(cls.cat, "catalog")
     cls.explorer.explorerTree.gsItem.addChild(cls.catalogItem)
     cls.catalogItem.populate()
     cls.tree = cls.explorer.tree
     projectFile = os.path.join(os.path.dirname(os.path.abspath(__file__)),
                                "data", "test.qgs")
     iface.addProject(projectFile)
コード例 #10
0
def askForFiles(parent, msg=None, isSave=False, allowMultiple=False, exts="*"):
    '''
    Asks for a file or files, opening the corresponding dialog with the last path that was selected
    when this same function was invoked from the calling method.

    :param parent: The parent window
    :param msg: The message to use for the dialog title
    :param isSave: true if we are asking for file to save
    :param allowMultiple: True if should allow multiple files to be selected. Ignored if isSave == True
    :param exts: Extensions to allow in the file dialog. Can be a single string or a list of them.
    Use "*" to add an option that allows all files to be selected

    :returns: A string with the selected filepath or an array of them, depending on whether allowMultiple is True of False
    '''
    msg = msg or 'Select file'
    caller = _callerName().split(".")
    name = "/".join([LAST_PATH, caller[-1]])
    namespace = caller[0]
    path = pluginSetting(name, namespace)
    f = None
    if not isinstance(exts, list):
        exts = [exts]
    extString = ";; ".join([
        " %s files (*.%s)" % (e.upper(), e) if e != "*" else "All files (*.*)"
        for e in exts
    ])
    if allowMultiple:
        ret = QtWidgets.QFileDialog.getOpenFileNames(parent, msg, path,
                                                     '*.' + extString)
        if ret:
            f = ret[0]
        else:
            f = ret = None
    else:
        if isSave:
            ret = QtWidgets.QFileDialog.getSaveFileName(
                parent, msg, path, '*.' + extString) or None
            if ret is not None and not ret.endswith(exts[0]):
                ret += "." + exts[0]
        else:
            ret = QtWidgets.QFileDialog.getOpenFileName(
                parent, msg, path, '*.' + extString) or None
        f = ret

    if f is not None:
        setPluginSetting(name, os.path.dirname(f), namespace)

    return ret
コード例 #11
0
def screenshotsPluginBaseFolder():
    """Returns the base folder where to store sessions and data.
    If only folder name specified instead of full path, the folder
    will be created in the $HOME
    """
    folder = pluginSetting("BaseFolder")
    # check if the value is only a basename and create directory in $HOME
    if not QDir(folder).exists():
        if folder == os.path.basename(folder):
            folder = os.path.join(os.path.expanduser("~"), folder)
            setPluginSetting("BaseFolder", folder)

    if not QDir(folder).exists():
        QDir().mkpath(folder)

    return QDir.toNativeSeparators(folder)
コード例 #12
0
def getUserInfo():
    """Return user information from the settings dialog"""
    user = pluginSetting(USERNAME).strip()
    email = pluginSetting(EMAIL).strip()
    if not (user and email):
        configdlg = UserConfigDialog(iface.mainWindow())
        configdlg.exec_()
        if configdlg.user is not None:
            user = configdlg.user
            email = configdlg.email
            setPluginSetting(USERNAME, user)
            setPluginSetting(EMAIL, email)
            return user, email
        else:
            return None, None
    return user, email
コード例 #13
0
ファイル: utils.py プロジェクト: gioman/qgis-lessons-plugin
def lessonPluginBaseFolder():
    """Returns the base folder where to store lessons and data.
    If only folder name specified instead of full path, the folder
    will be created in the $HOME
    """
    folder = pluginSetting("BaseFolder")
    # check if the value is only a basename and create directory in $HOME
    if not QDir(folder).exists():
        if folder == os.path.basename(folder):
            folder = os.path.join(os.path.expanduser("~"), folder)
            setPluginSetting("BaseFolder", folder)

    if not QDir(folder).exists():
        QDir().mkpath(folder)

    return QDir.toNativeSeparators(folder)
コード例 #14
0
def getUserInfo():
    """Return user information from the settings dialog"""
    user = pluginSetting(USERNAME).strip()
    email = pluginSetting(EMAIL).strip()
    if not (user and email):
        configdlg = UserConfigDialog(iface.mainWindow())
        configdlg.exec_()
        if configdlg.user is not None:
            user = configdlg.user
            email = configdlg.email
            setPluginSetting(USERNAME, user)
            setPluginSetting(EMAIL, email)
            return user, email
        else:
            return None, None
    return user, email
コード例 #15
0
def askForFolder(parent, msg=None):
    '''
    Asks for a folder, opening the corresponding dialog with the last path that was selected
    when this same function was invoked from the calling method

    :param parent: The parent window
    :param msg: The message to use for the dialog title
    '''
    msg = msg or 'Select folder'
    caller = _callerName().split(".")
    name = "/".join([LAST_PATH, caller[-1]])
    namespace = caller[0]
    path = pluginSetting(name, namespace)
    folder = QtWidgets.QFileDialog.getExistingDirectory(parent, msg, path)
    if folder:
        setPluginSetting(name, folder, namespace)
    return folder
コード例 #16
0
    def setUpClass(cls):
        # setup auth configuration
        utils.initAuthManager()
        utils.populatePKITestCerts()

        # do workspace population
        super(PkiDeleteTests, cls).setUpClass()

        cls.ws = cls.cat.get_workspace(utils.WORKSPACE)
        assert cls.ws is not None

        # load project
        projectFile = os.path.join(os.path.dirname(os.path.abspath(__file__)),
                                   "data", "test.qgs")
        if os.path.normcase(projectFile) != os.path.normcase(
                QgsProject.instance().fileName()):
            iface.addProject(projectFile)
        # set flags to instruct GUI interaction
        cls.confirmDelete = pluginSetting("ConfirmDelete")
        setPluginSetting("ConfirmDelete", False)
コード例 #17
0
 def testPreuploadVectorHook(self):
     if not catalog.processingOk:
         print 'skipping testPreuploadVectorHook, processing not installed'
         return
     oldHookFile = pluginSetting("PreuploadVectorHook")
     hookFile = os.path.join(os.path.dirname(__file__), "resources",
                             "vector_hook.py")
     setPluginSetting("PreuploadVectorHook", hookFile)
     try:
         hookFile = pluginSetting("PreuploadVectorHook")
         try:
             self.cat.getAlgorithmFromHookFile(hookFile)
         except:
             raise Exception("Processing hook cannot be executed")
         self.cat.publishLayer(PT1, self.ws, name=HOOK)
         self.assertIsNotNone(self.cat.catalog.get_layer(HOOK))
         self.cat.addLayerToProject(HOOK)
         layer = layers.resolveLayer(HOOK)
         self.assertEqual(1, layer.featureCount())
         QgsMapLayerRegistry.instance().removeMapLayer(layer.id())
     finally:
         setPluginSetting("PreuploadVectorHook", oldHookFile)
         self.cat.catalog.delete(self.cat.catalog.get_layer(HOOK),
                                 recurse=True)
コード例 #18
0
 def testDeleteLayerAndStyle(self):
     # step 1: publish a layer. publish load layer and style
     self.catWrapper.publishLayer(PT1, self.ws, name=PT1)
     layer = self.cat.get_layer(PT1)
     self.assertIsNotNone(layer)
     style = self.cat.get_styles(PT1)[0]
     self.assertIsNotNone(style)
     self.getLayersItem().refreshContent(self.explorer)
     self.getStylesItem().refreshContent(self.explorer)
     # step 2: set flag to remove also style
     deleteStyle = pluginSetting("DeleteStyle")
     setPluginSetting("DeleteStyle", True)
     # step 3: then remove layer and style
     layerItem = self.getLayerItem(PT1)
     self.assertIsNotNone(layerItem)
     layerItem.deleteLayer(self.tree, self.explorer)
     layerItem = self.getLayerItem(PT1)
     self.assertIsNone(layerItem)
     styleItem = self.getStyleItem(PT1)
     self.assertIsNone(styleItem)
     # step 4: republish PT1 and it's style
     self.catWrapper.publishLayer(PT1)
     layer = self.cat.get_layer(PT1)
     self.assertIsNotNone(layer)
     style = self.cat.get_styles(PT1)[0]
     self.assertIsNotNone(style)
     self.getLayersItem().refreshContent(self.explorer)
     self.getStylesItem().refreshContent(self.explorer)
     # step 5: set flag to remove layer BUT not style
     setPluginSetting("DeleteStyle", False)
     # step 6: remove layer and check style is not erased
     layerItem = self.getLayerItem(PT1)
     layerItem.deleteLayer(self.tree, self.explorer)
     layerItem = self.getLayerItem(PT1)
     self.assertIsNone(layerItem)
     styleItem = self.getStyleItem(PT1)
     self.assertIsNotNone(styleItem)
     # step 7: then remove style
     styleItem.deleteStyle(self.tree, self.explorer)
     styleItem = self.getStyleItem(PT1)
     self.assertIsNone(styleItem)
     # step 8: set flag in original mode
     setPluginSetting("DeleteStyle", deleteStyle)
コード例 #19
0
 def testDeleteLayerAndStyle(self):
     # step 1: publish a layer. publish load layer and style
     self.catWrapper.publishLayer(PT1, self.ws, name=PT1)
     layer = self.cat.get_layer(PT1)
     self.assertIsNotNone(layer)
     style = self.cat.get_style(PT1)
     self.assertIsNotNone(style)
     self.getLayersItem().refreshContent(self.explorer)
     self.getStylesItem().refreshContent(self.explorer)
     # step 2: set flag to remove also style
     deleteStyle = pluginSetting("DeleteStyle")
     setPluginSetting("DeleteStyle", True)
     # step 3: then remove layer and style
     layerItem = self.getLayerItem(PT1)
     self.assertIsNotNone(layerItem)
     layerItem.deleteLayer(self.tree, self.explorer)
     layerItem = self.getLayerItem(PT1)
     self.assertIsNone(layerItem)
     styleItem = self.getStyleItem(PT1)
     self.assertIsNone(styleItem)
     # step 4: republish PT1 and it's style
     self.catWrapper.publishLayer(PT1)
     layer = self.cat.get_layer(PT1)
     self.assertIsNotNone(layer)
     style = self.cat.get_style(PT1)
     self.assertIsNotNone(style)
     self.getLayersItem().refreshContent(self.explorer)
     self.getStylesItem().refreshContent(self.explorer)
     # step 5: set flag to remove layer BUT not style
     setPluginSetting("DeleteStyle", False)
     # step 6: remove layer and check style is not erased
     layerItem = self.getLayerItem(PT1)
     layerItem.deleteLayer(self.tree, self.explorer)
     layerItem = self.getLayerItem(PT1)
     self.assertIsNone(layerItem)
     styleItem = self.getStyleItem(PT1)
     self.assertIsNotNone(styleItem)
     # step 7: then remove style
     styleItem.deleteStyle(self.tree, self.explorer)
     styleItem = self.getStyleItem(PT1)
     self.assertIsNone(styleItem)
     # step 8: set flag in original mode
     setPluginSetting("DeleteStyle", deleteStyle)
コード例 #20
0
 def tearDownClass(cls):
     super(PkiDeleteTests, cls).tearDownClass()
     setPluginSetting("ConfirmDelete", cls.confirmDelete)
     # remove certs
     pem.removeCatalogPkiTempFiles(cls.cat)
     utils.removePKITestCerts()
コード例 #21
0
 def tearDownClass(cls):
     super(DeleteTests, cls).tearDownClass()
     setPluginSetting("ConfirmDelete", cls.confirmDelete)
コード例 #22
0
def _resetSdkEndpoint():
    setPluginSetting("sdkendpoint", _sdkEndpoint)
    closeWAB()
コード例 #23
0
def _setWrongSdkEndpoint():
    global _sdkEndpoint
    _sdkEndpoint = pluginSetting("sdkendpoint")
    setPluginSetting("sdkendpoint", "wrong")
コード例 #24
0
 def _explorerVisibilityChanged(self, visible):
     setPluginSetting("ExplorerVisible", visible)
コード例 #25
0
 def _explorerVisibilityChanged(self, visible):
     setPluginSetting("ExplorerVisible", visible)
コード例 #26
0
 def tearDownClass(cls):
     utils.cleanCatalog(cls.cat)
     setPluginSetting("AuthCatalogXMLCacheTime", cls.cache_time)
コード例 #27
0
 def setup(self, username=None, password=None):
     """Configuration wizard"""
     # Preliminary check:
     #if not utils.bcs_supported():
     #    return QMessageBox.warning(None, self.tr("Basemaps error"), self.tr("Your QGIS installation does not meet the minimum requirements to run this plugin. Please check if the OAUth2 authentication plugin is installed and have a look to the documentation for further information."))
     from gui.setupwizard import SetupWizard
     settings = {
         "maps_uri": pluginSetting('maps_uri'),
         "token_uri": pluginSetting('token_uri'),
         "providers_uri": pluginSetting('providers_uri'),
         "username": username,
         "password": password,
         "authcfg": pluginSetting('authcfg'),
         "project_template": pluginSetting('project_template'),
         "enabled": pluginSetting('enabled'),
         "selected": pluginSetting('selected'),
         "visible": pluginSetting('visible'),
     }
     wizard = SetupWizard(settings)
     if QDialog.Accepted == wizard.exec_():
         # Process the results
         settings = wizard.settings
         if not settings.get('has_error'):
             setPluginSetting('enabled', False)
             utils.unset_default_project()
             authcfg = None
             if settings.get('enabled'):
                 try:
                     # Create the authcfg (or use existing)
                     if (settings.get('use_current_authcfg')
                             and settings.get('authcfg') is not None
                             and utils.get_oauth_authcfg(
                                 settings.get('authcfg')) is not None):
                         authcfg = settings.get('authcfg')
                     else:  # try with defaults
                         authcfg = utils.setup_oauth(
                             settings.get('username'),
                             settings.get('password'),
                             settings.get('token_uri'))
                     if authcfg is None:
                         raise BasemapsConfigError(
                             self.
                             tr("Could not find or create a valid authentication configuration!"
                                ))
                     # It shouldn't be empty but ...
                     if settings.get('selected') == '':
                         raise BasemapsConfigError(
                             self.tr(
                                 "You need to select at least one base map!"
                             ))
                     selected = [
                         m for m in settings.get('selected').split('###')
                         if m != ''
                     ]
                     visible = [
                         m for m in settings.get('visible', "").split('###')
                         if m != ''
                     ]
                     template = settings.get('project_template')
                     if template == '' or template is None:
                         template = PROJECT_DEFAULT_TEMPLATE
                     if not os.path.isfile(template):
                         raise BasemapsConfigError(
                             self.
                             tr("The project template is missing or invalid: '%s'"
                                % template))
                     prj = utils.create_default_project([
                         m for m in settings.get('available_maps')
                         if m['name'] in selected
                     ], visible, template, authcfg)
                     if prj is None or prj == '':
                         raise BasemapsConfigError(
                             self.
                             tr("Could not create a valid default project from the template '%s'!"
                                % template))
                     # Check for any existing default_project
                     if os.path.isfile(utils.default_project_path()):
                         default_project_backup = utils.default_project_path(
                         ).replace(
                             '.qgs', '-%s.qgs' %
                             datetime.now().strftime('%Y-%m-%d-%H:%M:%S'))
                         os.rename(utils.default_project_path(),
                                   default_project_backup)
                         self.iface.messageBar().pushMessage(
                             self.tr("Basemaps setup"),
                             self.
                             tr("A backup copy of the previous default project has been saved to %s"
                                % default_project_backup),
                             level=QgsMessageBar.INFO)
                     if not utils.set_default_project(prj):
                         raise BasemapsConfigError(
                             self.
                             tr("Could not write the default project on disk!"
                                ))
                     # Store settings
                     setPluginSetting('enabled', True)
                     setPluginSetting('authcfg', authcfg)
                     setPluginSetting('selected', settings.get('selected'))
                     setPluginSetting('visible', settings.get('visible'))
                     self.iface.messageBar().pushMessage(
                         self.tr("Basemaps setup success"),
                         self.tr("Basemaps are now ready to use!"),
                         level=QgsMessageBar.INFO)
                 except BasemapsConfigError as e:
                     self.iface.messageBar().pushMessage(
                         self.tr("Basemaps setup error"),
                         e.message,
                         level=QgsMessageBar.CRITICAL)
                 except Exception as e:
                     self.iface.messageBar().pushMessage(
                         self.tr("Basemaps unhandled exception"),
                         "%s" % e,
                         level=QgsMessageBar.CRITICAL)
     else:  # Cancel or close
         pass
     setPluginSetting('first_time_setup_done', True)
コード例 #28
0
 def tearDownClass(cls):
     super(DeleteTests, cls).tearDownClass()
     setPluginSetting("ConfirmDelete", cls.confirmDelete)
コード例 #29
0
ファイル: settings.py プロジェクト: benhur07b/gdrive_provider
 def test_true_bool(self):
     self.assertEqual(pluginSetting('mytrueboolsetting'), True)
     setPluginSetting('mytrueboolsetting', False)
     self.assertEqual(pluginSetting('mytrueboolsetting'), False)
     setPluginSetting('mytrueboolsetting', True)
     self.assertEqual(pluginSetting('mytrueboolsetting'), True)
コード例 #30
0
def initConfigParams():
    folder = pluginSetting(REPOS_FOLDER)
    if folder.strip() == "":
        folder = os.path.join(os.path.expanduser('~'), 'geogig', 'repos')
        setPluginSetting(REPOS_FOLDER, folder)
コード例 #31
0
def initConfigParams():
    folder = pluginSetting(REPOS_FOLDER)
    if folder.strip() == "":
        folder = os.path.join(os.path.expanduser('~'), 'geogig', 'repos')
        setPluginSetting(REPOS_FOLDER, folder)