Пример #1
0
def test_server(mocker):
    mocker.patch('datacraft.server.flask.Flask.run', return_value=None)

    spec = {"test:uuid": {}}

    gen = datacraft.parse_spec(spec).generator(1)

    datacraft.server.run(gen, endpoint='/test', data_is_json=True)
Пример #2
0
def test_spec_like_dict():
    raw = {"one": ["a", "b", "c"], "two": [1, 2, 3]}
    spec = datacraft.parse_spec(raw)

    assert len(spec) == 2
    assert spec["one"] is not None
    assert spec.get("two") is not None
    assert spec.pop("one") is not None
    assert len(spec) == 1
    assert len(spec.items()) == 1
Пример #3
0
def test_server_callback_stop_iteration(mocker):
    mocker.patch('flask.jsonify', return_value=None)
    spec = {"test:uuid": {}}

    gen = datacraft.parse_spec(spec).generator(1)

    server = datacraft.server._Server(gen, endpoint='/test', data_is_json=True)

    # two calls should trigger the StopIteration
    server.callback()
    server.callback()
Пример #4
0
def test_server_callback(mocker):
    spec = {"test:values": 42}

    processor = datacraft.outputs.processor(format_name='json-pretty')
    gen = datacraft.parse_spec(spec).generator(1, processor=processor)

    server = datacraft.server._Server(gen,
                                      endpoint='/test',
                                      data_is_json=False)

    record = server.callback()
    assert record == json.dumps({'test': 42}, indent=4)
Пример #5
0
def test_spec_based_templated():
    raw = {
        "field": {
            "type": "templated",
            "data": "system {{ char }}.{{ num }}",
            "refs": ["char", "num"]
        },
        "refs": {
            "char": ["a", "b", "c"],
            "num": [1, 2, 3]
        }
    }
    spec = datacraft.parse_spec(raw)
    single = list(spec.generator(1))
    assert single == [{'field': 'system a.1'}]
Пример #6
0
    def build(self) -> DataSpec:
        """
        Generates the spec from the provided fields, refs, and field_groups

        Returns:
            Built DataSpec
        """
        spec = {}
        spec.update(self.fields)
        if len(self.refs_builder.fields) > 0:
            spec['refs'] = self.refs_builder.fields
        if len(self.field_groups) > 0:
            self._configure_field_groups(spec)

        return datacraft.parse_spec(spec)
Пример #7
0
def test_nested_field_groups_invalid_name():
    raw_spec = {
        "outer": {
            "type": "nested",
            "fields": {
                "one": "Val 1",
                "two": "Val 2"
            },
            "field_groups": [["one"], ["one", "tre"]]
        }
    }
    with pytest.raises(datacraft.SupplierException):
        spec = datacraft.parse_spec(raw_spec)
        gen = spec.generator(iterations=2)
        next(gen)  # no error
        next(gen)  # should trigger
Пример #8
0
def test_date_restrict_hours():
    date_format = "%d-%m-%Y %H"
    config = {
        "duration_days": 14, "format": date_format,
        "hours": {
            "type": "distribution",
            "data": "normal(mean=12, stddev=5, min=6, max=21)"
        }
    }
    spec = _date_spec(**config)
    iterations = 100
    gen = datacraft.parse_spec(spec).generator(iterations)
    for _ in range(iterations):
        date = next(gen)['foo']
        dt = datetime.datetime.strptime(date, date_format)
        assert 6 <= dt.hour <= 21
Пример #9
0
def test_nested_field_groups():
    raw_spec = {
        "outer": {
            "type": "nested",
            "fields": {
                "one": "Val 1",
                "two": "Val 2"
            },
            "field_groups": [["one"], ["one", "two"]]
        }
    }
    spec = datacraft.parse_spec(raw_spec)
    gen = spec.generator(iterations=2, enforce_schema=True)
    first = next(gen)["outer"]
    second = next(gen)["outer"]
    assert "two" not in first
    assert "two" in second