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)
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()
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)
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'))
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)
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
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)
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)
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)
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
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)
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
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)
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
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
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)
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)
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)
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)
def tearDownClass(cls): super(PkiDeleteTests, cls).tearDownClass() setPluginSetting("ConfirmDelete", cls.confirmDelete) # remove certs pem.removeCatalogPkiTempFiles(cls.cat) utils.removePKITestCerts()
def tearDownClass(cls): super(DeleteTests, cls).tearDownClass() setPluginSetting("ConfirmDelete", cls.confirmDelete)
def _resetSdkEndpoint(): setPluginSetting("sdkendpoint", _sdkEndpoint) closeWAB()
def _setWrongSdkEndpoint(): global _sdkEndpoint _sdkEndpoint = pluginSetting("sdkendpoint") setPluginSetting("sdkendpoint", "wrong")
def _explorerVisibilityChanged(self, visible): setPluginSetting("ExplorerVisible", visible)
def _explorerVisibilityChanged(self, visible): setPluginSetting("ExplorerVisible", visible)
def tearDownClass(cls): utils.cleanCatalog(cls.cat) setPluginSetting("AuthCatalogXMLCacheTime", cls.cache_time)
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)
def tearDownClass(cls): super(DeleteTests, cls).tearDownClass() setPluginSetting("ConfirmDelete", cls.confirmDelete)
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)
def initConfigParams(): folder = pluginSetting(REPOS_FOLDER) if folder.strip() == "": folder = os.path.join(os.path.expanduser('~'), 'geogig', 'repos') setPluginSetting(REPOS_FOLDER, folder)
def initConfigParams(): folder = pluginSetting(REPOS_FOLDER) if folder.strip() == "": folder = os.path.join(os.path.expanduser('~'), 'geogig', 'repos') setPluginSetting(REPOS_FOLDER, folder)