Beispiel #1
0
 def showSettings(self):
     logger.info("Opening Settings")
     settings = SettingsDialog()
     settings.show()
     settings.exec_()
     logger.info("Closing Settings")
     self.reset()  # refreshing to apply settings changes
Beispiel #2
0
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_())
Beispiel #3
0
    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]))
Beispiel #4
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()
Beispiel #5
0
    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))
Beispiel #6
0
    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)
Beispiel #7
0
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
Beispiel #8
0
    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()
Beispiel #9
0
 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))
Beispiel #10
0
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}
Beispiel #11
0
def destroy():
    logger.info("Exiting Application")
    QtCore.QCoreApplication.instance().quit
    sys.exit(0)
Beispiel #12
0
 def openLogFile(self):
     ''' opens log file in external reader '''
     logger.info("Opening log file for display")
     open_file(LOG_FILE)
Beispiel #13
0
 def openHelpFile(self):
     ''' opens help file in external reader '''
     logger.info("Opening help file for display")
     open_file(HELP_FILE)
Beispiel #14
0
 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
Beispiel #15
0
 def displayHome(self):
     logger.info("Refreshing Home")
     self.switchPage(HomeWidget(self).content)
Beispiel #16
0
 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))