From 9024268cae42fbc33db2b1929db473c9789c568b Mon Sep 17 00:00:00 2001 From: Justus Kuhlmann Date: Sun, 30 Mar 2025 17:40:01 +0000 Subject: [PATCH] enableupdateing of aliases --- corrlib/main.py | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/corrlib/main.py b/corrlib/main.py index e65fed4..4aa190d 100644 --- a/corrlib/main.py +++ b/corrlib/main.py @@ -4,6 +4,8 @@ import datalad.config as dlc import os from .git_tools import move_submodule import shutil +from .find import _project_lookup_by_id +from .tools import list2str, str2list def create_project(path, uuid, aliases=None, code=None): @@ -28,12 +30,23 @@ def create_project(path, uuid, aliases=None, code=None): raise ValueError("Project already imported, use update_project() instead.") dl.unlock(path + "/backlogger.db", dataset=path) - c.execute("INSERT INTO projects (id, aliases, code, created_at, updated_at) VALUES (?, ?, ?, datetime('now'), datetime('now'))", (uuid, aliases, code)) + if aliases is not None: + alias_str = list2str(aliases) + c.execute("INSERT INTO projects (id, aliases, code, created_at, updated_at) VALUES (?, ?, ?, datetime('now'), datetime('now'))", (uuid, alias_str, code)) conn.commit() conn.close() dl.save(path + "/backlogger.db", message="Added entry for project " + uuid + " to database", dataset=path) +def update_project_data(db, uuid, prop, value = None): + conn = sqlite3.connect(db) + c = conn.cursor() + c.execute(f"UPDATE projects SET '{prop}' = '{value}' WHERE id == '{uuid}'") + conn.commit() + conn.close() + return + + def import_project(path, url, aliases=None, code=None, isDataset=True): """ Parameters @@ -62,9 +75,9 @@ def import_project(path, url, aliases=None, code=None, isDataset=True): """ tmp_path = path + '/projects/tmp' if not isDataset: - dl.create(path + '/projects/tmp', dataset=path) + dl.create(tmp_path, dataset=path) shutil.copytree(url + "/*", path + '/projects/tmp/') - dl.save(path + '/projects/tmp', dataset=path) + dl.save(tmp_path, dataset=path) else: dl.install(path=tmp_path, source=url, dataset=path) tmp_ds = dl.Dataset(tmp_path) @@ -77,8 +90,23 @@ def import_project(path, url, aliases=None, code=None, isDataset=True): create_project(path, uuid, aliases, code) move_submodule(path, 'projects/tmp', 'projects/' + uuid) os.mkdir(path + '/import_scripts/' + uuid) - dl.save([path + "/backlogger.db", 'projects/' + uuid], message="Import project from " + url, dataset=path) + dl.save([path + "/backlogger.db", path + '/projects/' + uuid], message="Import project from " + url, dataset=path) else: - print("Project is already imported.") + known_data = _project_lookup_by_id(uuid)[0] + known_aliases = known_data[1] + if known_aliases is None: + print(f"Project {uuid} is already imported, no known aliases.") + else: + print(f"Project {uuid} is already imported, known by names: {known_aliases}") + + if aliases is not None: + known_alias_list = str2list(known_aliases) + new_alias_list = known_alias_list + for aka in aliases: + if aka not in known_aliases: + new_alias_list.append(aka) + if not len(new_alias_list) == len(known_alias_list): + alias_str = list2str(new_alias_list) + update_project_data(path, uuid, "aliases", alias_str) # make this more concrete return uuid