def test_table_answer_element_deser():
    """Check proper deserialization for a valid table answer."""
    answer = {
        "answerElements": [{
            "metadata": {
                "columnMetadata": [{
                    "name": "col1",
                    "schema": "String"
                }, {
                    "name": "col2",
                    "schema": "String"
                }]
            },
            "rows": [{
                "col1": "value1",
                "col2": "value2"
            }]
        }]
    }
    table = TableAnswerElement(answer)

    assert len(table.metadata.column_metadata) == 2
    assert table.metadata.column_metadata[0].name == "col1"
    assert len(table.rows) == 1
    assert table.rows[0].get("col1") == "value1"
    assert table.rows[0].get("col2") == "value2"
    assert not table.frame().empty
def test_table_answer_element_no_metadata():
    """Exception is raised when metadata field is not present."""
    answer_element = {"noMetadata": {}}
    with pytest.raises(ValueError):
        TableAnswerElement(answer_element)
    with pytest.raises(ValueError):
        TableAnswerElement({})
def test_table_answer_element_deser_no_rows():
    """Check deserialization creates empty table when no rows are present."""
    answer_element = {
        "metadata": {
            "columnMetadata": [{
                "name": "col1",
                "schema": "Node"
            }]
        }
    }
    table = TableAnswerElement(answer_element)

    assert len(table.metadata.column_metadata) == 1
    assert table.metadata.column_metadata[0].name == "col1"
    assert len(table.rows) == 0
    assert table.frame().empty
Esempio n. 4
0
def from_string(json_string):
    # type: (str) -> Answer
    """Take a string representing a Batfish answer, return answer object.

    :returns either an old :py:class:`Answer`
        or new :py:class:`TableAnswerElement` class.
    """
    o = json.loads(json_string)
    if "answerElements" in o and "metadata" in o["answerElements"][0]:
        return TableAnswerElement(o)
    else:
        return Answer(o)
Esempio n. 5
0
def bf_str_answer(answer_json):
    """Convert the Json answer to a string."""
    try:
        if "answerElements" in answer_json and "metadata" in \
                answer_json["answerElements"][0]:
            table_answer = TableAnswerElement(answer_json["answerElements"][0])
            return table_answer.table_data.to_string()
        else:
            return get_answer_text(answer_json)
    except Exception as error:
        return "Error getting answer text: {}\n Original Json:\n {}".format(
            error, json.dumps(answer_json, indent=2))
def test_table_answer_no_answer_elements():
    """Exception is raised when answer elements are empty or not present."""
    with pytest.raises(ValueError):
        TableAnswerElement({})
    with pytest.raises(ValueError):
        TableAnswerElement({"answerElements": []})