From ae64913c00c1c03290cb158eb8cb060922aaef86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Tue, 30 Jun 2026 10:08:25 +0400 Subject: [PATCH] =?UTF-8?q?refactor:=20services/=20=E2=86=92=20compare/=20?= =?UTF-8?q?+=20drhider/=20(=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=A1=D0=B2=D0=B5=D1=80=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B8=20=D0=A5=D0=B0=D0=B9=D0=B4=D0=B5=D1=80=D0=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/classify_worker.py | 2 +- deploy/{services => compare}/__init__.py | 0 deploy/{services => compare}/classify.py | 0 deploy/{services => compare}/grouping.py | 0 deploy/{services => compare}/llm.py | 0 deploy/{services => compare}/llm_client.py | 0 deploy/{services => compare}/metrics.py | 0 deploy/{services => compare}/parse.py | 0 deploy/{services => compare}/process.py | 0 deploy/{services => compare}/unzip.py | 0 deploy/{services => compare}/upload.py | 0 deploy/conftest.py | 2 +- deploy/convert_server.py | 12 ++++---- deploy/db/spec_events.py | 2 +- deploy/drhider/__init__.py | 0 deploy/{services => drhider}/drhider.py | 0 .../{services => drhider}/drhider_server.py | 0 deploy/sync.sh | 30 +++++++++++++++---- deploy/tests/test_drhider.py | 2 +- deploy/tests/unit/test_classify_batch.py | 4 +-- deploy/tests/unit/test_contracts.py | 4 +-- deploy/tests/unit/test_llm_repo.py | 2 +- 22 files changed, 40 insertions(+), 20 deletions(-) rename deploy/{services => compare}/__init__.py (100%) rename deploy/{services => compare}/classify.py (100%) rename deploy/{services => compare}/grouping.py (100%) rename deploy/{services => compare}/llm.py (100%) rename deploy/{services => compare}/llm_client.py (100%) rename deploy/{services => compare}/metrics.py (100%) rename deploy/{services => compare}/parse.py (100%) rename deploy/{services => compare}/process.py (100%) rename deploy/{services => compare}/unzip.py (100%) rename deploy/{services => compare}/upload.py (100%) create mode 100644 deploy/drhider/__init__.py rename deploy/{services => drhider}/drhider.py (100%) rename deploy/{services => drhider}/drhider_server.py (100%) diff --git a/deploy/classify_worker.py b/deploy/classify_worker.py index d239177..9b030bd 100644 --- a/deploy/classify_worker.py +++ b/deploy/classify_worker.py @@ -17,7 +17,7 @@ subprocess.Popen создаёт отдельный питон-процесс с import sys, os sys.path.insert(0, os.path.dirname(__file__)) -from services.classify import classify_batch +from compare.classify import classify_batch if __name__ == "__main__": if len(sys.argv) < 2: diff --git a/deploy/services/__init__.py b/deploy/compare/__init__.py similarity index 100% rename from deploy/services/__init__.py rename to deploy/compare/__init__.py diff --git a/deploy/services/classify.py b/deploy/compare/classify.py similarity index 100% rename from deploy/services/classify.py rename to deploy/compare/classify.py diff --git a/deploy/services/grouping.py b/deploy/compare/grouping.py similarity index 100% rename from deploy/services/grouping.py rename to deploy/compare/grouping.py diff --git a/deploy/services/llm.py b/deploy/compare/llm.py similarity index 100% rename from deploy/services/llm.py rename to deploy/compare/llm.py diff --git a/deploy/services/llm_client.py b/deploy/compare/llm_client.py similarity index 100% rename from deploy/services/llm_client.py rename to deploy/compare/llm_client.py diff --git a/deploy/services/metrics.py b/deploy/compare/metrics.py similarity index 100% rename from deploy/services/metrics.py rename to deploy/compare/metrics.py diff --git a/deploy/services/parse.py b/deploy/compare/parse.py similarity index 100% rename from deploy/services/parse.py rename to deploy/compare/parse.py diff --git a/deploy/services/process.py b/deploy/compare/process.py similarity index 100% rename from deploy/services/process.py rename to deploy/compare/process.py diff --git a/deploy/services/unzip.py b/deploy/compare/unzip.py similarity index 100% rename from deploy/services/unzip.py rename to deploy/compare/unzip.py diff --git a/deploy/services/upload.py b/deploy/compare/upload.py similarity index 100% rename from deploy/services/upload.py rename to deploy/compare/upload.py diff --git a/deploy/conftest.py b/deploy/conftest.py index f30065f..584951c 100644 --- a/deploy/conftest.py +++ b/deploy/conftest.py @@ -6,7 +6,7 @@ import os # Ensure deploy/ is on path for imports sys.path.insert(0, os.path.dirname(__file__)) -from services.llm_client import FakeLLMClient +from compare.llm_client import FakeLLMClient from repository import MemRepository diff --git a/deploy/convert_server.py b/deploy/convert_server.py index 3f8fb23..bff4c37 100755 --- a/deploy/convert_server.py +++ b/deploy/convert_server.py @@ -46,9 +46,9 @@ except Exception as _db_err: # ── Services ────────────────────────────────────────────────────────────── if DB_OK: - from services.upload import handle_upload - from services.unzip import handle_unzip - from services.process import run_pipeline + from compare.upload import handle_upload + from compare.unzip import handle_unzip + from compare.process import run_pipeline from llm_prompt import build_prompt else: handle_upload = handle_unzip = run_pipeline = None @@ -247,7 +247,7 @@ class Handler(BaseHTTPRequestHandler): if not batch_id: self._json({"ok": False, "error": "batch required"}, 400) return - from services.grouping import group_documents + from compare.grouping import group_documents result = group_documents(batch_id) self._json(result) @@ -325,7 +325,7 @@ class Handler(BaseHTTPRequestHandler): if not batch_id: self._json({"ok": False, "error": "batch_id required"}, 400) return - from services.grouping import apply_groups + from compare.grouping import apply_groups result = apply_groups(batch_id, groups) self._json(result) @@ -509,7 +509,7 @@ class Handler(BaseHTTPRequestHandler): # ── /llm-ops (debug) ────────────────────────────────────────────────── def _handle_llm_ops(self): - from services.llm import call_llm + from compare.llm import call_llm length = int(self.headers.get("Content-Length", 0)) body = json.loads(self.rfile.read(length)) try: diff --git a/deploy/db/spec_events.py b/deploy/db/spec_events.py index 758d58f..2eb10eb 100644 --- a/deploy/db/spec_events.py +++ b/deploy/db/spec_events.py @@ -156,7 +156,7 @@ def _hash(name, date_start=None): import hashlib key = name.strip().lower() if date_start: - from services.metrics import normalize_date + from compare.metrics import normalize_date nd = normalize_date(str(date_start)) if nd: key += "|" + nd diff --git a/deploy/drhider/__init__.py b/deploy/drhider/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/deploy/services/drhider.py b/deploy/drhider/drhider.py similarity index 100% rename from deploy/services/drhider.py rename to deploy/drhider/drhider.py diff --git a/deploy/services/drhider_server.py b/deploy/drhider/drhider_server.py similarity index 100% rename from deploy/services/drhider_server.py rename to deploy/drhider/drhider_server.py diff --git a/deploy/sync.sh b/deploy/sync.sh index e8ad0a9..56740ae 100755 --- a/deploy/sync.sh +++ b/deploy/sync.sh @@ -1,21 +1,41 @@ #!/bin/bash # Деплой прокси-слоя на ВМ (5.172.178.213) -# Запускать из папки contractor/ +# Запускать из папки contracts-flask/ VM="naeel@5.172.178.213" SSH_KEY="$HOME/.ssh/naeel_vm_id_ed25519" SSH="ssh -i $SSH_KEY" SCP="scp -i $SSH_KEY" +DST="/home/naeel/contracts" + +echo "=== Копирую compare/ ===" +$SSH $VM "mkdir -p $DST/compare" +$SCP deploy/compare/*.py $VM:$DST/compare/ + +echo "=== Копирую drhider/ ===" +$SSH $VM "mkdir -p $DST/drhider" +$SCP deploy/drhider/*.py $VM:$DST/drhider/ echo "=== Копирую конвертер .doc ===" -$SCP deploy/convert_server.py $VM:/home/naeel/contracts/convert_server.py -$SCP deploy/convert_doc.py $VM:/home/naeel/contracts/convert_doc.py +$SCP deploy/convert_server.py $VM:$DST/convert_server.py +$SCP deploy/convert_doc.py $VM:$DST/convert_doc.py -echo "=== Перезапуск конвертера ===" -$SSH $VM 'pkill -f convert_server.py; sleep 1; nohup python3 /home/naeel/contracts/convert_server.py &>/dev/null &' +echo "=== Копирую db/ ===" +$SSH $VM "mkdir -p $DST/db" +$SCP deploy/db/*.py $VM:$DST/db/ + +echo "=== Перезапуск convert_server (systemd) ===" +$SSH $VM 'sudo systemctl restart contracts' + +echo "=== Перезапуск drhider_server (systemd) ===" +$SSH $VM 'sudo systemctl restart contracts-drhider' + +echo "=== Статус сервисов ===" +$SSH $VM 'systemctl is-active contracts contracts-drhider' echo "=== Проверка nginx конфига ===" $SSH $VM 'sudo nginx -t 2>&1' echo "=== Готово ===" echo "Проверка: curl https://contracts.kube5s.ru/convert-doc" +echo "Проверка: curl https://contracts.kube5s.ru/api/drhider" diff --git a/deploy/tests/test_drhider.py b/deploy/tests/test_drhider.py index 06a0a27..ae76ada 100644 --- a/deploy/tests/test_drhider.py +++ b/deploy/tests/test_drhider.py @@ -5,7 +5,7 @@ """ import sys, os, io, zipfile, json, base64 sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) -from services.drhider import obfuscate_files, TwoPassObfuscator, COMPANY_PATTERN, PERSON_PATTERN +from drhider.drhider import obfuscate_files, TwoPassObfuscator, COMPANY_PATTERN, PERSON_PATTERN TEST_ZIP = "/home/naeel/nubes/contracts/dogovora/примеры_договоров_для_ИИ.zip" diff --git a/deploy/tests/unit/test_classify_batch.py b/deploy/tests/unit/test_classify_batch.py index f710c58..cf10607 100644 --- a/deploy/tests/unit/test_classify_batch.py +++ b/deploy/tests/unit/test_classify_batch.py @@ -1,6 +1,6 @@ """Test classify_batch with MemRepository + FakeLLM.""" -from services.classify import classify_batch -from services.llm_client import FakeLLMClient +from compare.classify import classify_batch +from compare.llm_client import FakeLLMClient from repository import MemRepository diff --git a/deploy/tests/unit/test_contracts.py b/deploy/tests/unit/test_contracts.py index 0b6a753..200ab53 100644 --- a/deploy/tests/unit/test_contracts.py +++ b/deploy/tests/unit/test_contracts.py @@ -1,8 +1,8 @@ """Unit tests — no DB, no network, just pure logic.""" import pytest from contracts import ParseResult, ClassifyResult, GroupingResult, CompareOp -from services.upload import parse_multipart -from services.classify import _is_garbage_by_filename, _is_garbage_by_header +from compare.upload import parse_multipart +from compare.classify import _is_garbage_by_filename, _is_garbage_by_header class TestContracts: diff --git a/deploy/tests/unit/test_llm_repo.py b/deploy/tests/unit/test_llm_repo.py index bdaa281..28657c1 100644 --- a/deploy/tests/unit/test_llm_repo.py +++ b/deploy/tests/unit/test_llm_repo.py @@ -1,5 +1,5 @@ """Unit tests for LLM client and Repository — with fakes.""" -from services.llm_client import FakeLLMClient +from compare.llm_client import FakeLLMClient from repository import MemRepository