Files
fckbot/rag/utils/arg_parser.py
Markov Andrey 63900feece Update 86 files
- /rag/commands/expert.py
- /core/services/__init__.py
- /core/services/embedding_service.py
- /core/services/file_service.py
- /core/services/giga_client.py
- /core/services/kb_service.py
- /core/services/postgres_service.py
- /core/services/qdrant_service.py
- /core/services/reranker_service.py
- /core/functions/__init__.py
- /core/functions/check_consistency.py
- /core/functions/check_spelling.py
- /core/functions/critique_answer.py
- /core/functions/expand_query.py
- /core/functions/extract_metrics.py
- /core/functions/file_processor.py
- /core/functions/generate_document.py
- /core/functions/intent_classify.py
- /core/functions/rerank_context.py
- /core/functions/summarize_document.py
- /core/utils/__init__.py
- /core/utils/arg_parser.py
- /core/utils/config_loader.py
- /core/utils/layout_converter.py
- /core/utils/logger.py
- /core/utils/text_utils.py
- /core/utils/web_utils.py
- /bots/commands/__init__.py
- /bots/commands/base.py
- /bots/commands/create.py
- /core/commands/global_remove.py
- /core/commands/help.py
- /core/commands/info.py
- /core/commands/kb.py
- /core/commands/learn.py
- /core/commands/other.py
- /core/commands/registry.py
- /core/commands/stats.py
- /core/commands/template.py
- /core/handlers/__init__.py
- /core/handlers/message_handler.py
- /core/workers/__init__.py
- /core/workers/indexing_worker.py
- /core/xmpp/__init__.py
- /core/xmpp/client.py
- /bots/commands/global_remove.py
- /bots/commands/help.py
- /bots/commands/info.py
- /bots/commands/kb.py
- /bots/commands/registry.py
- /bots/commands/other.py
- /bots/commands/template.py
- /bots/commands/learn.py
- /bots/commands/stats.py
- /bots/handlers/message_handler.py
- /bots/handlers/__init__.py
- /bots/workers/__init__.py
- /bots/workers/indexing_worker.py
- /bots/xmpp/__init__.py
- /bots/xmpp/client.py
- /rag/services/qdrant_service.py
- /rag/services/giga_client.py
- /rag/services/embedding_service.py
- /rag/services/reranker_service.py
- /rag/services/__init__.py
- /rag/services/file_service.py
- /rag/services/postgres_service.py
- /rag/services/kb_service.py
- /rag/functions/check_spelling.py
- /rag/functions/__init__.py
- /rag/functions/extract_metrics.py
- /rag/functions/generate_document.py
- /rag/functions/expand_query.py
- /rag/functions/critique_answer.py
- /rag/functions/file_processor.py
- /rag/functions/check_consistency.py
- /rag/functions/summarize_document.py
- /rag/functions/rerank_context.py
- /rag/functions/intent_classify.py
- /rag/utils/__init__.py
- /rag/utils/layout_converter.py
- /rag/utils/text_utils.py
- /rag/utils/arg_parser.py
- /rag/utils/config_loader.py
- /rag/utils/logger.py
- /rag/utils/web_utils.py
2026-06-30 10:33:28 +00:00

62 lines
2.6 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- coding: utf-8 -*-
"""
Утилита для разбора аргументов командной строки в стиле --flag value или --flag.
Используется командами бота для извлечения флагов (--global, --title и т.д.) и позиционных аргументов.
"""
import shlex
from typing import Tuple, Dict, List, Any
def parse_args(args_str: str) -> Tuple[str, Dict[str, Any], List[str]]:
"""
Разбирает строку аргументов.
Возвращает кортеж: (команда, словарь флагов, список позиционных аргументов).
Пример:
"!learn --global --title 'Мой документ' file.docx"
-> ("!learn", {"global": True, "title": "Мой документ"}, ["file.docx"])
Алгоритм:
1. Разбить строку на части, учитывая кавычки (через shlex.split).
2. Если shlex не справился (непарные кавычки), разбить по пробелам (грубо).
3. Первая часть имя команды.
4. Далее идём по частям: если часть начинается с '--', то это флаг.
- Если следующий элемент не начинается с '--', то это значение флага.
- Иначе флаг булевый (True).
5. Всё, что не начинается с '--', позиционные аргументы.
"""
if not args_str:
return "", {}, []
# Пытаемся разбить с учётом кавычек (shlex)
try:
parts = shlex.split(args_str)
except ValueError:
# fallback: просто по пробелам (может быть неточно, но работает для простых случаев)
parts = args_str.split()
if not parts:
return "", {}, []
cmd = parts[0] # первая часть имя команды
flags = {}
positionals = []
i = 1
while i < len(parts):
p = parts[i]
if p.startswith('--'):
key = p[2:] # убираем '--'
# Если следующий элемент есть и он не флаг, то это значение
if i + 1 < len(parts) and not parts[i+1].startswith('--'):
flags[key] = parts[i+1]
i += 2
else:
flags[key] = True
i += 1
else:
positionals.append(p)
i += 1
return cmd, flags, positionals