Project
Function
Sample CLI
gway release build-help-db
References
['_builtins', '_builtins.items', 'load_project', 'sql', 'sql.open_connection', 'warning']
Full Code
def build_help_db():
with gw.sql.open_connection(datafile="data/help.sqlite") as cursor:
cursor.execute("DROP TABLE IF EXISTS help")
cursor.execute("""
CREATE VIRTUAL TABLE help USING fts5(
project, function, signature, docstring, source, todos, tokenize='porter')
""")
for dotted_path in _walk_projects("projects"):
try:
project_obj = gw.load_project(dotted_path)
for fname in dir(project_obj):
if fname.startswith("_"):
continue
func = getattr(project_obj, fname, None)
if not callable(func):
continue
raw_func = getattr(func, "__wrapped__", func)
doc = inspect.getdoc(raw_func) or ""
sig = str(inspect.signature(raw_func))
try:
source = "".join(inspect.getsourcelines(raw_func)[0])
except OSError:
source = ""
todos = _extract_todos(source)
cursor.execute("INSERT INTO help VALUES (?, ?, ?, ?, ?, ?)",
(dotted_path, fname, sig, doc, source, "\n".join(todos)))
except Exception as e:
gw.warning(f"Skipping project {dotted_path}: {e}")
# Add builtin functions under synthetic project "builtin"
for name, func in gw._builtins.items():
raw_func = getattr(func, "__wrapped__", func)
doc = inspect.getdoc(raw_func) or ""
sig = str(inspect.signature(raw_func))
try:
source = "".join(inspect.getsourcelines(raw_func)[0])
except OSError:
source = ""
todos = _extract_todos(source)
cursor.execute("INSERT INTO help VALUES (?, ?, ?, ?, ?, ?)",
("builtin", name, sig, doc, source, "\n".join(todos)))
cursor.execute("COMMIT")