コード例 #1
0
    def test_normal_multi_table(self, con_a0, con_b0):
        out_db_path = "test.sqlite"
        runner = CliRunner()

        with runner.isolated_filesystem():
            result = runner.invoke(
                cmd,
                [
                    "file", con_a0.database_path, con_b0.database_path,
                    "-o", out_db_path,
                ])
            print_traceback(result)
            assert result.exit_code == ExitCode.SUCCESS

            expected_list = [
                TableData(
                    table_name=TEST_TABLE_NAME_A,
                    header_list=["attr_a", "attr_b"],
                    record_list=[
                        [1, 2],
                        [3, 4],
                    ]),
                TableData(
                    table_name=TEST_TABLE_NAME_B,
                    header_list=["ba", "bb"],
                    record_list=[
                        [101, 102],
                        [103, 104],
                    ]),
            ]
            for tabledata in SqliteFileLoader(out_db_path).load():
                print("[actual]   {}".format(tabledata))

                assert tabledata in expected_list
コード例 #2
0
    def test_normal(self, table_name, header_list, record_list):
        tabledata = TableData(table_name, header_list, record_list)
        dataframe = pandas.DataFrame(record_list)
        if typepy.is_not_empty_sequence(header_list):
            dataframe.columns = header_list

        print("lhs: {}".format(tabledata.as_dataframe()))
        print("rhs: {}".format(dataframe))

        assert tabledata.as_dataframe().equals(dataframe)
コード例 #3
0
    def test_normal(self, table_name, header_list, record_list):
        tabledata_a0 = TableData(table_name, header_list, record_list)
        tabledata_a1 = TableData(table_name, header_list, record_list)
        tabledata_b0 = TableData("dummy", header_list, record_list)

        assert tabledata_a0.__hash__() == tabledata_a1.__hash__()
        assert tabledata_a0.__hash__() != tabledata_b0.__hash__()
コード例 #4
0
    def test_normal(self, table_name, header_list, record_list, expected):
        tabledata = TableData(table_name, header_list, record_list)

        print("expected: {}".format(ptw.dump_tabledata(expected)))
        print("actusl: {}".format(ptw.dump_tabledata(tabledata)))

        assert tabledata == expected
コード例 #5
0
    def test_exception_invalid_data(
            self, table_name, header_list, record_list, expected):
        tabledata = TableData(table_name, header_list, record_list)
        sanitizer = SQLiteTableDataSanitizer(tabledata)

        with pytest.raises(expected):
            sanitizer.sanitize()
コード例 #6
0
    def test_normal_same_table(self, con_a0, con_a1):
        out_db_path = "test.sqlite"
        runner = CliRunner()

        with runner.isolated_filesystem():
            result = runner.invoke(
                cmd,
                [
                    "file", con_a0.database_path, con_a1.database_path,
                    "-o", out_db_path,
                ])
            print_traceback(result)
            assert result.exit_code == ExitCode.SUCCESS

            expected = TableData(
                table_name=TEST_TABLE_NAME_A,
                header_list=["attr_a", "attr_b"],
                record_list=[
                    [1, 2],
                    [3, 4],
                    [11, 12],
                    [13, 14],
                ])
            for tabledata in SqliteFileLoader(out_db_path).load():
                assert tabledata == expected
コード例 #7
0
    def test_normal(
            self, table_name, header_list, record_list,
            expected):
        tabledata = TableData(table_name, header_list, record_list)
        sanitizer = SQLiteTableDataSanitizer(tabledata)
        new_tabledata = sanitizer.sanitize()

        print("lhs: {}".format(ptw.dump_tabledata(new_tabledata)))
        print("rhs: {}".format(ptw.dump_tabledata(expected)))

        assert new_tabledata == expected
