def submit_uvc(self, table_name, form_obj, id): result_msg = self.submit(table_name, form_obj, id) if not result_msg == 1: popup(str(result_msg)) return self.db.commit() iface.mapCanvas().currentLayer().triggerRepaint() self.close_db() self.uvc_form.close()
def valid(self): msg = '' for cat_name in self.catalog: disp_path_wdgt = self.ui.findChild(QLineEdit, cat_name) if disp_path_wdgt.text(): self.catalog[cat_name] = disp_path_wdgt.text() else: msg += cat_name + '\n' if msg: popup('Catalogues non renseignés :\n\n' + msg) return elif self.check_data(): s = QSettings() s.setValue('catalogs', self.catalog) iface.removeDockWidget(self.ui)
def launch_import(self, file_name): # Set corresponding layer. importLayer = self.createQgisVectorLayer(file_name) # Carhab layer should not overlaps itself. Calculate difference between layers. diffLayer = self.makeDifference(importLayer) if diffLayer: if diffLayer.featureCount() == 0: popup( ("Emprise de la couche à importer déjà peuplée " "dans la couche Carhab : aucune entité ajoutée.") ) else: # Import only difference between layers. self.makeImport(diffLayer) else: popup(("Erreur inconnue : aucune entité ajoutée."))
def check_data(self): catalog_struct = Config.CATALOG_STRUCTURE msg = '' for cat_name, cat_path in self.catalog.items(): fl_name = path.basename(cat_path) if not path.exists(cat_path) and not path.isfile(cat_path): msg += 'Chemin de fichier invalide pour {}.\n'.format(fl_name) continue with open(cat_path, 'rb') as cat_file: reader = csv.reader(cat_file, delimiter=b';') headers = reader.next() file_ctnt = [] for row in reader: file_ctnt.append(row) if len(headers) < 2: msg += 'Délimiteur ";" requis dans {}.\n'.format(fl_name) continue if catalog_struct.get('data').get(cat_name): for field in catalog_struct.get('data').get(cat_name): if not field in headers: msg += 'Champ "{}" manquant dans le fichier "{}".\n'\ .format(field, fl_name) else: cds = [i[2] for i in catalog_struct.get('links').get(cat_name)] for cd in cds: if not cd in headers: msg += 'Champ "{}" manquant dans le fichier "{}".\n'\ .format(cd, fl_name) i = 2 for row in file_ctnt: diff = len(row) - len(headers) if diff > 0: msg += '{} colonne(s) en trop dans {} à la ligne {}.\n'\ .format(unicode(diff), cat_name, unicode(i)) elif diff < 0: msg += '{} colonne(s) manquante(s) dans {} à la ligne {}.\n'\ .format(unicode(-diff), fl_name, unicode(i)) i += 1 if msg: popup(msg) return False else: return True
def open_sf(self, table_name, id=None): self.create_savepoint('sigmaf') s = QSettings() s.setValue('current_info/sigmaf', id) disp_fields = [ 'cd_syntax', 'lb_syntax', 'abon_domin' ] self.rel_syn = RelationsManager('composyntaxon', disp_fields) self.rel_syn.add_clicked.connect(self.open_syntaxon) self.rel_syn.edit_clicked.connect(self.open_syntaxon) self.rel_syn.del_clicked.connect(self.del_record) from_cat = False r = self.get_recorder('sigmaf') if id: from_cat = r.select('id', id)[0].get('catalog') else: last_sf_id = r.get_last_id() if r.get_last_id() else 0 s.setValue('current_info/sigmaf', last_sf_id + 1) from_cat = question('Appel aux catalogues ?,',\ 'Sélectionner un sigma facies issu des catalogues ?') s.setValue('current_info/sigmaf/catalog', int(from_cat)) if not s.value('catalogs'): popup('Les référentiels ne sont pas renseignés') Catalog().run() return form_name = 'form_sigmaf_cat' if from_cat else 'form_sigmaf' self.sf_form = Form(form_name, id, self.rel_syn) self.sf_form.canceled.connect(self.cancel_sf_fill) self.sf_form.valid_clicked.connect(self.submit_sf) self._open_form('sigmaf', self.sf_form) cd_sf_field = self.sf_form.ui.findChild(QComboBox, 'code_sigma') if cd_sf_field: cd_sf_field.currentIndexChanged.connect(self._get_syntax)
def closeImport(self, success, code): if not success: if code == 0: popup("Erreur inconnue : aucune entité ajoutée.") elif code == 1: popup("Pas de couche carhab initialisée : aucune entité ajoutée.") elif code == 2: popup("Import annulé : aucune entité ajoutée") if self.progressBar: self.progressBar.setValue(100) self.progressValue = 100 iface.messageBar().popWidget(self.msgBarItem) self.canvas.currentLayer().updateExtents() self.canvas.setExtent(self.canvas.currentLayer().extent()) self.canvas.refresh()
def _get_selected_item_id(self): sel_item = self._tbl_wdgt.item(self._tbl_wdgt.currentRow(), 0) msg = 'Sélectionner une ligne dans le tableau' return sel_item.text() if sel_item else popup(msg) return False
def run(self): """Specific stuff at tool activating.""" cur_carhab_lyr = CarhabLayerRegistry.instance().getCurrentCarhabLayer() if not cur_carhab_lyr: no_carhab_lyr_msg() return csv_dir = QFileDialog.getExistingDirectory(None, "Select a folder:", None, QFileDialog.ShowDirsOnly) if csv_dir: now = time.strftime("%Y-%m-%d-%H%M%S") directory = os.path.join(csv_dir, cur_carhab_lyr.getName() + "_" + now) if not os.path.exists(directory): os.makedirs(directory) for tbl_name, desc in Config.DB_STRUCTURE: file_name = desc.get("std_name") tbl_fields = desc.get("fields") if file_name: if not desc.get("spatial"): csv_name = file_name if file_name.endswith(".csv") else file_name + ".csv" csv_path = os.path.join(directory, csv_name) field_names = [row[1].get("std_name") for row in tbl_fields if row[1].get("std_name")] db = DbManager(cur_carhab_lyr.dbPath) r = Recorder(db, tbl_name) tbl_rows = r.select_all() csv_rows = [] for tbl_row in tbl_rows: csv_row = {} for dbf, value in tbl_row.items(): for field in desc.get("fields"): if dbf == field[0] and field[1].get("std_name"): csv_row[encode(field[1].get("std_name"))] = encode(value) break csv_rows.append(csv_row) with open(csv_path, "wb") as csv_file: writer = csv.DictWriter(csv_file, field_names) writer.writeheader() writer.writerows(csv_rows) else: for vlyr in cur_carhab_lyr.getQgisLayers(): vlyr_tbl = QgsDataSourceURI(vlyr.dataProvider().dataSourceUri()).table() if tbl_name == vlyr_tbl: shp_name = file_name if file_name.endswith(".shp") else file_name + ".shp" shp_path = os.path.join(directory, shp_name) QgsVectorFileWriter.writeAsVectorFormat(vlyr, shp_path, "utf-8", None) shp_lyr = QgsVectorLayer(shp_path, "", "ogr") shapefile = shp_lyr.dataProvider() features = shapefile.getFeatures() attrs_to_del = [] for attr, attr_desc in tbl_fields: std_attr = attr_desc.get("std_name") if not std_attr == attr: if std_attr: cur_field = shapefile.fields().field(attr) new_field = QgsField(cur_field) new_field.setName(std_attr) shapefile.addAttributes([new_field]) for feat in features: idx = shapefile.fields().indexFromName(std_attr) update_map = {feat.id(): {idx: feat[attr]}} shapefile.changeAttributeValues(update_map) attrs_to_del.append(shapefile.fields().indexFromName(attr)) shapefile.deleteAttributes(attrs_to_del) popup("Export effectué")