def test_validator_repo_readme_file_missing(param_json):
    report_dict = {
        'name': 'Report',
        'readme_file': 'readme.md',
        'entrypoint': 'reports.report_package.entrypoint',
        'audience': ['vendor', 'provider'],
        '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)
    parameter = ParameterDefinition(**param_json())
    report = ReportDefinition(
        root_path='root_path',
        **report_dict,
        renderers=[csv_renderer],
        parameters=[parameter],
    )
    repo_dict = {
        'name': 'Reports Repository',
        'readme_file': 'readme.md',
        'version': '1.0.0',
        'language': 'python',
        'reports': [report],
    }
    repo = RepositoryDefinition(root_path='root_path', **repo_dict)
    errors = validate(repo)

    assert len(errors) != 0
    assert 'repository property `readme_file` cannot be resolved' 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]
Exemple #3
0
def validate_project(project_dir):
    click.secho(f'Validating project {project_dir}...\n', fg='blue')

    data = _file_descriptor_validations(project_dir)

    errors = validate_with_schema(data)
    if errors:
        raise ClickException(f'Invalid `reports.json`: {errors}')

    report_project = parse(project_dir, data)

    errors = validate(report_project)
    if errors:
        raise ClickException(f'Invalid `reports.json`: {",".join(errors)}')

    for report in report_project.reports:
        _entrypoint_validations(project_dir, report.entrypoint, report.report_spec)

    click.secho(f'Report Project {project_dir} has been successfully validated.', fg='green')
Exemple #4
0
def load_repo(repo_dir):
    cfg = os.path.join(repo_dir, 'reports.json')
    if not os.path.isfile(cfg):
        raise ClickException(
            f'The directory `{repo_dir}` is not a reports project root directory.',
        )
    try:
        descriptor = json.load(open(cfg, 'r'))
    except json.JSONDecodeError:
        raise ClickException(
            'The reports project descriptor `reports.json` is not a valid json file.',
        )

    errors = validate_with_schema(descriptor)
    if errors:
        raise ClickException(f'Invalid `reports.json`: {errors}')

    repo = parse(repo_dir, descriptor)

    errors = validate(repo)
    if errors:
        raise ClickException(f'Invalid `reports.json`: {",".join(errors)}')

    return repo