From c88ec8372f08f125e6b84b67031d2003671f38d0 Mon Sep 17 00:00:00 2001 From: "Jon Michael Aanes (aider)" Date: Sun, 13 Apr 2025 17:26:09 +0200 Subject: [PATCH] feat: add SQLite helper functions and corresponding tests for issues --- aider_gitea/__main__.py | 48 ++++++++++++++++++++++++++++++++++++++- test/test_issue_sqlite.py | 27 ++++++++++++++++++++++ 2 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 test/test_issue_sqlite.py diff --git a/aider_gitea/__main__.py b/aider_gitea/__main__.py index 24d7914..98343b7 100644 --- a/aider_gitea/__main__.py +++ b/aider_gitea/__main__.py @@ -120,7 +120,46 @@ class GiteaClient: ] return issues -def parse_args(): +def save_issue_to_sqlite(issue_number: str, issue_title: str, issue_description: str, db_path: Path) -> None: + """ + Save issue details to an SQLite database. + """ + import sqlite3 + + conn = sqlite3.connect(db_path) + cursor = conn.cursor() + cursor.execute(''' + CREATE TABLE IF NOT EXISTS issues ( + number TEXT PRIMARY KEY, + title TEXT, + description TEXT + ) + ''') + cursor.execute(''' + INSERT OR REPLACE INTO issues (number, title, description) + VALUES (?, ?, ?) + ''', (issue_number, issue_title, issue_description)) + conn.commit() + conn.close() + +def load_issue_from_sqlite(issue_number: str, db_path: Path) -> tuple[str, str]: + """ + Load issue details from an SQLite database. + """ + import sqlite3 + + conn = sqlite3.connect(db_path) + cursor = conn.cursor() + cursor.execute(''' + SELECT title, description FROM issues WHERE number = ? + ''', (issue_number,)) + result = cursor.fetchone() + conn.close() + + if result: + return result + else: + raise ValueError(f"Issue {issue_number} not found in the database.") parser = argparse.ArgumentParser(description="Download issues and create pull requests for a Gitea repository.") parser.add_argument("--gitea-url", required=True, help="Base URL for the Gitea instance, e.g., https://gitfub.space/api/v1") parser.add_argument("--owner", required=True, help="Owner of the repository") @@ -149,6 +188,13 @@ def run_cmd(cmd: list[str], cwd:Path|None=None) -> None: def process_issue(args, tmpdirname: Path, branch_name: str, issue_title: str, issue_description: str, issue_number: str): + db_path = Path(tmpdirname) / "issues.db" + save_issue_to_sqlite(issue_number, issue_title, issue_description, db_path) + + # Example of loading issue from SQLite + loaded_title, loaded_description = load_issue_from_sqlite(issue_number, db_path) + logger.info(f"Loaded issue {issue_number} from SQLite: {loaded_title}") + repo_url = f"{args.gitea_url}:{args.owner}/{args.repo}.git".replace('https://', 'git@') run_cmd(["git", "clone", repo_url, tmpdirname]) run_cmd(['bash', '-c', AIDER_TEST], tmpdirname) diff --git a/test/test_issue_sqlite.py b/test/test_issue_sqlite.py new file mode 100644 index 0000000..20a1f1a --- /dev/null +++ b/test/test_issue_sqlite.py @@ -0,0 +1,27 @@ +import sqlite3 +import tempfile +from pathlib import Path +from aider_gitea.__main__ import save_issue_to_sqlite, load_issue_from_sqlite + +def test_save_and_load_issue(): + issue_number = "123" + issue_title = "Test Issue" + issue_description = "This is a test issue." + + with tempfile.TemporaryDirectory() as tmpdirname: + db_path = Path(tmpdirname) / "issues.db" + + # Save issue to SQLite + save_issue_to_sqlite(issue_number, issue_title, issue_description, db_path) + + # Load issue from SQLite + loaded_title, loaded_description = load_issue_from_sqlite(issue_number, db_path) + + assert loaded_title == issue_title + assert loaded_description == issue_description + + # Test loading a non-existent issue + try: + load_issue_from_sqlite("999", db_path) + except ValueError as e: + assert str(e) == "Issue 999 not found in the database."