def showSettings(self): logger.info("Opening Settings") settings = SettingsDialog() settings.show() settings.exec_() logger.info("Closing Settings") self.reset() # refreshing to apply settings changes
def main(): logger.info("Starting Application") app = QtWidgets.QApplication(sys.argv) app.lastWindowClosed.connect(destroy) setlocale() window = MainWindow() window.reset() window.show() sys.exit(app.exec_())
def exportLogFile(self): ''' displays a filesave dialog to copy log file to ''' export_fpath = QtWidgets.QFileDialog().getSaveFileName( self, "Enregistrer le fichier de logs sous…", "C:/", filter="log (*.log *.txt)") if export_fpath and export_fpath[0]: shutil.copy(LOG_FILE, export_fpath[0]) logger.info("Exported log file to {}".format(export_fpath[0]))
def save_settings(self): logger.info("Updating SETTINGS") for key, value in SETTINGS.items(): if hasattr(self, key): ledit = getattr(self, key) if ledit.text(): SETTINGS.update({key: ledit.text()}) save_settings(SETTINGS_FILE, SETTINGS) self.close()
def unarchive(self, collect_id): ''' unarchive the requested collect onto the remote anam-receiver triggered by Home's table button ''' try: do_post('/collects/{id}/unarchive'.format(id=collect_id)) self.reset() except Exception as exp: logger.error("Failed to unarchive #{}".format(collect_id)) logger.exception(exp) else: logger.info("Unarchived #{}".format(collect_id))
def check(self): self.check_button.setDisabled(True) self.change_label("vérification en cours…", 'yellow') if self.do_check(): logger.info("Settings OK for {}".format(self.name)) self.change_label("paramètres OK", 'green') else: logger.info("Settings incorrect for {}".format(self.name)) self.change_label("paramètres incorrects", 'red') self.check_button.setDisabled(False)
def do_request(path, method, kwargs={}, or_none=False, server_url=None, server_token=None): ''' performs a GET or POST on `path` URL is computed from `server_url`, /api and `path` Authorization header sent with `server_token` Excepts `anam-receiver` formatted JSON response. Raises on non-success status response. returns response as JSON ''' server_url = server_url or SETTINGS.get('store_url', '') server_token = server_token or SETTINGS.get('store_token') url = ''.join((server_url, '/api', path)) if not test_url_socket(url): logger.info("{} requests to {} failed. No socket.".format(method, url)) if or_none: return None else: raise IOError("Unable to connect to {}. Network Error".format(url)) req = None try: req = getattr(requests, method.lower())( url, headers=get_auth_headers(server_token), timeout=30, **kwargs) assert req.status_code in (200, 201) resp = req.json() assert resp['status'] == 'success' return resp except Exception as exp: if req: logger.error(req.status_code, req.text) logger.exception(exp) # silented error if or_none: return None raise
def showUploadDialog(self): ''' displays an open file dialog to pick a json export file if file is legit, fires up an UploadDialog ''' upload_fpath = QtWidgets.QFileDialog().getOpenFileName( self, "Séléctionner le fichier d'export JSON de la collecte", "C:/", filter="json (*.json)") if not upload_fpath or not upload_fpath[0]: return upload_fpath = upload_fpath[0] logger.info("Reading {} for upload".format(upload_fpath)) try: assert os.path.exists(upload_fpath) with open(upload_fpath, 'r') as f: dataset = json.load(f) assert 'targets' in dataset except Exception as exp: logger.exception(exp) QtWidgets.QMessageBox.warning( self, "Impossible de lire le fichier JSON", "Le fichier sélectionné n'est pas un fichier " "d'export de collecte valide.\n" "Vérifiez le fichier et réessayez.", QtWidgets.QMessageBox.Ok) else: logger.info("Opening Upload Dialog for {}".format(upload_fpath)) UploadDialog(dataset=dataset, fpath=upload_fpath).exec_() logger.info("Closing Upload Dialog for {}".format(upload_fpath)) self.reset()
def import_attachments(mtype, member, index=None): ''' create all attachments for a specified person ''' for ix, attachment in enumerate(get_attachments(target, mtype, index)): create_attachment(conn, dos_id, pid, attachment, member, mtype) logger.info("Created IM_PERSO_PJ_MOBILE {} for {}".format( ix, mtype))
def import_target(conn, target): ''' import target and all its dependents into ANAM DB returns a json/oracle mapping of identifiers ''' from anamdesktop.dbimport.dossiers import create_dossier from anamdesktop.dbimport.personnes import (create_hh_member, get_indigent_data, get_spouse_data, get_child_data) from anamdesktop.dbimport.attachments import (create_attachment, get_attachments) def import_attachments(mtype, member, index=None): ''' create all attachments for a specified person ''' for ix, attachment in enumerate(get_attachments(target, mtype, index)): create_attachment(conn, dos_id, pid, attachment, member, mtype) logger.info("Created IM_PERSO_PJ_MOBILE {} for {}".format( ix, mtype)) # retrieve identifier as we'll use it to bind with dossier_id ident = target.get('ident') logger.info("Importing target: {}".format(ident)) if not ident: raise ValueError("Unable to import target without an ident.") # ensure target is indigent # not anymore. ability to import all entries. # assert target.get('certificat-indigence') # create DOSSIER dos_id = create_dossier(conn, ident, target) logger.info("Created IM_DOSSIERS_MOBILE #{}".format(dos_id)) # create indigent first pid = create_hh_member(conn, dos_id, get_indigent_data(target), target) logger.info("Created IM_PERSONNES_MOBILE (indigent) #{}".format(pid)) # record perso_id ident_map = {'indigent': pid, 'dossier': dos_id} # import indigent's attachments import_attachments('indigent', target) # add spouses for index, spouse in enumerate(target.get("epouses", [])): pid = create_hh_member(conn, dos_id, get_spouse_data(pid, target, index), target, ind_id=pid) logger.info("Created IM_PERSONNES_MOBILE (spouse {}) #{}".format( index, pid)) ident_map.update({'epouse{}'.format(index + 1): pid}) import_attachments("spouse", spouse, index) # add children for index, child in enumerate(target.get("enfants", [])): pid = create_hh_member(conn, dos_id, get_child_data(pid, target, index), target, ind_id=pid) logger.info("Created IM_PERSONNES_MOBILE (child {}) #{}".format( index, pid)) ident_map.update({'enfant{}'.format(index + 1): pid}) import_attachments("child", child, index) return {ident: ident_map}
def destroy(): logger.info("Exiting Application") QtCore.QCoreApplication.instance().quit sys.exit(0)
def openLogFile(self): ''' opens log file in external reader ''' logger.info("Opening log file for display") open_file(LOG_FILE)
def openHelpFile(self): ''' opens help file in external reader ''' logger.info("Opening help file for display") open_file(HELP_FILE)
def showImagesCopyDialog(self, collect_id): logger.info("Opening Copy Dialog for #{}".format(collect_id)) ImagesCopyDialog(collect_id=collect_id).exec_() logger.info("Closing Copy Dialog for #{}".format(collect_id)) self.reset() # refreshing to apply collect's status change
def displayHome(self): logger.info("Refreshing Home") self.switchPage(HomeWidget(self).content)
def download_dataset(self, collect_id): self.collect_id = collect_id logger.info("Downloading dataset for #{}".format(collect_id)) self.dataset = (do_get('/collects/{}'.format(self.collect_id)) or {}) \ .get('collect') logger.info("Dataset #{} download complete.".format(collect_id))