コード例 #8
0
class Test_TableData_constructor:

    __MIXED_DATA = [
        [1, 2],
        (3, 4),
        {
            "attr_a": 5,
            "attr_b": 6
        },
        {
            "attr_a": 7,
            "attr_b": 8,
            "not_exist_attr": 100
        },
        {
            "attr_a": 9
        },
        {
            "attr_b": 10
        },
        {},
        NamedTuple2(11, None),
    ]

    @pytest.mark.parametrize(
        ["table_name", "header_list", "record_list", "expected"], [
            [
                "normal", ["a", "b"], [[1, 2], [3, 4]],
                TableData("normal", ["a", "b"], [[1, 2], [3, 4]])
            ],
            [
                "empty_records", ["a", "b"], [],
                TableData("empty_records", ["a", "b"], [])
            ],
            [
                "empty_header", [], [[1, 2], [3, 4]],
                TableData("empty_header", [], [[1, 2], [3, 4]])
            ],
        ])
    def test_normal(self, table_name, header_list, record_list, expected):
        tabledata = TableData(table_name, header_list, record_list)

        print("expected: {}".format(ptw.dump_tabledata(expected)))
        print("actusl: {}".format(ptw.dump_tabledata(tabledata)))

        assert tabledata == expected

    @pytest.mark.parametrize(
        ["table_name", "header_list", "record_list", "expected"], [
            [
                "mixdata",
                attr_list_2,
                __MIXED_DATA,
                TableData("mixdata", attr_list_2, [
                    [1, 2],
                    [3, 4],
                    [5, 6],
                    [7, 8],
                    [9, None],
                    [None, 10],
                    [None, None],
                    [11, None],
                ]),
            ],
        ])
    def test_normal_none_value(self, table_name, header_list, record_list,
                               expected):
        tabledata = TableData(table_name, header_list, record_list)

        print("expected: {}".format(ptw.dump_tabledata(expected)))
        print("actusl: {}".format(ptw.dump_tabledata(tabledata)))

        assert tabledata == expected

    @pytest.mark.parametrize(
        ["table_name", "header_list", "record_list", "expected"], [
            ["tablename", ["a", "b"], [1, 2], InvalidDataError],
        ])
    def test_exception(self, table_name, header_list, record_list, expected):
        with pytest.raises(expected):
            TableData(table_name, header_list, record_list)
コード例 #9
0
 def test_normal(self, table_name, header_list, record_list, expected):
     tabledata = TableData(table_name, header_list, record_list)
     assert tabledata.is_empty() == expected
コード例 #10
0
class Test_TableData_eq:

    __DATA_0 = TableData("Sheet1", [
        'i',
        'f',
        'c',
        'if',
        'ifc',
        'bool',
        'inf',
        'nan',
        'mix_num',
        'time',
    ], [
        [
            1,
            "1.1",
            'aa',
            1,
            1,
            'True',
            float("inf"),
            "nan",
            1,
            '2017-01-01T00:00:00',
        ],
        [
            2,
            "2.2",
            'bbb',
            "2.2",
            "2.2",
            'False',
            float("inf"),
            float("NaN"),
            float("inf"),
            '2017-01-02 03:04:05+09:00',
        ],
        [
            3,
            "3.33",
            'cccc',
            -3,
            'ccc',
            'True',
            float("inf"),
            float("NaN"),
            float("NaN"),
            '2017-01-01T00:00:00',
        ],
    ])

    __DATA_1 = TableData("tablename", ["a", "b", "c", "dd", "e"], [])

    @pytest.mark.parametrize(["lhs", "rhs", "expected"], [
        [__DATA_0, __DATA_0, True],
        [__DATA_0, __DATA_1, False],
    ])
    def test_normal(self, lhs, rhs, expected):
        assert (lhs == rhs) == expected
        assert (lhs != rhs) == (not expected)
コード例 #11
0
import io
import collections

from path import Path
import pytablewriter as ptw
import pytest

import pytablereader as ptr
from pytablereader.interface import TableLoader
from pytablereader import TableData
from pytablereader.html.formatter import HtmlTableFormatter

Data = collections.namedtuple("Data", "value table_name expected")

test_data_empty = Data("""[]""", "", [
    TableData("tmp", [], []),
])

