Exemple #1
0
def setup_exporter(app):
    global csv_exporter
    global json_exporter
    from pybossa.exporter.csv_export import CsvExporter
    from pybossa.exporter.json_export import JsonExporter
    csv_exporter = CsvExporter()
    json_exporter = JsonExporter()
Exemple #2
0
def export_userdata(user_id, **kwargs):
    from pybossa.core import user_repo, project_repo, task_repo, result_repo
    from flask import current_app, url_for
    json_exporter = JsonExporter()
    user = user_repo.get(user_id)
    user_data = user.dictize()
    del user_data['passwd_hash']
    projects = project_repo.filter_by(owner_id=user.id)
    projects_data = [project.dictize() for project in projects]
    taskruns = task_repo.filter_task_runs_by(user_id=user.id)
    taskruns_data = [tr.dictize() for tr in taskruns]
    pdf = json_exporter._make_zip(None, '', 'personal_data', user_data, user_id,
                                  'personal_data.zip')
    upf = json_exporter._make_zip(None, '', 'user_projects', projects_data, user_id,
                                  'user_projects.zip')
    ucf = json_exporter._make_zip(None, '', 'user_contributions', taskruns_data, user_id,
                                  'user_contributions.zip')
    upload_method = current_app.config.get('UPLOAD_METHOD')
    if upload_method == 'local':
        upload_method = 'uploads.uploaded_file'

    personal_data_link = url_for(upload_method,
                                 filename="user_%s/%s" % (user_id, pdf))
    personal_projects_link = url_for(upload_method,
                                    filename="user_%s/%s" % (user_id,
                                                             upf))
    personal_contributions_link = url_for(upload_method,
                                          filename="user_%s/%s" % (user_id,
                                                                   ucf))

    body = render_template('/account/email/exportdata.md',
                           user=user.dictize(),
                           personal_data_link=personal_data_link,
                           personal_projects_link=personal_projects_link,
                           personal_contributions_link=personal_contributions_link,
                           config=current_app.config)

    html = render_template('/account/email/exportdata.html',
                           user=user.dictize(),
                           personal_data_link=personal_data_link,
                           personal_projects_link=personal_projects_link,
                           personal_contributions_link=personal_contributions_link,
                           config=current_app.config)
    subject = 'Your personal data'
    mail_dict = dict(recipients=[user.email_addr],
                     subject=subject,
                     body=body,
                     html=html)
    send_mail(mail_dict)
Exemple #3
0
def setup_exporter(app):
    """Setup exporter."""
    global csv_exporter
    global task_csv_exporter
    global json_exporter
    global task_json_exporter
    global project_csv_exporter
    from pybossa.exporter.csv_export import CsvExporter
    from pybossa.exporter.task_csv_export import TaskCsvExporter
    from pybossa.exporter.json_export import JsonExporter
    from pybossa.exporter.task_json_export import TaskJsonExporter
    from pybossa.exporter.project_csv_export import ProjectCsvExporter
    csv_exporter = CsvExporter()
    task_csv_exporter = TaskCsvExporter()
    json_exporter = JsonExporter()
    task_json_exporter = TaskJsonExporter()
    project_csv_exporter = ProjectCsvExporter()
Exemple #4
0
    def test_exporters_generates_zip(self, json_uploader, csv_uploader):
        """Test that CsvExporter and JsonExporter generate zip works."""

        user = UserFactory.create(admin=True)
        project = ProjectFactory.create(name='test_project')
        task = TaskFactory.create(project=project)
        task_run = TaskRunFactory.create(project=project, task=task)
        csv_exporter = CsvExporter()
        json_exporter = JsonExporter()
        csv_exporter.pregenerate_zip_files(project)
        call_csv_params = csv_uploader.upload_file.call_args_list
        expected_csv_params = set(['1_project1_task_run_csv.zip', '1_project1_result_csv.zip', '1_project1_task_csv.zip'])
        assert self._check_func_called_with_params(call_csv_params, expected_csv_params)

        json_exporter.pregenerate_zip_files(project)
        call_json_params = json_uploader.upload_file.call_args_list
        expected_json_params = set(['1_project1_task_run_json.zip', '1_project1_result_json.zip', '1_project1_task_json.zip'])
        assert self._check_func_called_with_params(call_json_params, expected_json_params)
