def handle_error(self, error):
        '''
        When an error is propagated up to here, is time to return to the sender
        that this task failed
        '''
        session = requests.sessions.Session()
        input_data = self.task.get_data()['input_data']
        election_id = input_data['election_id']
        callback_url = input_data['callback_url']
        election = db.session.query(Election)\
            .filter(Election.id == election_id).first()

        session = requests.sessions.Session()
        fail_data = {
            "status": "error",
            "reference": {
                "election_id": election_id,
                "action": "POST /tally"
            },
            "data": {
                "message": "election tally failed for some reason"
            }
        }
        r = session.request('post',
                            callback_url,
                            data=dumps(fail_data),
                            headers={'content-type': 'application/json'},
                            verify=False)
        print r.text
        end_task()
    def handle_error(self, error):
        '''
        When an error is propagated up to here, is time to return to the sender
        that this task failed
        '''
        session = requests.sessions.Session()
        session.mount('http://', RejectAdapter())
        input_data = self.task.get_data()['input_data']
        election_id = input_data['election_id']
        callback_url = input_data['callback_url']
        election = db.session.query(Election)\
            .filter(Election.id == election_id).first()

        session = requests.sessions.Session()
        fail_data = {
            "status": "error",
            "reference": {
                "election_id": election_id,
                "action": "POST /tally"
            },
            "data": {
                "message": "election tally failed for some reason"
            }
        }
        ssl_calist_path = app.config.get('SSL_CALIST_PATH', '')
        ssl_cert_path = app.config.get('SSL_CERT_PATH', '')
        ssl_key_path = app.config.get('SSL_KEY_PATH', '')
        print("\nFF callback_url4 " + callback_url)
        r = session.request('post', callback_url, data=dumps(fail_data), headers={'content-type': 'application/json'},
                            verify=ssl_calist_path, cert=(ssl_cert_path, ssl_key_path))
        print r.text
        end_task()
def return_election(task):
    input_data = task.get_parent().get_data()['input_data']
    election_id = input_data['election_id']
    callback_url = input_data['callback_url']

    pub_data_url = app.config.get('PUBLIC_DATA_BASE_URL', '')
    tally_url = pub_data_url + '/' + str(election_id) + '/tally.tar.gz'

    pub_data_path = app.config.get('PUBLIC_DATA_PATH', '')
    tally_hash_path = os.path.join(pub_data_path, str(election_id),
                                   'tally.tar.gz.sha256')

    f = open(tally_hash_path, 'r')
    tally_hash = f.read()
    f.close()

    ret_data = {
        "status": "finished",
        "reference": {
            "election_id": election_id,
            "action": "POST /tally"
        },
        "data": {
            "tally_url": tally_url,
            "tally_hash": "ni:///sha-256;" + tally_hash
        }
    }
    session = requests.sessions.Session()
    r = session.request('post',
                        callback_url,
                        data=dumps(ret_data),
                        headers={'content-type': 'application/json'},
                        verify=False)
    print r.text
    end_task()
    def handle_error(self, error):
        '''
        When an error is propagated up to here, is time to return to the sender
        that this task failed
        '''
        session = requests.sessions.Session()
        input_data = self.task.get_data()['input_data']
        election_id = input_data['election_id']
        callback_url = input_data['callback_url']
        election = db.session.query(Election)\
            .filter(Election.id == election_id).first()

        session = requests.sessions.Session()
        fail_data = {
            "status": "error",
            "reference": {
                "election_id": election_id,
                "action": "POST /tally"
            },
            "data": {
                "message": "election tally failed for some reason"
            }
        }
        r = session.request('post', callback_url, data=dumps(fail_data), headers={'content-type': 'application/json'},
                            verify=False)
        print r.text
        end_task()
def return_election(task):
    input_data = task.get_parent().get_data()['input_data']
    election_id = input_data['election_id']
    callback_url = input_data['callback_url']

    pub_data_url = app.config.get('PUBLIC_DATA_BASE_URL', '')
    tally_url = pub_data_url + '/' + str(election_id) + '/tally.tar.gz'

    pub_data_path = app.config.get('PUBLIC_DATA_PATH', '')
    tally_hash_path = os.path.join(pub_data_path, str(election_id), 'tally.tar.gz.sha256')

    f = open(tally_hash_path, 'r')
    tally_hash = f.read()
    f.close()

    ret_data = {
        "status": "finished",
        "reference": {
            "election_id": election_id,
            "action": "POST /tally"
        },
        "data": {
            "tally_url": tally_url,
            "tally_hash": "ni:///sha-256;" + tally_hash
        }
    }
    session = requests.sessions.Session()
    r = session.request('post', callback_url, data=dumps(ret_data), headers={'content-type': 'application/json'},
                        verify=False)
    print r.text
    end_task()
    def handle_error(self, error):
        '''
        When an error is propagated up to here, is time to return to the sender
        that this task failed
        '''
        session = requests.sessions.Session()
        input_data = self.task.get_data()['input_data']
        election_id = input_data['election_id']
        election = db.session.query(Election)\
            .filter(Election.session_id == election_id).first()

        session = requests.sessions.Session()
        callback_url = election.callback_url
        fail_data = {
            "status": "error",
            "reference": {
                "election_id": election_id,
                "action": "POST /election"
            },
            "data": {
                "message": "election creation failed for some reason"
            }
        }
        r = session.request('post',
                            callback_url,
                            data=dumps(fail_data),
                            verify=False)
        end_task()
