예제 #1
0
def test_to_validation_rules():
    raises(NotImplementedError, lambda: to_validation_rules({"": ""}))
    assert {
        "partitionby_has": ["a", "b"],
        "partitionby_is": ["c", "d"],
    } == to_validation_rules({
        "partitionby_has": ["a", "b"],
        "partitionby_is": " c, d"
    })
    assert {
        "presort_has": [("a", True), ("b", False)],
        "presort_is": [("c", False), ("d", True)],
    } == to_validation_rules({
        "presort_has": " a , b desc ",
        "presort_is": [("c", False), "d"],
    })
    assert {
        "input_has": ["a", "b:str"],
    } == to_validation_rules({
        "input_has": ["a", " b : str "],
    })
    assert {
        "input_has": ["a", "b:str"],
    } == to_validation_rules({
        "input_has": "a, b : str",
    })
    assert {
        "input_is": "a:int,b:str"
    } == to_validation_rules({
        "input_is": ["a:int", " b : str "],
    })
    with raises(SyntaxError):
        to_validation_rules({
            "input_is": "a, b : str",
        })
예제 #2
0
 def deco(func: Callable) -> "_FuncAsCoTransformer":
     assert_or_throw(
         not is_class_method(func),
         NotImplementedError(
             "cotransformer decorator can't be used on class methods"),
     )
     return _FuncAsCoTransformer.from_func(
         func,
         schema,
         validation_rules=to_validation_rules(validation_rules))
예제 #3
0
def test_validate_input_schema():
    schema = "a:int,b:int,c:str"

    validate_input_schema(schema, to_validation_rules({"input_has": "a, c"}))
    validate_input_schema(schema,
                          to_validation_rules({"input_has": "a, c,b:int"}))
    with raises(FugueWorkflowRuntimeValidationError
                ):  # col type matters (if specified)
        validate_input_schema(schema,
                              to_validation_rules({"input_has": "a, c,b:str"}))

    validate_input_schema(
        schema, to_validation_rules({"input_is": "a:int, b:int, c:str"}))
    with raises(FugueWorkflowRuntimeValidationError
                ):  # col type matters (if specified)
        validate_input_schema(
            schema, to_validation_rules({"input_is": "a:int, b:int, c:int"}))
    with raises(FugueWorkflowRuntimeValidationError):  # order matters
        validate_input_schema(
            schema, to_validation_rules({"input_is": "a:int, c:str,b:int"}))
    with raises(SyntaxError):  # order matters
        validate_input_schema(schema,
                              to_validation_rules({"input_is": "a,b,c"}))
예제 #4
0
 def deco(func: Callable) -> "_FuncAsProcessor":
     return _FuncAsProcessor.from_func(
         func,
         schema,
         validation_rules=to_validation_rules(validation_rules))
예제 #5
0
파일: convert.py 프로젝트: gityow/fugue
 def deco(func: Callable) -> "_FuncAsOutputter":
     return _FuncAsOutputter.from_func(
         func, validation_rules=to_validation_rules(validation_rules)
     )
예제 #6
0
def test_validate_partition_spec():
    spec = PartitionSpec(by=["a", "b", "c"], presort="d desc, e")

    validate_partition_spec(spec,
                            to_validation_rules({"partitionby_has": ["a"]}))
    with raises(FugueWorkflowCompileValidationError):
        validate_partition_spec(
            spec, to_validation_rules({"partitionby_has": ["x"]}))
    with raises(FugueWorkflowCompileValidationError):
        validate_partition_spec(
            spec, to_validation_rules({"partitionby_has": "a,x"}))
    validate_partition_spec(spec,
                            to_validation_rules({"partitionby_is": "a,b,c"}))
    # order in partitionby doesn't matter
    validate_partition_spec(spec,
                            to_validation_rules({"partitionby_is": "c,b,a"}))
    with raises(FugueWorkflowCompileValidationError):
        validate_partition_spec(spec,
                                to_validation_rules({"partitionby_is": "a,b"}))

    # order in presort_has doesn't matter
    validate_partition_spec(spec,
                            to_validation_rules({"presort_has": "d desc"}))
    validate_partition_spec(spec,
                            to_validation_rules({"presort_has": "e,d desc"}))
    with raises(FugueWorkflowCompileValidationError):  # sort order matters
        validate_partition_spec(spec, to_validation_rules({"presort_has":
                                                           "d"}))
    with raises(FugueWorkflowCompileValidationError):
        validate_partition_spec(spec, to_validation_rules({"presort_has":
                                                           "x"}))
    with raises(FugueWorkflowCompileValidationError):
        validate_partition_spec(
            spec, to_validation_rules({"presort_has": "x,d desc"}))

    validate_partition_spec(spec,
                            to_validation_rules({"presort_is": "d desc,e"}))
    with raises(FugueWorkflowCompileValidationError
                ):  # order in presort_is matters
        validate_partition_spec(
            spec, to_validation_rules({"presort_is": "e,d desc"}))