test_data_01 = Data(value="""<title>title</title>
<table>
  <thead>
    <tr>
      <th>a</th>
      <th>b</th>
      <th>c</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td align="right">1</td>
      <td align="right">123.1</td>
コード例 #12
0

Data = collections.namedtuple("Data", "value expected")

test_data_00 = Data(
    "\n".join([
        '"attr_a"\t"attr_b"\t"attr_c"',
        '1\t4\t"a"',
        '2\t2.1\t"bb"',
        '3\t120.9\t"ccc"',
    ]),
    [
        TableData(
            "tmp",
            ["attr_a", "attr_b", "attr_c"],
            [
                [1, 4,      "a"],
                [2, "2.1",    "bb"],
                [3, "120.9",  "ccc"],
            ])
    ])

test_data_01 = Data(
    "\n".join([
        '"attr_a"\t"attr_b"\t"attr_c"',
        '1\t4\t"a"',
        '2\t2.1\t"bb"',
        '3\t120.9\t"ccc"',
    ]),
    [
        TableData(
            "foo_bar",
コード例 #13
0
import pytest
import pytablewriter as ptw

import pytablereader as ptr
from pytablereader.interface import TableLoader
from pytablereader import TableData
from pytablereader import InvalidTableNameError


Data = collections.namedtuple("Data", "value expected")

test_data_empty = Data(
    """[]""",
    [
        TableData("tmp", [], []),
    ])

test_data_01 = Data(
    """[
        {"attr_b": 4, "attr_c": "a", "attr_a": 1},
        {"attr_b": 2.1, "attr_c": "bb", "attr_a": 2},
        {"attr_b": 120.9, "attr_c": "ccc", "attr_a": 3}
    ]""",
    [
        TableData(
            "json1",
            ["attr_a", "attr_b", "attr_c"],
            [
                {'attr_a': 1, 'attr_b': 4, 'attr_c': 'a'},
                {'attr_a': 2, 'attr_b': 2.1, 'attr_c': 'bb'},
コード例 #14
0
class Test_SQLiteTableDataSanitizer:

    @pytest.mark.parametrize(
        [
            "table_name", "header_list", "record_list", "expected"
        ],
        [
            [
                "normal", ["a", "b"], [[1, 2], [3, 4]],
                TableData("normal", ["a", "b"], [[1, 2], [3, 4]])
            ],
            [
                "OFFSET", ["abort", "ASC"], [[1, 2], [3, 4]],
                TableData("OFFSET", ["abort", "ASC"], [[1, 2], [3, 4]])
            ],
            [
                "all_missing_header", [], [[1, 2], [3, 4]],
                TableData(
                    "all_missing_header",
                    ["complement_attr_0", "complement_attr_1"],
                    [[1, 2], [3, 4]])
            ],
            [
                "part_missing_header", ["", "b", None], [],
                TableData(
                    "part_missing_header",
                    ["complement_attr_0", "b", "complement_attr_2"], [])
            ],
            [
                r"@a!b\c#d$e%f&g'h(i)j_",
                [r"a!b\c#d$e%f&g'h(i)j", r"k@l[m]n{o}p;q:r,s.t/u\\v"],
                [[1, 2], [3, 4]],
                TableData(
                    "a_b_c_d_e_f_g_h_i_j",
                    ["abcdefghij", "klmnopqrstuv"], [[1, 2], [3, 4]])
            ],
            [  # SQLite reserved keywords
                "ALL", ["and", "Index"], [[1, 2], [3, 4]],
                TableData(
                    "rename_ALL",
                    ["and", "Index"], [[1, 2], [3, 4]])
            ],
            [
                "0invalid_tn", ["1invalid", "where"], [[1, 2], [3, 4]],
                TableData(
                    "rename_0invalid_tn",
                    ["rename_1invalid", "where"], [[1, 2], [3, 4]])
            ],
            [
                "Python (programming language) - Wikipedia, the free encyclopedia.html",
                ["a b", "c d"], [[1, 2], [3, 4]],
                TableData(
                    "Python_programming_language_Wikipedia_the_free_encyclopedia_html",
                    ["ab", "cd"], [[1, 2], [3, 4]])
            ],
            [
                "multibyte csv",
                ["姓", "名", "生年月日", "郵便番号", "住所", "電話番号"],
                [
                    ["山田", "太郎", "2001/1/1", "100-0002",
                        "東京都千代田区皇居外苑", "03-1234-5678"],
                    ["山田", "次郎", "2001/1/2", "251-0036",
                        "神奈川県藤沢市江の島1丁目", "03-9999-9999"],
                ],
                TableData(
                    "multibyte_csv",
                    ["姓", "名", "生年月日", "郵便番号", "住所", "電話番号"],
                    [
                        ["山田", "太郎", "2001/1/1", "100-0002",
                         "東京都千代田区皇居外苑", "03-1234-5678"],
                        ["山田", "次郎", "2001/1/2", "251-0036",
                         "神奈川県藤沢市江の島1丁目", "03-9999-9999"],
                    ])
            ],
        ]
    )
    def test_normal(
            self, table_name, header_list, record_list,
            expected):
        tabledata = TableData(table_name, header_list, record_list)
        sanitizer = SQLiteTableDataSanitizer(tabledata)
        new_tabledata = sanitizer.sanitize()

        print("lhs: {}".format(ptw.dump_tabledata(new_tabledata)))
        print("rhs: {}".format(ptw.dump_tabledata(expected)))

        assert new_tabledata == expected

    @pytest.mark.parametrize(
        ["table_name", "header_list", "record_list", "expected"], [
            ["", ["a", "b"], [], ptr.InvalidTableNameError],
            [None, ["a", "b"], [], ptr.InvalidTableNameError],
            ["dummy", [], [], ptr.EmptyDataError],
        ]
    )
    def test_exception_invalid_data(
            self, table_name, header_list, record_list, expected):
        tabledata = TableData(table_name, header_list, record_list)
        sanitizer = SQLiteTableDataSanitizer(tabledata)

        with pytest.raises(expected):
            sanitizer.sanitize()
コード例 #15
0
from pytablereader.interface import TableLoader
from pytablereader import TableData
from pytablereader import (InvalidTableNameError, InvalidDataError,
                           InvalidHeaderNameError)

Data = collections.namedtuple("Data", "value expected")

test_data_00 = Data(
    """a.0:1\tb-1:123.1\tc_2:"a"\t"dd":1.0\te.f-g_4:"1"
a.0:2\tb-1:2.2\tc_2:"bb"\t"dd":2.2\te.f-g_4:"2.2"
a.0:3\tb-1:3.3\tc_2:"ccc"\t"dd":3.0\te.f-g_4:"cccc"
""",
    TableData("tmp", ["a.0", "b-1", "c_2", "dd", "e.f-g_4"], [
        [1, Decimal("123.1"), "a", 1, 1],
        [2, Decimal("2.2"), "bb",
         Decimal("2.2"),
         Decimal("2.2")],
        [3, Decimal("3.3"), "ccc", 3, "cccc"],
    ]))


class Test_LtsvTableFileLoader_make_table_name:
    def setup_method(self, method):
        TableLoader.clear_table_count()

    @pytest.mark.parametrize(["value", "source", "expected"], [
        ["%(default)s", "/path/to/data.ltsv", "data"],
        ["%(filename)s", "/path/to/data.ltsv", "data"],
        ["prefix_%(filename)s", "/path/to/data.ltsv", "prefix_data"],
        ["%(filename)s_suffix", "/path/to/data.ltsv", "data_suffix"],
        [
コード例 #16
0
from path import Path
from pytablereader import InvalidTableNameError
from pytablereader import TableData
from pytablereader.interface import TableLoader
import pytest
from simplesqlite import SimpleSQLite

import pytablereader as ptr
import pytablewriter as ptw

Data = collections.namedtuple("Data", "value expected")

test_data_00 = Data(
    TableData("tmp", ["attr_a", "attr_b", "attr_c"], [
        [1, 4, "a"],
        [2, Decimal("2.1"), "bb"],
        [3, Decimal("120.9"), "ccc"],
    ]), [
        TableData("tmp", ["attr_a", "attr_b", "attr_c"], [
            [1, 4, "a"],
            [2, Decimal("2.1"), "bb"],
            [3, Decimal("120.9"), "ccc"],
        ]),
    ])

test_data_01 = Data(
    TableData("foo_bar", ["attr_a", "attr_b", "attr_c"], [
        ["attr_a", "attr_b", "attr_c"],
        [1, 4, "a"],
        [2, "2.1", "bb"],
        [3, "120.9", "ccc"],
コード例 #17
0
 def test_normal(self, table_name, header_list, record_list, expected):
     tabledata = TableData(table_name, header_list, record_list)
     assert tabledata.as_dict() == json.loads(expected)
コード例 #18
0
 def test_exception(self, table_name, header_list, record_list, expected):
     with pytest.raises(expected):
         TableData(table_name, header_list, record_list).as_dict()
コード例 #19
0
import collections

from path import Path
from pytablereader import TableData
from pytablereader.interface import TableLoader
from pytablereader.mediawiki.formatter import MediaWikiTableFormatter
import pytest

import pytablereader as ptr

SKIP_TEST = True
Data = collections.namedtuple("Data", "value expected")

test_data_empty = Data("""[]""", [
    TableData("tmp", [], []),
])

test_data_01 = Data(
    """hogehoge
{| class="wikitable"
! a
! b
! c
|-
| style="text-align:right"| 1
| style="text-align:right"| 123.1
| a
|-
| style="text-align:right"| 2
| style="text-align:right"| 2.2