def return_election(task):
    input_data = task.get_data()['input_data']
    election_id = input_data['election_id']
    session_ids = input_data['session_ids']
    election = db.session.query(Election)\
        .filter(Election.id == election_id).first()

    session_data = []

    for session_id in session_ids:
        # read into a string the pubkey
        privdata_path = app.config.get('PRIVATE_DATA_PATH', '')
        pubkey_path = os.path.join(privdata_path, str(election_id), session_id, 'publicKey_json')
        pubkey_file = open(pubkey_path, 'r')
        pubkey = pubkey_file.read()
        pubkey_file.close()
        session_data.append(dict(
            session_id=session_id,
            pubkey=json.loads(pubkey)
        ))

        # publish the pubkey
        pubdata_path = app.config.get('PUBLIC_DATA_PATH', '')
        pub_session_path = os.path.join(pubdata_path, str(election_id), session_id)
        pubkey_path2 = os.path.join(pub_session_path, 'publicKey_json')
        if not os.path.exists(pub_session_path):
            mkdir_recursive(pub_session_path)
        shutil.copyfile(pubkey_path, pubkey_path2)

        # publish protInfo.xml too
        session_privpath = os.path.join(privdata_path, str(election_id), session_id)
        protinfo_privpath = os.path.join(session_privpath, 'protInfo.xml')
        protinfo_pubpath = os.path.join(pub_session_path, 'protInfo.xml')
        shutil.copyfile(protinfo_privpath, protinfo_pubpath)

    session = requests.sessions.Session()
    session.mount('http://', RejectAdapter())
    callback_url = election.callback_url
    ret_data = {
        "status": "finished",
        "reference": {
            "election_id": election_id,
            "action": "POST /election"
        },
        "session_data": session_data
    }
    print "callback_url, ", callback_url
    print dumps(ret_data)
    ssl_calist_path = app.config.get('SSL_CALIST_PATH', '')
    ssl_cert_path = app.config.get('SSL_CERT_PATH', '')
    ssl_key_path = app.config.get('SSL_KEY_PATH', '')
    print("\nFF callback_url2 " + callback_url)
    r = session.request('post', callback_url, data=dumps(ret_data), headers={'content-type': 'application/json'},
                        verify=ssl_calist_path, cert=(ssl_cert_path, ssl_key_path))
    print r.text
    end_task()
def return_election(task):
    input_data = task.get_data()['input_data']
    election_id = input_data['election_id']
    session_ids = input_data['session_ids']
    election = db.session.query(Election)\
        .filter(Election.id == election_id).first()

    session_data = []

    for session_id in session_ids:
        # read into a string the pubkey
        privdata_path = app.config.get('PRIVATE_DATA_PATH', '')
        pubkey_path = os.path.join(privdata_path, str(election_id), session_id,
                                   'publicKey_json')
        pubkey_file = open(pubkey_path, 'r')
        pubkey = pubkey_file.read()
        pubkey_file.close()
        session_data.append(
            dict(session_id=session_id, pubkey=json.loads(pubkey)))

        # publish the pubkey
        pubdata_path = app.config.get('PUBLIC_DATA_PATH', '')
        pub_session_path = os.path.join(pubdata_path, str(election_id),
                                        session_id)
        pubkey_path2 = os.path.join(pub_session_path, 'publicKey_json')
        if not os.path.exists(pub_session_path):
            mkdir_recursive(pub_session_path)
        shutil.copyfile(pubkey_path, pubkey_path2)

        # publish protInfo.xml too
        session_privpath = os.path.join(privdata_path, str(election_id),
                                        session_id)
        protinfo_privpath = os.path.join(session_privpath, 'protInfo.xml')
        protinfo_pubpath = os.path.join(pub_session_path, 'protInfo.xml')
        shutil.copyfile(protinfo_privpath, protinfo_pubpath)

    session = requests.sessions.Session()
    callback_url = election.callback_url
    ret_data = {
        "status": "finished",
        "reference": {
            "election_id": election_id,
            "action": "POST /election"
        },
        "session_data": session_data
    }
    print "callback_url, ", callback_url
    print dumps(ret_data)
    r = session.request('post',
                        callback_url,
                        data=dumps(ret_data),
                        headers={'content-type': 'application/json'},
                        verify=False)
    print r.text
    end_task()
