def new(self, type="wms"): """Show empty backgroundlayer form.""" if type == "wms": form = WMSLayerForm() template = "%s/wmslayer.html" % self.template_dir elif type == "wmts": form = WMTSLayerForm() template = "%s/wmtslayer.html" % self.template_dir else: flash("Type {0} is not supported.".format(type), "warning") return redirect(url_for("backgroundlayers")) form.thumbnail.choices = list(map(lambda x: (x, x), ThemeUtils.get_mapthumbs(self.app, self.handler))) return render_template( template, title="Add background layer", type=type, form=form )
def load_plugin(app, handler): # Check required settings config = handler().config() for setting in ["input_config_path", "qwc2_path", "qgs_resources_path"]: if not os.path.isdir(config.get(setting, "")): raise RuntimeError("%s is not set or invalid" % setting) if not config.get("ogc_service_url", None): raise RuntimeError("ogc_service_url is not set") global __background_layers_controller global __mapthumbs_controller global __themes_controller themesconfig = ThemeUtils.load_themesconfig(app, handler) __background_layers_controller = BackgroundLayersController(app, handler, themesconfig) __mapthumbs_controller = MapthumbsController(app, handler) __themes_controller = ThemesController(app, handler, themesconfig)
def create(self, type="wms"): """Add backgroundlayer.""" if type == "wms": form = WMSLayerForm() template = "%s/wmslayer.html" % self.template_dir elif type == "wmts": form = WMTSLayerForm() template = "%s/wmtslayer.html" % self.template_dir else: flash("Type {0} is not supported.".format(type), 'warning') return redirect(url_for('backgroundlayers')) form.thumbnail.choices = ThemeUtils.get_mapthumbs( self.app, self.handler) if form.validate_on_submit(): backgroundlayer = OrderedDict() backgroundlayer["type"] = type backgroundlayer["url"] = form.url.data backgroundlayer["name"] = form.name.data backgroundlayer["title"] = form.title.data backgroundlayer["attribution"] = form.attribution.data backgroundlayer["thumbnail"] = form.thumbnail.data if type == "wms": backgroundlayer["format"] = form.format.data backgroundlayer["srs"] = form.srs.data backgroundlayer["tiled"] = form.tiled.data bbox = [float(x) for x in form.bbox.data.split(",")] backgroundlayer["boundingBox"] = { "crs": form.srs.data, "bounds": bbox } elif type == "wmts": backgroundlayer["url"] = backgroundlayer["url"].replace( "{Style}", form.style.data) # TODO: tileMatrixPrefix ? backgroundlayer["tileMatrixPrefix"] = "" backgroundlayer["tileMatrixSet"] = form.tileMatrixSet.data backgroundlayer["projection"] = form.projection.data backgroundlayer["originX"] = float(form.originX.data) backgroundlayer["originY"] = float(form.originY.data) resolutions = [ float(x) for x in form.resolutions.data.split(",") ] backgroundlayer["resolutions"] = resolutions tilesize = [int(x) for x in form.tileSize.data.split(",")] backgroundlayer["tileSize"] = tilesize if form.with_capabilities.data: backgroundlayer["capabilities"] = json.loads( form.capabilities.data) self.themesconfig["themes"]["backgroundLayers"].append( backgroundlayer) if ThemeUtils.save_themesconfig(self.themesconfig, self.app, self.handler): message = "Background layer '{0}' was created.\ ".format(backgroundlayer["title"]) flash(message, "success") else: message = "Could not save background layer '{0}'.\ ".format(backgroundlayer["title"]) flash(message, "error") return redirect(url_for("backgroundlayers")) else: # TODO: form.errors self.app.logger.error("Error adding backroundlayer: \ {}".format(form.errors)) flash( "Background layer could not be created: \ {}".format(form.errors), "error") return render_template(template, title="Add background layer", type=type, form=form)
def create_form(self, theme=None): """Return form with fields loaded from themesConfig.json. :param object theme: Optional theme object """ form = ThemeForm() if theme: form = ThemeForm(url=theme["url"]) crslist = ThemeUtils.get_crs(self.app, self.handler) form.url.choices = [("", "---")] + ThemeUtils.get_projects(self.app, self.handler) form.thumbnail.choices = ThemeUtils.get_mapthumbs(self.app, self.handler) form.format.choices = ThemeUtils.get_format() form.mapCrs.choices = crslist form.additionalMouseCrs.choices = crslist form.backgroundLayersList = self.get_backgroundlayers() if form.backgroundLayers.data: for i in range(len(form.backgroundLayers.data)): form.backgroundLayers[i].layerName.choices = self.get_backgroundlayers() if theme is None: return form else: current_handler = self.handler() ogc_service_url = current_handler.config().get("ogc_service_url") if "url" in theme: if theme["url"].startswith(ogc_service_url): form.url.data = theme["url"] else: form.url.data = ogc_service_url.rstrip("/") + "/" + theme["url"] else: form.url.data = None if "title" in theme: form.title.data = theme["title"] if "default" in theme: form.default.data = theme["default"] if "thumbnail" in theme: form.thumbnail.data = theme["thumbnail"] if "attribution" in theme: form.attribution.data = theme["attribution"] # TODO: FORM attributionUrl # if "attributionUrl" in theme: # form.attribution.data = theme["attributionUrl"] if "format" in theme: form.format.data = theme["format"] if "mapCrs" in theme: form.mapCrs.data = theme["mapCrs"] if "additionalMouseCrs" in theme: form.additionalMouseCrs.data = theme["additionalMouseCrs"] if "searchProviders" in theme: searchProviders = [] for provider in theme["searchProviders"]: if "key" in provider: searchProviders.append(provider["key"]) else: searchProviders.append(provider) form.searchProviders.data = ",".join(searchProviders) if "scales" in theme: form.scales.data = ", ".join(map(str, theme["scales"])) if "printScales" in theme: form.printScales.data = ", ".join(map(str, theme[ "printScales"])) if "printResolutions" in theme: form.printResolutions.data = ", ".join(map(str, theme[ "printResolutions"])) if "printLabelBlacklist" in theme: form.printLabelBlacklist.data = ", ".join(map(str, theme[ "printLabelBlacklist"])) if "skipEmptyFeatureAttributes" in theme: form.skipEmptyFeatureAttributes.data = theme["skipEmptyFeatureAttributes"] if "collapseLayerGroupsBelowLevel" in theme: form.collapseLayerGroupsBelowLevel.data = theme["collapseLayerGroupsBelowLevel"] if "backgroundLayers" in theme: for i, layer in enumerate(theme["backgroundLayers"]): data = { "layerName": ("", ""), "printLayer": "", "visibility": False } for l in self.get_backgroundlayers(): if layer["name"] == l[0]: data["layerName"] = l if "printLayer" in layer: data["printLayer"] = layer["printLayer"] if "visibility" in layer: data["visibility"] = layer["visibility"] form.backgroundLayers.append_entry(data) form.backgroundLayers[i].layerName.choices = self.get_backgroundlayers() form.backgroundLayers[i].layerName.data = layer["name"] return form
def reset_themesconfig(self): self.themesconfig = ThemeUtils.load_themesconfig(self.app, self.handler) flash("Theme configuration reloaded from disk.", "warning") return redirect(url_for("themes"))