コード例 #1
0
ファイル: app.py プロジェクト: LSDRH/WikiChron
    def download_data_networks():

        selection = parse_qs(decode(request.query_string))
        print('Received this selection to download: {}'.format(selection))
        if not is_valid(selection):
            return 'Nothing to download!'

        wikis = extract_wikis_from_selection_dict(selection)
        network_code = selection['network'][0]
        lower_bound = ''
        upper_bound = ''
        if 'lower_bound' and 'upper_bound' in selection.keys():
            lower_bound = int(selection['lower_bound'][0])
            upper_bound = int(selection['upper_bound'][0])
            upper_bound = datetime.fromtimestamp(upper_bound).strftime(
                "%Y-%m-%d %H:%M:%S")
            lower_bound = datetime.fromtimestamp(lower_bound).strftime(
                "%Y-%m-%d %H:%M:%S")

        network = data_controller.get_network(wikis[0], network_code,
                                              lower_bound, upper_bound)

        tmp = TempFS()

        tmp.create('network.gml')
        path = tmp.getsyspath('/network.gml')

        network.write_gml(file=path)
        return send_file(filename_or_fp=path,
                         as_attachment=True,
                         attachment_filename='network.gml')
コード例 #2
0
def test_validator_entrypoint_bad_directory_structure(report_v2_json,
                                                      param_json):
    tmp_filesystem = TempFS()
    tmp_filesystem.create('readme.md')
    renderer_json_dict = {
        'root_path': tmp_filesystem.root_path,
        'id': '321',
        'type': 'json',
        'description': 'JSON Renderer',
        'default': True,
    }
    renderer = RendererDefinition(**renderer_json_dict)
    parameter = ParameterDefinition(**param_json())
    report_dict = report_v2_json(
        readme_file='readme.md',
        renderers=[renderer],
        parameters=[parameter],
    )
    report = ReportDefinition(
        root_path=tmp_filesystem.root_path,
        **report_dict,
    )
    errors = _validate_report(report)

    assert len(errors) != 0
    assert 'directory structure does not match' in errors[0]
コード例 #3
0
def test_validator_repo_duplicated_reports(mocker, param_json):
    mocker.patch(
        'connect.reports.validator._validate_report',
        return_value=[],
    )
    report_dict_1 = {
        'name': 'Report',
        'readme_file': 'readme.md',
        'entrypoint': 'reports.report_package.entrypoint',
        'audience': ['vendor', 'provider'],
        'parameters': [param_json()],
        'report_spec': '2',
    }
    report_dict_2 = {
        'name': 'Report',
        'readme_file': 'readme.md',
        'entrypoint': 'reports.report_package.entrypoint',
        'audience': ['vendor', 'provider'],
        'parameters': [param_json()],
        'report_spec': '2',
    }
    renderer_csv_dict = {
        'root_path': 'root_path',
        'id': '123',
        'type': 'csv',
        'description': 'CSV Renderer',
        'default': True,
    }
    csv_renderer = RendererDefinition(**renderer_csv_dict)
    report_1 = ReportDefinition(
        root_path='root_path',
        **report_dict_1,
        renderers=[csv_renderer],
    )
    report_2 = ReportDefinition(
        root_path='root_path',
        **report_dict_2,
        renderers=[csv_renderer],
    )
    tmp_filesystem = TempFS()
    tmp_filesystem.create('readme.md')
    repo_dict = {
        'name': 'Reports Repository',
        'readme_file': 'readme.md',
        'version': '1.0.0',
        'language': 'python',
        'reports': [report_1, report_2],
    }
    repo = RepositoryDefinition(
        root_path=tmp_filesystem.root_path,
        **repo_dict,
    )

    errors = validate(repo)

    assert len(errors) != 0
    assert 'Multiple reports within single module found' in errors[0]
コード例 #4
0
def _get_tmpfs_with_readme_and_entry(entrypoint):
    tmp_fs = TempFS()
    tmp_fs.create('readme.md')

    *dirpath, filename = entrypoint.split('.')
    package_path = '/'.join(dirpath)
    script_path = f'{package_path}/{filename}.py'
    tmp_fs.makedirs(package_path)
    tmp_fs.create(script_path)

    return tmp_fs
