Download app/tests/_util.py from OpenTARS/openTARS: direct link, hf CLI and curl.
- Browser
- Download file 3.72 kB
-
https://huggingface.co/OpenTARS/openTARS/resolve/main/app/tests/_util.py
- Command line
-
hf download hf://OpenTARS/openTARS/app/tests/_util.py
-
curl -L -o _util.py https://huggingface.co/OpenTARS/openTARS/resolve/main/app/tests/_util.py
3.72 kB
| """Utilitário compartilhado pelos testes: carrega tars.py isolado, sem | |
| precisar dos pacotes de sistema (pyautogui, psutil) instalados — eles | |
| são só usados pra controlar mouse/teclado e ler CPU/RAM, nada disso é | |
| necessário pra testar a lógica (seleção de modelo, detecção de tarefa, | |
| resolução de app/site, etc). | |
| Uso, em qualquer test_*.py desta pasta: | |
| from _util import carregar_tars | |
| tars = carregar_tars() | |
| """ | |
| import importlib.util | |
| import os | |
| import sys | |
| import tempfile | |
| import types | |
| RAIZ = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) | |
| CAMINHO_TARS = os.path.join(RAIZ, "tars.py") | |
| # Os módulos irmãos (tars_i18n, tars_acessibilidade...) são importados pelo | |
| # tars.py; os testes rodam de dentro de tests/. | |
| if RAIZ not in sys.path: | |
| sys.path.insert(0, RAIZ) | |
| # Testes previsíveis: textos em português (a menos que o teste peça outro | |
| # idioma) e nada gravado na configuração real do usuário. | |
| os.environ.setdefault("TARS_IDIOMA", "pt_BR") | |
| os.environ.setdefault("TARS_SEM_AVISO_VERSAO", "1") | |
| os.environ.setdefault("TARS_ARQUIVO_AUTOTESTE", os.path.join(tempfile.mkdtemp(prefix="opentars-auto-"), "autoteste.txt")) # testes não vão à internet ver se há versão nova | |
| os.environ.setdefault("TARS_ARQUIVO_CONFIG", os.path.join(tempfile.mkdtemp(prefix="opentars-teste-"), "config.json")) | |
| os.environ.setdefault("TARS_SEM_ATALHO", "1") | |
| # 26/10: a pesquisa vem ligada por padrão; os testes não falam com o SearXNG real do PC (ele pode estar rodando) | |
| if not os.path.exists(os.environ["TARS_ARQUIVO_CONFIG"]): | |
| open(os.environ["TARS_ARQUIVO_CONFIG"], "w").write('{"web": {"ligada": false}}') | |
| os.environ.setdefault("TARS_SEM_MODELINHOS", "1") # os modelinhos de foto (~300 MB) não se baixam nos testes | |
| # 5.1: a escolha do Gargantua Lite depende da máquina; os testes fixam o completo (o do Lite pede o dele) | |
| os.environ.setdefault("TARS_GARGANTUA", "completo") | |
| # 18/10: o registro das ferramentas também: sem isto, os testes escreviam "open_application app82..." no ~/.tars_log de verdade | |
| os.environ.setdefault("TARS_DIR_LOG", tempfile.mkdtemp(prefix="opentars-log-")) | |
| # Histórico de modelos, embeddings em cache...: nada no ~/.cache de verdade. | |
| os.environ.setdefault("XDG_CACHE_HOME", tempfile.mkdtemp(prefix="opentars-cache-")) | |
| # 16/10: nenhum teste fala com o Ollama de verdade (dois já carregavam e descarregavam modelos do Enzo). Por padrão o | |
| # endereço é uma porta sem ninguém; quem precisa sobe o fake_ollama e põe o próprio OLLAMA_HOST antes de carregar o tars. | |
| # TARS_TESTE_OLLAMA_REAL=1 libera (para medir com modelo de verdade, de propósito). | |
| if os.environ.get("TARS_TESTE_OLLAMA_REAL") != "1" and (not os.environ.get("OLLAMA_HOST") | |
| or os.environ["OLLAMA_HOST"].rstrip("/").endswith(":11434")): | |
| os.environ["OLLAMA_HOST"] = "http://127.0.0.1:9" | |
| def carregar_tars(): | |
| if "pyautogui" not in sys.modules: | |
| sys.modules["pyautogui"] = types.ModuleType("pyautogui") | |
| if "psutil" not in sys.modules: | |
| stub = types.ModuleType("psutil") | |
| stub.process_iter = lambda *a, **k: [] | |
| sys.modules["psutil"] = stub | |
| spec = importlib.util.spec_from_file_location("tars", CAMINHO_TARS) | |
| modulo = importlib.util.module_from_spec(spec) | |
| sys.modules["tars"] = modulo # como num "import tars" de verdade (sys.modules[__name__] funciona) | |
| spec.loader.exec_module(modulo) | |
| # 4.5: os testes simulam uma área de trabalho (um teste do modo sem interface liga SEM_INTERFACE de volta) | |
| if not os.environ.get("TARS_TESTE_SEM_INTERFACE"): | |
| modulo.SEM_INTERFACE = False | |
| modulo.AMBIENTE.update(sem_interface=False, tela=True) | |
| return modulo | |