From 96718fc065b6a90c819cf7a47e8772a7944a58fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Tue, 14 Jul 2026 22:56:19 +0400 Subject: [PATCH] =?UTF-8?q?revert:=20app/=20=E2=86=92=20site/=20(drhider?= =?UTF-8?q?=20proves=20site/=20works=20fine)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 4 +-- {app => site}/app.py | 8 ++--- {app => site}/config.py | 0 {app => site}/db/__init__.py | 0 {app => site}/db/connection.py | 0 {app => site}/db/contracts.py | 0 {app => site}/db/documents.py | 0 {app => site}/db/prompts.py | 0 {app => site}/db/spec_current.py | 0 {app => site}/db/spec_events.py | 0 {app => site}/db/supplements.py | 0 {app => site}/llm_prompt.py | 0 {app => site}/repository.py | 34 +++++++++---------- {app => site}/routes/__init__.py | 12 +++---- {app => site}/routes/api_bp.py | 8 ++--- {app => site}/routes/health_bp.py | 2 +- {app => site}/routes/pages_bp.py | 0 {app => site}/routes/pipeline_bp.py | 8 ++--- {app => site}/routes/prompts_bp.py | 2 +- {app => site}/routes/upload_bp.py | 6 ++-- {app => site}/services/classify.py | 6 ++-- {app => site}/services/drhider.py | 0 {app => site}/services/grouping.py | 6 ++-- {app => site}/services/llm.py | 2 +- {app => site}/services/llm_client.py | 0 {app => site}/services/metrics.py | 0 {app => site}/services/parse.py | 0 {app => site}/services/process.py | 6 ++-- {app => site}/static/app.js | 0 {app => site}/static/app_utils.js | 0 {app => site}/static/compare.js | 0 {app => site}/static/favicon.svg | 0 {app => site}/static/files.js | 0 {app => site}/static/groups.js | 0 {app => site}/static/logo.svg | 0 {app => site}/static/state.js | 0 {app => site}/templates/architect.html | 0 .../templates/architecture-diagram.html | 0 {app => site}/templates/ci-cd.html | 0 {app => site}/templates/drhider.html | 0 {app => site}/templates/index.html | 0 {app => site}/templates/pipeline.html | 0 42 files changed, 52 insertions(+), 52 deletions(-) rename {app => site}/app.py (92%) rename {app => site}/config.py (100%) rename {app => site}/db/__init__.py (100%) rename {app => site}/db/connection.py (100%) rename {app => site}/db/contracts.py (100%) rename {app => site}/db/documents.py (100%) rename {app => site}/db/prompts.py (100%) rename {app => site}/db/spec_current.py (100%) rename {app => site}/db/spec_events.py (100%) rename {app => site}/db/supplements.py (100%) rename {app => site}/llm_prompt.py (100%) rename {app => site}/repository.py (94%) rename {app => site}/routes/__init__.py (52%) rename {app => site}/routes/api_bp.py (97%) rename {app => site}/routes/health_bp.py (88%) rename {app => site}/routes/pages_bp.py (100%) rename {app => site}/routes/pipeline_bp.py (94%) rename {app => site}/routes/prompts_bp.py (98%) rename {app => site}/routes/upload_bp.py (97%) rename {app => site}/services/classify.py (98%) rename {app => site}/services/drhider.py (100%) rename {app => site}/services/grouping.py (97%) rename {app => site}/services/llm.py (95%) rename {app => site}/services/llm_client.py (100%) rename {app => site}/services/metrics.py (100%) rename {app => site}/services/parse.py (100%) rename {app => site}/services/process.py (97%) rename {app => site}/static/app.js (100%) rename {app => site}/static/app_utils.js (100%) rename {app => site}/static/compare.js (100%) rename {app => site}/static/favicon.svg (100%) rename {app => site}/static/files.js (100%) rename {app => site}/static/groups.js (100%) rename {app => site}/static/logo.svg (100%) rename {app => site}/static/state.js (100%) rename {app => site}/templates/architect.html (100%) rename {app => site}/templates/architecture-diagram.html (100%) rename {app => site}/templates/ci-cd.html (100%) rename {app => site}/templates/drhider.html (100%) rename {app => site}/templates/index.html (100%) rename {app => site}/templates/pipeline.html (100%) diff --git a/Dockerfile b/Dockerfile index 32a4581..174e281 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,8 +6,8 @@ COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt -COPY app /app/app +COPY site /app/site EXPOSE 5000 -CMD ["gunicorn", "--bind", "0.0.0.0:5000", "--timeout", "300", "--workers", "1", "app.app:app"] +CMD ["gunicorn", "--bind", "0.0.0.0:5000", "--timeout", "300", "--workers", "1", "site.app:app"] diff --git a/app/app.py b/site/app.py similarity index 92% rename from app/app.py rename to site/app.py index 0a7e4a5..db96b02 100644 --- a/app/app.py +++ b/site/app.py @@ -2,8 +2,8 @@ Больше никаких прокси на contracts.kube5s.ru — всё локально. """ from flask import Flask -from app.config import VERSION, MAX_CONTENT_LENGTH -from app.routes import register_routes +from site.config import VERSION, MAX_CONTENT_LENGTH +from site.routes import register_routes def create_app(): @@ -31,7 +31,7 @@ def create_app(): def _init_db(): """Schema migration + recovery: сброс застрявших classify.""" try: - from app.db.connection import execute + from site.db.connection import execute for sql in [ "ALTER TABLE documents ADD COLUMN IF NOT EXISTS classify_raw text", @@ -49,7 +49,7 @@ def _init_db(): ]: execute(sql) - from app.db import prompts as db_prompts + from site.db import prompts as db_prompts db_prompts.seed_defaults() # Crash recovery: сбросить застрявшие classify diff --git a/app/config.py b/site/config.py similarity index 100% rename from app/config.py rename to site/config.py diff --git a/app/db/__init__.py b/site/db/__init__.py similarity index 100% rename from app/db/__init__.py rename to site/db/__init__.py diff --git a/app/db/connection.py b/site/db/connection.py similarity index 100% rename from app/db/connection.py rename to site/db/connection.py diff --git a/app/db/contracts.py b/site/db/contracts.py similarity index 100% rename from app/db/contracts.py rename to site/db/contracts.py diff --git a/app/db/documents.py b/site/db/documents.py similarity index 100% rename from app/db/documents.py rename to site/db/documents.py diff --git a/app/db/prompts.py b/site/db/prompts.py similarity index 100% rename from app/db/prompts.py rename to site/db/prompts.py diff --git a/app/db/spec_current.py b/site/db/spec_current.py similarity index 100% rename from app/db/spec_current.py rename to site/db/spec_current.py diff --git a/app/db/spec_events.py b/site/db/spec_events.py similarity index 100% rename from app/db/spec_events.py rename to site/db/spec_events.py diff --git a/app/db/supplements.py b/site/db/supplements.py similarity index 100% rename from app/db/supplements.py rename to site/db/supplements.py diff --git a/app/llm_prompt.py b/site/llm_prompt.py similarity index 100% rename from app/llm_prompt.py rename to site/llm_prompt.py diff --git a/app/repository.py b/site/repository.py similarity index 94% rename from app/repository.py rename to site/repository.py index 0977111..7b2ee69 100644 --- a/app/repository.py +++ b/site/repository.py @@ -95,77 +95,77 @@ class PgRepository: """Реальный доступ к PostgreSQL через существующие db/*.py.""" def insert_document(self, filename, mime_type, original_bytes, batch_id=None, zip_source=None): - from app.db import documents + from site.db import documents return documents.insert(filename, mime_type, original_bytes, batch_id=batch_id, zip_source=zip_source) def set_document_parsed(self, doc_id, elements): - from app.db import documents + from site.db import documents documents.set_parsed(doc_id, elements) # documents.set_parsed уже делает json.dumps def set_document_error(self, doc_id, error): - from app.db import documents + from site.db import documents documents.set_error(doc_id, error) def set_classification(self, doc_id, doc_type, own_number=None, parent_number=None, doc_date=None, counterparty=None, classify_raw=None, classify_input=None): - from app.db import documents + from site.db import documents documents.set_classification(doc_id, doc_type, own_number, parent_number, doc_date, counterparty, classify_raw=classify_raw, classify_input=classify_input) def set_classify_garbage(self, doc_id, reason=""): - from app.db import documents + from site.db import documents documents.set_classify_garbage(doc_id, reason) def set_classify_failed(self, doc_id, error): - from app.db import documents + from site.db import documents documents.set_classify_failed(doc_id, error) def list_pending(self, batch_id): - from app.db import documents + from site.db import documents return documents.list_pending(batch_id) def insert_contract(self, number, client=""): - from app.db import contracts + from site.db import contracts c = contracts.insert(number, client) return c["id"] if c else "" def insert_supplement(self, contract_id, doc_id, supp_type): - from app.db import supplements + from site.db import supplements supplements.insert(contract_id, doc_id, supp_type) def list_supplements(self, contract_id): - from app.db import supplements + from site.db import supplements return supplements.list_by_contract(contract_id) def get_spec_current(self, contract_id): - from app.db import spec_current + from site.db import spec_current return spec_current.list_by_contract(contract_id) def get_document(self, doc_id): - from app.db import documents + from site.db import documents return documents.get(doc_id) def list_by_batch(self, batch_id): - from app.db import documents + from site.db import documents return documents.list_by_batch(batch_id) def count_by_status(self, batch_id): - from app.db import documents + from site.db import documents return documents.count_by_status(batch_id) def reset_classify_status(self, batch_id): - from app.db import documents + from site.db import documents documents.reset_classify_status(batch_id) def set_classify_processing(self, doc_id): - from app.db import documents + from site.db import documents documents.set_classify_processing(doc_id) def delete_document(self, doc_id): - from app.db import documents + from site.db import documents documents.delete(doc_id) diff --git a/app/routes/__init__.py b/site/routes/__init__.py similarity index 52% rename from app/routes/__init__.py rename to site/routes/__init__.py index 0cc591e..98384eb 100644 --- a/app/routes/__init__.py +++ b/site/routes/__init__.py @@ -2,12 +2,12 @@ def register_routes(app): - from app.routes.upload_bp import upload_bp - from app.routes.pipeline_bp import pipeline_bp - from app.routes.api_bp import api_bp - from app.routes.prompts_bp import prompts_bp - from app.routes.health_bp import health_bp - from app.routes.pages_bp import pages_bp + from site.routes.upload_bp import upload_bp + from site.routes.pipeline_bp import pipeline_bp + from site.routes.api_bp import api_bp + from site.routes.prompts_bp import prompts_bp + from site.routes.health_bp import health_bp + from site.routes.pages_bp import pages_bp app.register_blueprint(upload_bp) app.register_blueprint(pipeline_bp) diff --git a/app/routes/api_bp.py b/site/routes/api_bp.py similarity index 97% rename from app/routes/api_bp.py rename to site/routes/api_bp.py index 340d094..ece7a8f 100644 --- a/app/routes/api_bp.py +++ b/site/routes/api_bp.py @@ -1,9 +1,9 @@ """API blueprint — groups, documents, supplements, sync, cleanup, spec-current, chat.""" from flask import Blueprint, request, jsonify -from app.db import documents, supplements, spec_current -from app.db.connection import execute, query -from app.services.grouping import group_documents, apply_groups -from app.config import API_KEY, LLM_URL, LLM_KEY, LLM_MODEL +from site.db import documents, supplements, spec_current +from site.db.connection import execute, query +from site.services.grouping import group_documents, apply_groups +from site.config import API_KEY, LLM_URL, LLM_KEY, LLM_MODEL import httpx api_bp = Blueprint("api", __name__) diff --git a/app/routes/health_bp.py b/site/routes/health_bp.py similarity index 88% rename from app/routes/health_bp.py rename to site/routes/health_bp.py index fa632bd..d6f2902 100644 --- a/app/routes/health_bp.py +++ b/site/routes/health_bp.py @@ -1,6 +1,6 @@ """Health probe — обязательно для Штурвала.""" from flask import Blueprint, jsonify -from app.config import VERSION +from site.config import VERSION health_bp = Blueprint("health", __name__) diff --git a/app/routes/pages_bp.py b/site/routes/pages_bp.py similarity index 100% rename from app/routes/pages_bp.py rename to site/routes/pages_bp.py diff --git a/app/routes/pipeline_bp.py b/site/routes/pipeline_bp.py similarity index 94% rename from app/routes/pipeline_bp.py rename to site/routes/pipeline_bp.py index d282861..68b9eca 100644 --- a/app/routes/pipeline_bp.py +++ b/site/routes/pipeline_bp.py @@ -1,10 +1,10 @@ """Pipeline blueprint — SSE-сравнение + classify.""" import json, re, os, threading from flask import Blueprint, request, jsonify, Response, stream_with_context -from app.services.process import run_pipeline -from app.services.classify import classify_batch -from app.llm_prompt import build_prompt -from app.db import documents +from site.services.process import run_pipeline +from site.services.classify import classify_batch +from site.llm_prompt import build_prompt +from site.db import documents pipeline_bp = Blueprint("pipeline", __name__) diff --git a/app/routes/prompts_bp.py b/site/routes/prompts_bp.py similarity index 98% rename from app/routes/prompts_bp.py rename to site/routes/prompts_bp.py index 12bb94d..8ba8d31 100644 --- a/app/routes/prompts_bp.py +++ b/site/routes/prompts_bp.py @@ -1,6 +1,6 @@ """Prompts blueprint — CRUD + activate для версионирования промптов.""" from flask import Blueprint, request, jsonify -from app.db import prompts as db_prompts +from site.db import prompts as db_prompts prompts_bp = Blueprint("prompts", __name__) diff --git a/app/routes/upload_bp.py b/site/routes/upload_bp.py similarity index 97% rename from app/routes/upload_bp.py rename to site/routes/upload_bp.py index c0b9237..c4f859f 100644 --- a/app/routes/upload_bp.py +++ b/site/routes/upload_bp.py @@ -1,9 +1,9 @@ """Upload blueprint — загрузка, конвертация, распаковка.""" import io, os, base64, hashlib, zipfile, tempfile, subprocess from flask import Blueprint, request, jsonify, send_file -from app.services.parse import parse_file -from app.db import documents -from app.config import MAX_CONTENT_LENGTH +from site.services.parse import parse_file +from site.db import documents +from site.config import MAX_CONTENT_LENGTH upload_bp = Blueprint("upload", __name__) diff --git a/app/services/classify.py b/site/services/classify.py similarity index 98% rename from app/services/classify.py rename to site/services/classify.py index 1a435c2..c046c40 100644 --- a/app/services/classify.py +++ b/site/services/classify.py @@ -14,8 +14,8 @@ import json, re, os from concurrent.futures import ThreadPoolExecutor, as_completed import httpx -from app.db import documents as db_docs -from app.llm_prompt import build_classify_prompt +from site.db import documents as db_docs +from site.llm_prompt import build_classify_prompt log = __import__("logging").getLogger(__name__) @@ -34,7 +34,7 @@ _classify_llm = None def _get_classify_client(): global _classify_llm if _classify_llm is None: - from app.services.llm_client import HttpxLLMClient + from site.services.llm_client import HttpxLLMClient _classify_llm = HttpxLLMClient(url=LLM_URL, key=LLM_KEY, model=LLM_MODEL, max_tokens=1000, timeout=60) return _classify_llm diff --git a/app/services/drhider.py b/site/services/drhider.py similarity index 100% rename from app/services/drhider.py rename to site/services/drhider.py diff --git a/app/services/grouping.py b/site/services/grouping.py similarity index 97% rename from app/services/grouping.py rename to site/services/grouping.py index c7fe36c..04eacf2 100644 --- a/app/services/grouping.py +++ b/site/services/grouping.py @@ -9,9 +9,9 @@ Grouping service — match classified documents into contract groups. - apply_groups(): создаёт contracts + supplements с авто-порядком по дате. """ import re -from app.db import documents as db_docs -from app.db import contracts as db_contracts -from app.db import supplements as db_supplements +from site.db import documents as db_docs +from site.db import contracts as db_contracts +from site.db import supplements as db_supplements def normalize_number(num): diff --git a/app/services/llm.py b/site/services/llm.py similarity index 95% rename from app/services/llm.py rename to site/services/llm.py index 4fc4226..504e965 100644 --- a/app/services/llm.py +++ b/site/services/llm.py @@ -12,7 +12,7 @@ _llm_client = None def _get_default_client(): global _llm_client if _llm_client is None: - from app.services.llm_client import HttpxLLMClient + from site.services.llm_client import HttpxLLMClient _llm_client = HttpxLLMClient(url=LLM_URL, key=LLM_KEY, model=LLM_MODEL) return _llm_client diff --git a/app/services/llm_client.py b/site/services/llm_client.py similarity index 100% rename from app/services/llm_client.py rename to site/services/llm_client.py diff --git a/app/services/metrics.py b/site/services/metrics.py similarity index 100% rename from app/services/metrics.py rename to site/services/metrics.py diff --git a/app/services/parse.py b/site/services/parse.py similarity index 100% rename from app/services/parse.py rename to site/services/parse.py diff --git a/app/services/process.py b/site/services/process.py similarity index 97% rename from app/services/process.py rename to site/services/process.py index 9c3ace5..6a8fd8b 100644 --- a/app/services/process.py +++ b/site/services/process.py @@ -2,8 +2,8 @@ Адаптирован из deploy/compare/process.py: callback → generator. """ import json, time -from app.db import supplements, spec_current, spec_events -from app.services.metrics import check_arithmetic +from site.db import supplements, spec_current, spec_events +from site.services.metrics import check_arithmetic def run_pipeline(contract_id, order_ids, build_prompt_fn): @@ -31,7 +31,7 @@ def run_pipeline(contract_id, order_ids, build_prompt_fn): yield {"type": "error", "message": "Нет распарсенных файлов"} return - from app.services.llm import call_llm + from site.services.llm import call_llm for s in supps: sid = s["id"] diff --git a/app/static/app.js b/site/static/app.js similarity index 100% rename from app/static/app.js rename to site/static/app.js diff --git a/app/static/app_utils.js b/site/static/app_utils.js similarity index 100% rename from app/static/app_utils.js rename to site/static/app_utils.js diff --git a/app/static/compare.js b/site/static/compare.js similarity index 100% rename from app/static/compare.js rename to site/static/compare.js diff --git a/app/static/favicon.svg b/site/static/favicon.svg similarity index 100% rename from app/static/favicon.svg rename to site/static/favicon.svg diff --git a/app/static/files.js b/site/static/files.js similarity index 100% rename from app/static/files.js rename to site/static/files.js diff --git a/app/static/groups.js b/site/static/groups.js similarity index 100% rename from app/static/groups.js rename to site/static/groups.js diff --git a/app/static/logo.svg b/site/static/logo.svg similarity index 100% rename from app/static/logo.svg rename to site/static/logo.svg diff --git a/app/static/state.js b/site/static/state.js similarity index 100% rename from app/static/state.js rename to site/static/state.js diff --git a/app/templates/architect.html b/site/templates/architect.html similarity index 100% rename from app/templates/architect.html rename to site/templates/architect.html diff --git a/app/templates/architecture-diagram.html b/site/templates/architecture-diagram.html similarity index 100% rename from app/templates/architecture-diagram.html rename to site/templates/architecture-diagram.html diff --git a/app/templates/ci-cd.html b/site/templates/ci-cd.html similarity index 100% rename from app/templates/ci-cd.html rename to site/templates/ci-cd.html diff --git a/app/templates/drhider.html b/site/templates/drhider.html similarity index 100% rename from app/templates/drhider.html rename to site/templates/drhider.html diff --git a/app/templates/index.html b/site/templates/index.html similarity index 100% rename from app/templates/index.html rename to site/templates/index.html diff --git a/app/templates/pipeline.html b/site/templates/pipeline.html similarity index 100% rename from app/templates/pipeline.html rename to site/templates/pipeline.html