コード例 #5
0
def test_validate_tempfs_ok():
    tmp_fs = TempFS()
    tmplate_filename = 'template.csv.j2'
    tmp_fs.create(tmplate_filename)

    defs = RendererDefinition(
        root_path=tmp_fs.root_path,
        id='renderer_id',
        type='jinja2',
        description='description',
        template=tmplate_filename,
    )

    assert Jinja2Renderer.validate(defs) == []
コード例 #6
0
def test_validate_tmpfs_css_missing():
    tmp_fs = TempFS()
    tmp_fs.makedirs('package/report')
    tmp_fs.create('package/report/template.html.j2')
    definition = RendererDefinition(
        root_path=tmp_fs.root_path,
        id='renderer_id',
        type='pdf',
        description='description',
        template='package/report/template.html.j2',
        args={'css_file': 'package/report/css_file.css'},
    )
    errors = PDFRenderer.validate(definition)

    assert f"css_file `{definition.args['css_file']}` not found." == errors[0]
コード例 #7
0
def test_validate_template_not_valid():

    tmp_filesystem = TempFS()
    tmp_filesystem.create('test.xlsx')

    defs = RendererDefinition(
        root_path=tmp_filesystem.root_path,
        id='renderer_id',
        type='xlsx',
        description='description',
        template='test.xlsx',
    )

    errors = XLSXRenderer.validate(defs)

    assert 'not valid or empty' in errors[0]
コード例 #8
0
def test_validate_tmpfs_template_wrong_name():
    tmp_fs = TempFS()
    tmp_fs.makedirs('package/report')
    tmp_fs.create('package/report/template.html.j3')
    tmp_fs.create('css_file.css')
    definition = RendererDefinition(
        root_path=tmp_fs.root_path,
        id='renderer_id',
        type='pdf',
        description='description',
        template='package/report/template.html.j3',
        args={'css_file': 'css_file.css'},
    )
    errors = PDFRenderer.validate(definition)

    assert f"invalid template name: `{definition.template}`" in errors[0]
コード例 #9
0
def test_validate_tempfs_template_invalid_name():
    tmp_fs = TempFS()
    tmplate_filename = 'template.j3'
    tmp_fs.create(tmplate_filename)

    defs = RendererDefinition(
        root_path=tmp_fs.root_path,
        id='renderer_id',
        type='jinja2',
        description='description',
        template=tmplate_filename,
    )

    assert Jinja2Renderer.validate(defs) == [
        f'invalid template name: `{tmplate_filename}` '
        '(must be in the form <name>.<ext>.j2).',
    ]
コード例 #10
0
ファイル: app.py プロジェクト: Grasia/WikiChron-networks
    def download_data_server():

        selection = parse_qs(decode(request.query_string))
        print ('Received this selection to download: {}'.format(selection))
        if not is_valid(selection):
            return 'Nothing to download!'

        wikis = extract_wikis_from_selection_dict(selection)
        network_code = selection['network'][0]
        network = data_controller.get_network(wiki = wikis[0], network_code = network_code)

        tmp = TempFS()

        tmp.create('network.gml')
        path = tmp.getsyspath('/network.gml')

        network.write_gml(file = path)
        return flask.send_file(filename_or_fp = path, as_attachment=True, attachment_filename='network.gml')
コード例 #11
0
def test_validator_entrypoint_bad_format(report_v2_json):
    tmp_filesystem = TempFS()
    tmp_filesystem.create('readme.md')
    renderer_json_dict = {
        'root_path': tmp_filesystem.root_path,
        'id': '321',
        'type': 'json',
        'description': 'JSON Renderer',
    }
    renderer = RendererDefinition(**renderer_json_dict)
    report_dict = report_v2_json(
        readme_file='readme.md',
        entrypoint='mypackage',
        renderers=[renderer],
    )
    report = ReportDefinition(
        root_path=tmp_filesystem.root_path,
        **report_dict,
    )
    errors = _validate_report(report)

    assert len(errors) != 0
    assert 'does not follow the package structure' in errors[0]