add user index

This commit is contained in:
Сергей Маринкевич
2026-06-05 17:19:12 +07:00
parent 70ee7c6b81
commit b83d4f8b9b
6 changed files with 519 additions and 19 deletions
+55 -4
View File
@@ -7,6 +7,8 @@ import re
import sqlite3
from typing import Any, Dict, Iterable, List, Optional
import mm_users
def iter_result_files(root: str) -> Iterable[str]:
for dirpath, _dirnames, filenames in os.walk(root):
@@ -102,7 +104,7 @@ def search_index(
JOIN posts_fts fts ON fts.post_id = p.post_id
WHERE fts.message MATCH ?
{where_filters}
ORDER BY p.created ASC
ORDER BY p.created DESC
"""
params = [fts_q] + params
else:
@@ -115,7 +117,7 @@ def search_index(
FROM posts p
WHERE {cmp_col} LIKE ?
{where_filters}
ORDER BY p.created ASC
ORDER BY p.created DESC
"""
params = [f"%{needle}%"] + params
@@ -218,7 +220,7 @@ def search_attachments_index(
JOIN posts p ON p.post_id = a.post_id
WHERE aft.{fts_column} MATCH ?
{where_filters}
ORDER BY p.created ASC
ORDER BY p.created DESC
"""
params = [fts_q] + params
@@ -359,7 +361,7 @@ def main(argv: Optional[List[str]] = None) -> int:
ap = argparse.ArgumentParser(
description="Search through Mattermost export JSON files produced by mattermost-dl.py.",
)
ap.add_argument("query", help="Search string or regex (see --regex).")
ap.add_argument("query", nargs="?", help="Search string or regex (see --regex).")
ap.add_argument(
"-r",
"--root",
@@ -407,9 +409,58 @@ def main(argv: Optional[List[str]] = None) -> int:
action="store_true",
help="Include source filename and per-file index in human output.",
)
user_group = ap.add_mutually_exclusive_group()
user_group.add_argument(
"--resolve-user",
metavar="REF",
help="Resolve display name / FIO / nickname to username (uses sqlite user directory).",
)
user_group.add_argument(
"--search-users",
metavar="QUERY",
help="Search users by name or username substring.",
)
ap.add_argument(
"--refresh-users",
action="store_true",
help="Refresh user directory from users.json, optional API, and post usernames.",
)
ap.add_argument(
"--from-api",
action="store_true",
help="With --refresh-users, also fetch profiles from Mattermost API (config.json).",
)
ap.add_argument(
"--config",
default=os.environ.get("MM_CONFIG_PATH", "config.json"),
help="Mattermost config path for --from-api (default: MM_CONFIG_PATH or config.json).",
)
args = ap.parse_args(argv)
if args.refresh_users:
result = mm_users.refresh_user_directory(
args.db,
args.root,
config_path=args.config,
from_api=args.from_api,
)
print(json.dumps(result, ensure_ascii=False, indent=2))
return 0
if args.resolve_user:
result = mm_users.resolve_user(args.db, args.resolve_user)
print(json.dumps(result, ensure_ascii=False, indent=2))
return 0
if args.search_users:
matches = mm_users.search_users(args.db, args.search_users, limit=args.limit or 10)
print(json.dumps(matches, ensure_ascii=False, indent=2))
return 0
if not args.query:
ap.error("query is required unless using --resolve-user, --search-users, or --refresh-users")
# Default ignore-case for non-regex search unless explicitly disabled
ignore_case = args.ignore_case or not args.regex
matcher = make_matcher(args.query, args.regex, ignore_case)