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')
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]
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]
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
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) == []
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]
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]
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]
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).', ]
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')
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]