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)
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
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()
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)
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'}]
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)
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
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
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