Пример #1
0
def test_extract(element, expr, expect, build_first):
    extractor = JSONExtractor(expr)
    assert not extractor.built
    if build_first:
        extractor.build()
        assert extractor.built

    assert expect == extractor.extract(element)
    assert extractor.built
Пример #2
0
def test_extract_first_without_default(element, expr, build_first):
    extractor = JSONExtractor(expr)
    if build_first:
        extractor.build()

    with pytest.raises(ExtractError) as catch:
        extractor.extract_first(element)

    exc = catch.value
    assert len(exc.extractors) == 1
    assert exc.extractors[0] is extractor
    assert exc.element is element
Пример #3
0
def test_invalid_css_selector_expr(element, expr, by):
    extractor = JSONExtractor(expr)
    with pytest.raises(ExprError) as catch:
        if by == "build":
            extractor.build()
        elif by == "extract":
            extractor.extract(element)

    exc = catch.value
    assert exc.extractor is extractor

    if (data_extractor.json.json_extractor_backend is
            data_extractor.json.JSONPathExtractor):
        # JSONExtractor implementated by 'jsonpath-extractor'
        # only raise SyntaxError in build method
        assert isinstance(exc.exc, SyntaxError)
    else:
        from jsonpath_rw.lexer import JsonPathLexerError

        assert isinstance(exc.exc, (JsonPathLexerError, Exception))

    assert re.match(r"ExprError with .+? raised by .+? extracting", str(exc))
Пример #4
0
def test_extract_first(element, expr, expect, build_first):
    extractor = JSONExtractor(expr)
    if build_first:
        extractor.build()

    assert expect == extractor.extract_first(element, default="default")