Exemple #5
0
def export_userdata(user_id, admin_addr, **kwargs):
    from pybossa.core import (user_repo, uploader)
    from flask import current_app, url_for
    json_exporter = JsonExporter()
    user = user_repo.get(user_id)
    user_data = user.dictize()
    del user_data['passwd_hash']
    pdf = json_exporter._make_zip(None, '', 'personal_data', user_data, user_id,
                                  'personal_data.zip')
    upload_method = current_app.config.get('UPLOAD_METHOD')

    attachments = []
    personal_data_link = None
    if upload_method == 'local':
        filename = uploader.get_file_path('user_%s' % user_id, pdf)
        with open(filename) as fp:
            attachment = Attachment(pdf, "application/zip",
                                    fp.read())
        attachments = [attachment]
    else:
        personal_data_link = url_for(upload_method,
                                    filename="user_%s/%s" % (user_id, pdf))

    body = render_template('/account/email/exportdata.md',
                           user=user.dictize(),
                           personal_data_link=personal_data_link,
                           config=current_app.config)

    html = render_template('/account/email/exportdata.html',
                           user=user.dictize(),
                           personal_data_link=personal_data_link,
                           config=current_app.config)
    subject = 'Your personal data'
    bcc = [admin_addr]
    mail_dict = dict(recipients=[user.email_addr],
                     bcc=bcc,
                     subject=subject,
                     body=body,
                     html=html,
                     attachments=attachments)
    send_mail(mail_dict)
    def test_exporters_generates_zip(self, json_uploader, csv_uploader,
                                     dataframe):
        """Test that CsvExporter and JsonExporter generate zip works."""
        user = UserFactory.create(admin=True)
        project = ProjectFactory.create(name='test_project')
        expected_gold_answer = {
            'best_job': 'software developer',
            'best_boss': 'Juan'
        }

        task1 = TaskFactory.create(project=project,
                                   gold_answers=expected_gold_answer)
        task2 = TaskFactory.create(project=project)

        task_run = TaskRunFactory.create(project=project, task=task1)
        task_run = TaskRunFactory.create(project=project, task=task2)

        csv_exporter = CsvExporter()
        json_exporter = JsonExporter()
        csv_exporter.pregenerate_zip_files(project)
        call_dataframe = dataframe.call_args_list
        call_csv_params = csv_uploader.upload_file.call_args_list
        expected_csv_params = set([
            '1_project1_task_run_csv.zip', '1_project1_result_csv.zip',
            '1_project1_task_csv.zip'
        ])
        assert self._check_func_called_with_params(call_csv_params,
                                                   expected_csv_params)

        task1_data = call_dataframe[0][0][0][0]
        task2_data = call_dataframe[0][0][0][1]

        expected_headers = [
            'info', 'fav_user_ids', 'user_pref', 'n_answers', 'quorum',
            'calibration', 'created', 'state', 'gold_answers_best_job',
            'gold_answers_best_boss', 'exported', 'project_id', 'id',
            'priority_0', 'expiration'
        ]
        obj_keys = task1_data.keys()

        self._compare_object_keys(obj_keys, expected_headers)
        assert task1_data['gold_answers_best_job'] == expected_gold_answer[
            'best_job']
        assert task1_data['gold_answers_best_boss'] == expected_gold_answer[
            'best_boss']

        expected_headers = [
            'info', 'fav_user_ids', 'user_pref', 'n_answers', 'quorum',
            'calibration', 'created', 'state', 'gold_answers', 'exported',
            'project_id', 'id', 'priority_0', 'expiration'
        ]
        obj_keys = task2_data.keys()

        self._compare_object_keys(obj_keys, expected_headers)
        assert task2_data['gold_answers'] == None

        json_exporter.pregenerate_zip_files(project)
        call_json_params = json_uploader.upload_file.call_args_list
        expected_json_params = set([
            '1_project1_task_run_json.zip', '1_project1_result_json.zip',
            '1_project1_task_json.zip'
        ])
        assert self._check_func_called_with_params(call_json_params,
                                                   expected_json_params)