def test_save_get_function(db: FileRunDB): func, name, proj = {'x': 1, 'y': 2}, 'f1', 'p2' db.store_function(func, name, proj) db_func = db.get_function(name, proj) updated = db_func['metadata']['updated'].replace(tzinfo=timezone.utc) db_func['metadata']['updated'] = updated assert db_func == func, 'wrong func'
def test_schedules(db: FileRunDB): count = 7 for i in range(count): data = {'i': i} db.store_schedule(data) scheds = list(db.list_schedules()) assert count == len(scheds), 'wrong number of schedules' assert set(range(count)) == set(s['i'] for s in scheds), 'bad scheds'
def test_save_get_function(db: FileRunDB): func, name, proj = {'x': 1, 'y': 2}, 'f1', 'p2' db.store_function(func, name, proj) db_func = db.get_function(name, proj) # db methods enriches metadata del db_func['metadata'] del func['metadata'] assert db_func == func, 'wrong func'
def test_schedules(db: FileRunDB): count = 7 for i in range(count): data = {"i": i} db.store_schedule(data) scheds = list(db.list_schedules()) assert count == len(scheds), "wrong number of schedules" assert set(range(count)) == set(s["i"] for s in scheds), "bad scheds"
def test_save_get_function(db: FileRunDB): func, name, proj = {"x": 1, "y": 2}, "f1", "p2" db.store_function(func, name, proj) db_func = db.get_function(name, proj) # db methods enriches metadata del db_func["metadata"] del func["metadata"] assert db_func == func, "wrong func"
def test_list_artifact_date(db: FileRunDB): print('dirpath: ', db.dirpath) t1 = datetime(2020, 2, 16, tzinfo=timezone.utc) t2 = t1 - timedelta(days=7) t3 = t2 - timedelta(days=7) prj = 'p7' db.store_artifact('k1', {'updated': t1.isoformat()}, 'u1', project=prj) db.store_artifact('k2', {'updated': t2.isoformat()}, 'u2', project=prj) db.store_artifact('k3', {'updated': t3.isoformat()}, 'u3', project=prj) # FIXME: We get double what we expect since latest is an alias arts = db.list_artifacts(project=prj, since=t3, tag='*') assert 6 == len(arts), 'since t3' arts = db.list_artifacts(project=prj, since=t2, tag='*') assert 4 == len(arts), 'since t2' arts = db.list_artifacts(project=prj, since=t1 + timedelta(days=1), tag='*') assert not arts, 'since t1+' arts = db.list_artifacts(project=prj, until=t2, tag='*') assert 4 == len(arts), 'until t2' arts = db.list_artifacts(project=prj, since=t2, until=t2, tag='*') assert 2 == len(arts), 'since/until t2'
def test_list_artifact_date(db: FileRunDB): print("dirpath: ", db.dirpath) t1 = datetime(2020, 2, 16, tzinfo=timezone.utc) t2 = t1 - timedelta(days=7) t3 = t2 - timedelta(days=7) prj = "p7" db.store_artifact("k1", {"updated": t1.isoformat()}, "u1", project=prj) db.store_artifact("k2", {"updated": t2.isoformat()}, "u2", project=prj) db.store_artifact("k3", {"updated": t3.isoformat()}, "u3", project=prj) # FIXME: We get double what we expect since latest is an alias arts = db.list_artifacts(project=prj, since=t3, tag="*") assert 6 == len(arts), "since t3" arts = db.list_artifacts(project=prj, since=t2, tag="*") assert 4 == len(arts), "since t2" arts = db.list_artifacts(project=prj, since=t1 + timedelta(days=1), tag="*") assert not arts, "since t1+" arts = db.list_artifacts(project=prj, until=t2, tag="*") assert 4 == len(arts), "until t2" arts = db.list_artifacts(project=prj, since=t2, until=t2, tag="*") assert 2 == len(arts), "since/until t2"
def test_list_fuctions(db: FileRunDB): proj = 'p4' count = 5 for i in range(count): name = f'func{i}' func = {'fid': i} db.store_function(func, name, proj) db.store_function({}, 'f2', 'p7') out = db.list_functions('', proj) assert len(out) == count, 'bad list'
def test_list_fuctions(db: FileRunDB): proj = "p4" count = 5 for i in range(count): name = f"func{i}" func = {"fid": i} db.store_function(func, name, proj) db.store_function({}, "f2", "p7") out = db.list_functions("", proj) assert len(out) == count, "bad list"
def db(request): path = mkdtemp() print(f'db fixture: path={path!r}') if request.param == 'sql': db_file = f'{path}/mlrun.db' db = SQLDB(f'sqlite:///{db_file}?check_same_thread=false') elif request.param == 'file': db = FileRunDB(path) else: assert False, f'unknown db type - {request.param}' db.connect() return db
def db(request): path = mkdtemp() print(f"db fixture: path={path!r}") if request.param == "sql": db_file = f"{path}/mlrun.db" dsn = f"sqlite:///{db_file}?check_same_thread=false" session_maker = init_sqldb(dsn) db = SQLDB(dsn, session=session_maker()) elif request.param == "file": db = FileRunDB(path) else: assert False, f"unknown db type - {request.param}" db.connect() return db
def db(request): path = mkdtemp() print(f"db fixture: path={path!r}") if request.param == "sql": db_file = f"{path}/mlrun.db" dsn = f"sqlite:///{db_file}?check_same_thread=false" config.httpdb.dsn = dsn _init_engine(dsn) init_data() initialize_db() db_session = create_session() db = SQLDB(dsn, session=db_session) elif request.param == "file": db = FileRunDB(path) else: assert False, f"unknown db type - {request.param}" db.connect() if request.param == "sql": mlrun.api.utils.singletons.db.initialize_db(db.db) mlrun.api.utils.singletons.project_member.initialize_project_member() return db
def db(): path = mkdtemp(prefix='mlrun-test') db = FileRunDB(dirpath=path) db.connect() return db
def test_save_get_function(db: FileRunDB): func, name, proj = {'x': 1, 'y': 2}, 'f1', 'p2' db.store_function(func, name, proj) db_func = db.get_function(name, proj) assert db_func == func, 'wrong func'