refactor: services/ → compare/ + drhider/ (разделение Сверки и Хайдера)
Deploy contracts-flask / validate (push) Successful in 0s

This commit is contained in:
2026-06-30 10:08:25 +04:00
parent 5466b6df7f
commit ae64913c00
22 changed files with 40 additions and 20 deletions
+1 -1
View File
@@ -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:
+1 -1
View File
@@ -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
+6 -6
View File
@@ -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:
+1 -1
View File
@@ -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
View File
+25 -5
View File
@@ -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"
+1 -1
View File
@@ -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"
+2 -2
View File
@@ -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
+2 -2
View File
@@ -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:
+1 -1
View File
@@ -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