Пример #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