Пример #1
0
def test_auditdt_cm_diff(active_run, dolt_audit1, doltdb):
    doltdb = Dolt(doltdb)
    logs = list(doltdb.log(2).keys())

    with DoltDT(run=active_run, audit=dolt_audit1) as dolt:
        df = dolt.sql("SELECT * FROM `bar`", as_key="akey")
        diff = dolt.diff(from_commit=logs[1], to_commit=logs[0], table="bar")
Пример #2
0
def test_reset(doltdb):
    db = Dolt(doltdb)
    db.reset()
    db.reset(hard=True)
    db.reset(soft=True)
    db.reset(tables="t1")
    db.reset(tables=["t1"])
Пример #3
0
def dolt_audit1(doltdb):
    db = Dolt(doltdb)
    lg = db.log()
    commit = lg.popitem(last=False)[0]
    yield {
        "actions": {
            "bar": {
                "key": "bar",
                "config_id": "dd9f1f38-6802-4657-b869-602dde993180",
                "pathspec": "VersioningDemo/1611853111934656/start/1",
                "table_name": "bar",
                "kind": "read",
                "query": "SELECT * FROM `bar`",
                "commit": commit,
                "artifact_name": None,
                "timestamp": 1611853112.794624,
            }
        },
        "configs": {
            "dd9f1f38-6802-4657-b869-602dde993180": {
                "id": "dd9f1f38-6802-4657-b869-602dde993180",
                "database": doltdb,
                "branch": "master",
                "commit": commit,
                "dolthub_remote": False,
                "push_on_commit": False,
            }
        },
    }
Пример #4
0
def test_reset_errors(doltdb):
    db = Dolt(doltdb)
    with pytest.raises(ValueError):
        db.reset(hard=True, soft=True)
    with pytest.raises(ValueError):
        db.reset(tables="t1", hard=True)
    with pytest.raises(ValueError):
        db.reset(tables="t1", soft=True)
    with pytest.raises(ValueError):
        db.reset(tables={"t1": True})
Пример #5
0
def test_dolt_sql_errors(doltdb):
    db = Dolt(doltdb)

    with pytest.raises(ValueError):
        db.sql(result_parser=lambda x: x, query=None)
    with pytest.raises(ValueError):
        db.sql(result_parser=2, query="select active_branch()")
    with pytest.raises(ValueError):
        db.sql(result_file="file.csv", query=None)
    with pytest.raises(ValueError):
        db.sql(result_format="csv", query=None)
Пример #6
0
def test_detached_head_cm(doltdb):
    db = Dolt(doltdb)
    commits = list(db.log().keys())

    with detach_head(db, commits[1]):
        sum1 = db.sql("select sum(a) as sum from t1", result_format="csv")[0]

    with detach_head(db, commits[0]):
        sum2 = db.sql("select sum(a) as sum from t1", result_format="csv")[0]

    assert sum1["sum"] == "3"
    assert sum2["sum"] == "6"
Пример #7
0
def test_branchdt_diff(inactive_run, dolt_config, doltdb):
    doltdb = Dolt(doltdb)
    logs = list(doltdb.log(2).keys())

    dolt = DoltDT(config=dolt_config)
    diff = dolt.diff(from_commit=logs[1], to_commit=logs[0], table="bar")

    row = diff["bar"].iloc[0]
    assert row.from_A == 1
    assert row.from_B == 1
    assert row.to_A == 2
    assert row.to_B == 2
Пример #8
0
def test_custom_query_branch(active_run, dolt_config, doltdb):
    doltdb = Dolt(doltdb)
    logs = list(doltdb.log(2).keys())
    dolt_config.commit = logs[1]

    with DoltDT(run=active_run, config=dolt_config) as dolt:
        df = dolt.sql("SELECT * FROM `bar` LIMIT 2", as_key="akey")
    np.testing.assert_array_equal(df.A.values, [1, 1])
    audit = active_run.dolt
    assert "akey" in audit["actions"]
    assert audit["actions"]["akey"]["kind"] == "read"
    assert audit["actions"]["akey"]["query"] == "SELECT * FROM `bar` LIMIT 2"
Пример #9
0
def test_set_dolt_path_error(doltdb):
    db = Dolt(doltdb)
    set_dolt_path("dolt")
    test_cmd = "show tables"
    db.sql(test_cmd, result_format="csv")
    try:
        with pytest.raises(FileNotFoundError):
            set_dolt_path("notdolt")
            from doltcli.utils import DOLT_PATH

            assert DOLT_PATH == "notdolt"
            db.sql(test_cmd, result_format="csv")
    finally:
        set_dolt_path("dolt")
Пример #10
0
def test_branchdt_cm_write(active_run, dolt_config, doltdb):
    input_df = pd.DataFrame({"A": [2, 2, 2], "B": [2, 2, 2]})
    with DoltDT(run=active_run, config=dolt_config) as dolt:
        dolt.write(df=input_df, table_name="baz")

    db = Dolt(doltdb)
    output_df = read_pandas_sql(db, "SELECT * from `baz`")
    np.testing.assert_array_equal(output_df.A.values, [2, 2, 2])

    audit = active_run.dolt
    print(audit["actions"]["baz"])
    assert "baz" in audit["actions"]
    assert audit["actions"]["baz"]["kind"] == "write"
    assert audit["actions"]["baz"]["query"] == "SELECT * FROM `baz`"
Пример #11
0
    def _get_db(self, config: DoltConfig):
        if config.id in self._dbcache:
            return self._dbcache[config.id]

        # TODO: clone remote
        try:
            Dolt.init(repo_dir=config.database)
        except DoltException as e:
            pass

        if ".dolt" not in os.listdir(config.database):
            raise ValueError(
                f"Passed a path {config.database} that is not a Dolt database directory"
            )

        doltdb = Dolt(repo_dir=config.database)
        current_branch, branches = doltdb.branch()

        logger.info(
            f"Dolt database in {config.database} at branch {current_branch.name}, using branch {config.branch}"
        )
        if config.branch == current_branch.name:
            pass
        elif config.branch not in [branch.name for branch in branches]:
            raise ValueError(f"Passed branch '{config.branch}' that does not exist")
        else:
            doltdb.checkout(config.branch, checkout_branch=False)

        if not doltdb.status().is_clean:
            raise Exception(
                "DoltDT as context manager requires clean working set for transaction semantics"
            )

        if not config.commit:
            config.commit = self._get_latest_commit_hash(doltdb)

        self._dbcache[config.id] = doltdb
        return doltdb
Пример #12
0
def test_working(doltdb):
    db = Dolt(doltdb)
    assert db.head != db.working
Пример #13
0
def test_bad_repo_path(tmp_path):
    bad_repo_path = tmp_path
    with pytest.raises(ValueError):
        Dolt(bad_repo_path)
Пример #14
0
def test_clone_new_dir(tmp_path):
    target = os.path.join(tmp_path, "state_age")
    Dolt.clone("max-hoffman/state-age", new_dir=target)
    db = Dolt(target)
    assert db.head is not None
Пример #15
0
def test_checkout_non_existent_branch(doltdb):
    repo = Dolt(doltdb)
    repo.checkout("main")