def return_election(task):
    input_data = task.get_parent().get_data()['input_data']
    election_id = input_data['election_id']
    callback_url = input_data['callback_url']

    pub_data_url = app.config.get('PUBLIC_DATA_BASE_URL', '')
    tally_url = pub_data_url + '/' + str(election_id) + '/tally.tar.gz'

    pub_data_path = app.config.get('PUBLIC_DATA_PATH', '')
    tally_hash_path = os.path.join(pub_data_path, str(election_id),
                                   'tally.tar.gz.sha256')

    f = open(tally_hash_path, 'r')
    tally_hash = f.read()
    f.close()

    ret_data = {
        "status": "finished",
        "reference": {
            "election_id": election_id,
            "action": "POST /tally"
        },
        "data": {
            "tally_url": tally_url,
            "tally_hash": "ni:///sha-256;" + tally_hash
        }
    }
    session = requests.sessions.Session()
    session.mount('http://', RejectAdapter())
    ssl_calist_path = app.config.get('SSL_CALIST_PATH', '')
    ssl_cert_path = app.config.get('SSL_CERT_PATH', '')
    ssl_key_path = app.config.get('SSL_KEY_PATH', '')
    print("\nFF callback_url5 " + callback_url)
    r = session.request('post',
                        callback_url,
                        data=dumps(ret_data),
                        headers={'content-type': 'application/json'},
                        verify=ssl_calist_path,
                        cert=(ssl_cert_path, ssl_key_path))
    print(r.text)
    end_task()
    def handle_error(self, error):
        '''
        When an error is propagated up to here, is time to return to the sender
        that this task failed
        '''
        try:
            session = requests.sessions.Session()
            session.mount('http://', RejectAdapter())
            input_data = self.task.get_data()['input_data']
            election_id = input_data['election_id']
            callback_url = input_data['callback_url']
            election = db.session.query(Election)\
                .filter(Election.id == election_id).first()

            session = requests.sessions.Session()
            fail_data = {
                "status": "error",
                "reference": {
                    "election_id": election_id,
                    "action": "POST /tally"
                },
                "data": {
                    "message": "election tally failed for some reason"
                }
            }
            ssl_calist_path = app.config.get('SSL_CALIST_PATH', '')
            ssl_cert_path = app.config.get('SSL_CERT_PATH', '')
            ssl_key_path = app.config.get('SSL_KEY_PATH', '')
            print("\nFF callback_url4 " + callback_url)
            r = session.request('post',
                                callback_url,
                                data=dumps(fail_data),
                                headers={'content-type': 'application/json'},
                                verify=ssl_calist_path,
                                cert=(ssl_cert_path, ssl_key_path))
            print(r.text)
        finally:
            end_task()
def return_election(task):
    input_data = task.get_data()['input_data']
    election_id = input_data['election_id']
    session_ids = input_data['session_ids']
    election = db.session.query(Election)\
        .filter(Election.id == election_id).first()

    session_data = []

    for session_id in session_ids:
        # read into a string the pubkey
        privdata_path = app.config.get('PRIVATE_DATA_PATH', '')
        pubkey_path = os.path.join(privdata_path, str(election_id), session_id,
                                   'publicKey_json')
        pubkey_file = open(pubkey_path, 'r')
        pubkey = pubkey_file.read()
        pubkey_file.close()
        session_data.append(
            dict(session_id=session_id, pubkey=json.loads(pubkey)))

        # publish the pubkey
        pubdata_path = app.config.get('PUBLIC_DATA_PATH', '')
        pub_session_path = os.path.join(pubdata_path, str(election_id),
                                        session_id)
        pubkey_path2 = os.path.join(pub_session_path, 'publicKey_json')
        if not os.path.exists(pub_session_path):
            mkdir_recursive(pub_session_path)
        shutil.copyfile(pubkey_path, pubkey_path2)

        # publish protInfo.xml too
        session_privpath = os.path.join(privdata_path, str(election_id),
                                        session_id)
        protinfo_privpath = os.path.join(session_privpath, 'protInfo.xml')
        protinfo_pubpath = os.path.join(pub_session_path, 'protInfo.xml')
        shutil.copyfile(protinfo_privpath, protinfo_pubpath)

    session = requests.sessions.Session()
    session.mount('http://', RejectAdapter())
    callback_url = election.callback_url
    ret_data = {
        "status": "finished",
        "reference": {
            "election_id": election_id,
            "action": "POST /election"
        },
        "session_data": session_data
    }
    print("callback_url, " + callback_url + ", data = ")
    print(dumps(ret_data))
    ssl_calist_path = app.config.get('SSL_CALIST_PATH', '')
    ssl_cert_path = app.config.get('SSL_CERT_PATH', '')
    ssl_key_path = app.config.get('SSL_KEY_PATH', '')
    try:
        r = session.request('post',
                            callback_url,
                            data=dumps(ret_data),
                            headers={'content-type': 'application/json'},
                            verify=ssl_calist_path,
                            cert=(ssl_cert_path, ssl_key_path))
    except Exception as e:
        print("exception posting callback = ")
        print(e)
        raise e
    print("received text = ")
    print(r.text)
    end_task()