diff --git a/backend-lehrer/abitur_docs_api.py b/backend-lehrer/abitur_docs_api.py deleted file mode 100644 index 4189b81..0000000 --- a/backend-lehrer/abitur_docs_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to abitur/api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("abitur.api") diff --git a/backend-lehrer/abitur_docs_models.py b/backend-lehrer/abitur_docs_models.py deleted file mode 100644 index 798f629..0000000 --- a/backend-lehrer/abitur_docs_models.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to abitur/models.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("abitur.models") diff --git a/backend-lehrer/abitur_docs_recognition.py b/backend-lehrer/abitur_docs_recognition.py deleted file mode 100644 index 7492ee7..0000000 --- a/backend-lehrer/abitur_docs_recognition.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to abitur/recognition.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("abitur.recognition") diff --git a/backend-lehrer/ai_processing/analysis.py b/backend-lehrer/ai_processing/analysis.py index 8aa1cac..06bd62d 100644 --- a/backend-lehrer/ai_processing/analysis.py +++ b/backend-lehrer/ai_processing/analysis.py @@ -158,7 +158,7 @@ def _analyze_with_openai(input_path: Path) -> Path: def _analyze_with_claude(input_path: Path) -> Path: """Strukturierte JSON-Analyse mit Claude Vision API.""" - from claude_vision import analyze_worksheet_with_claude + from services.claude_vision import analyze_worksheet_with_claude if not input_path.exists(): raise FileNotFoundError(f"Eingabedatei nicht gefunden: {input_path}") diff --git a/backend-lehrer/ai_processor.py b/backend-lehrer/ai_processor.py deleted file mode 100644 index a222b64..0000000 --- a/backend-lehrer/ai_processor.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to services/ai_processor.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("services.ai_processor") diff --git a/backend-lehrer/ai_processor/__init__.py b/backend-lehrer/ai_processor/__init__.py index b8f8378..9fd24bd 100644 --- a/backend-lehrer/ai_processor/__init__.py +++ b/backend-lehrer/ai_processor/__init__.py @@ -8,7 +8,7 @@ A modular AI-powered worksheet processing system for: - Mindmap visualization Usage: - from ai_processor import analyze_scan_structure_with_ai, generate_mc_from_analysis + from services.ai_processor import analyze_scan_structure_with_ai, generate_mc_from_analysis """ # Configuration diff --git a/backend-lehrer/ai_processor/vision/scan_analyzer.py b/backend-lehrer/ai_processor/vision/scan_analyzer.py index b20babc..c9d0949 100644 --- a/backend-lehrer/ai_processor/vision/scan_analyzer.py +++ b/backend-lehrer/ai_processor/vision/scan_analyzer.py @@ -157,7 +157,7 @@ def _analyze_with_claude(input_path: Path) -> Path: Uses Claude 3.5 Sonnet for better OCR and layout detection. """ - from claude_vision import analyze_worksheet_with_claude + from services.claude_vision import analyze_worksheet_with_claude if not input_path.exists(): raise FileNotFoundError(f"Eingabedatei nicht gefunden: {input_path}") diff --git a/backend-lehrer/audio_service.py b/backend-lehrer/audio_service.py deleted file mode 100644 index 310c9ac..0000000 --- a/backend-lehrer/audio_service.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to services/audio.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("services.audio") diff --git a/backend-lehrer/certificates_api.py b/backend-lehrer/certificates_api.py deleted file mode 100644 index 4aec5c9..0000000 --- a/backend-lehrer/certificates_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to letters/certificates_api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("letters.certificates_api") diff --git a/backend-lehrer/certificates_models.py b/backend-lehrer/certificates_models.py deleted file mode 100644 index 0cc5be4..0000000 --- a/backend-lehrer/certificates_models.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to letters/certificates_models.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("letters.certificates_models") diff --git a/backend-lehrer/claude_vision.py b/backend-lehrer/claude_vision.py deleted file mode 100644 index cb900a6..0000000 --- a/backend-lehrer/claude_vision.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to services/claude_vision.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("services.claude_vision") diff --git a/backend-lehrer/correction_api.py b/backend-lehrer/correction_api.py deleted file mode 100644 index c35f66b..0000000 --- a/backend-lehrer/correction_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to correction/api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("correction.api") diff --git a/backend-lehrer/correction_endpoints.py b/backend-lehrer/correction_endpoints.py deleted file mode 100644 index 2e878fe..0000000 --- a/backend-lehrer/correction_endpoints.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to correction/endpoints.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("correction.endpoints") diff --git a/backend-lehrer/correction_helpers.py b/backend-lehrer/correction_helpers.py deleted file mode 100644 index ef007ef..0000000 --- a/backend-lehrer/correction_helpers.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to correction/helpers.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("correction.helpers") diff --git a/backend-lehrer/correction_models.py b/backend-lehrer/correction_models.py deleted file mode 100644 index 56b2caa..0000000 --- a/backend-lehrer/correction_models.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to correction/models.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("correction.models") diff --git a/backend-lehrer/email_service.py b/backend-lehrer/email_service.py deleted file mode 100644 index 1228f28..0000000 --- a/backend-lehrer/email_service.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to services/email.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("services.email") diff --git a/backend-lehrer/game/api.py b/backend-lehrer/game/api.py index f336a47..1eebc6f 100644 --- a/backend-lehrer/game/api.py +++ b/backend-lehrer/game/api.py @@ -7,7 +7,7 @@ # - game_extended_routes.py (Phase 5: achievements, progress, parent, class) # # The `router` object is assembled here by including all sub-routers. -# Importers that did `from game_api import router` continue to work. +# Importers that did `from game.api import router` continue to work. from fastapi import APIRouter diff --git a/backend-lehrer/game_api.py b/backend-lehrer/game_api.py deleted file mode 100644 index e16f085..0000000 --- a/backend-lehrer/game_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to game/api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("game.api") diff --git a/backend-lehrer/game_extended_routes.py b/backend-lehrer/game_extended_routes.py deleted file mode 100644 index e747581..0000000 --- a/backend-lehrer/game_extended_routes.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to game/extended_routes.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("game.extended_routes") diff --git a/backend-lehrer/game_models.py b/backend-lehrer/game_models.py deleted file mode 100644 index 84f963b..0000000 --- a/backend-lehrer/game_models.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to game/game_models.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("game.game_models") diff --git a/backend-lehrer/game_routes.py b/backend-lehrer/game_routes.py deleted file mode 100644 index e87cc43..0000000 --- a/backend-lehrer/game_routes.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to game/routes.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("game.routes") diff --git a/backend-lehrer/game_session_routes.py b/backend-lehrer/game_session_routes.py deleted file mode 100644 index 8878e53..0000000 --- a/backend-lehrer/game_session_routes.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to game/session_routes.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("game.session_routes") diff --git a/backend-lehrer/klausur_service_proxy.py b/backend-lehrer/klausur_service_proxy.py deleted file mode 100644 index 90d81cb..0000000 --- a/backend-lehrer/klausur_service_proxy.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to api/klausur_proxy.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("api.klausur_proxy") diff --git a/backend-lehrer/learning_units.py b/backend-lehrer/learning_units.py deleted file mode 100644 index 88d494b..0000000 --- a/backend-lehrer/learning_units.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to units/learning.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("units.learning") diff --git a/backend-lehrer/learning_units_api.py b/backend-lehrer/learning_units_api.py deleted file mode 100644 index 6cd9070..0000000 --- a/backend-lehrer/learning_units_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to units/learning_api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("units.learning_api") diff --git a/backend-lehrer/letters_api.py b/backend-lehrer/letters_api.py deleted file mode 100644 index 8e654a4..0000000 --- a/backend-lehrer/letters_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to letters/api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("letters.api") diff --git a/backend-lehrer/letters_models.py b/backend-lehrer/letters_models.py deleted file mode 100644 index c3df8dc..0000000 --- a/backend-lehrer/letters_models.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to letters/models.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("letters.models") diff --git a/backend-lehrer/main.py b/backend-lehrer/main.py index 1133a68..2d18c5c 100644 --- a/backend-lehrer/main.py +++ b/backend-lehrer/main.py @@ -50,7 +50,7 @@ async def lifespan(app: FastAPI): logger.info("Backend-Lehrer starting up (DB search_path=lehrer,core,public)") # Initialize vocabulary tables try: - from vocabulary_db import init_vocabulary_tables + from vocabulary.db import init_vocabulary_tables await init_vocabulary_tables() except Exception as e: logger.warning(f"Vocabulary tables init failed (non-critical): {e}") @@ -97,70 +97,70 @@ from classroom_api import router as classroom_router app.include_router(classroom_router, prefix="/api/classroom") # --- 2. State Engine (Begleiter-Modus mit Phasen und Antizipation) --- -from state_engine_api import router as state_engine_router +from classroom.state_engine_api import router as state_engine_router app.include_router(state_engine_router, prefix="/api") # --- 3. Worksheets & Corrections --- -from worksheets_api import router as worksheets_router +from worksheets.api import router as worksheets_router app.include_router(worksheets_router, prefix="/api") -from correction_api import router as correction_router +from correction.api import router as correction_router app.include_router(correction_router, prefix="/api") # --- 4. Learning Units --- -from learning_units_api import router as learning_units_router +from units.learning_api import router as learning_units_router app.include_router(learning_units_router, prefix="/api") # --- 4b. Learning Progress --- -from progress_api import router as progress_router +from api.progress import router as progress_router app.include_router(progress_router, prefix="/api") # --- 4c. Vocabulary Catalog --- -from vocabulary_api import router as vocabulary_router +from vocabulary.api import router as vocabulary_router app.include_router(vocabulary_router, prefix="/api") # --- 4d. User Language Preferences --- -from user_language_api import router as user_language_router +from api.user_language import router as user_language_router app.include_router(user_language_router, prefix="/api") -from unit_api import router as unit_router +from units.api import router as unit_router app.include_router(unit_router) # Already has /api/units prefix -from unit_analytics_api import router as unit_analytics_router +from units.analytics_api import router as unit_analytics_router app.include_router(unit_analytics_router) # Already has /api/analytics prefix -from recording_api import router as recording_api_router +from recording.api import router as recording_api_router app.include_router(recording_api_router) # Already has /api/recordings prefix # --- 6. Messenger --- -from messenger_api import router as messenger_router +from messenger.api import router as messenger_router app.include_router(messenger_router) # Already has /api/messenger prefix # --- 7. Klausur & School Proxies --- -from klausur_service_proxy import router as klausur_service_router +from api.klausur_proxy import router as klausur_service_router app.include_router(klausur_service_router, prefix="/api") -from school_api import router as school_api_router +from api.school import router as school_api_router app.include_router(school_api_router, prefix="/api") # --- 8. Teacher Dashboard & Abitur Docs --- -from abitur_docs_api import router as abitur_docs_router +from abitur.api import router as abitur_docs_router app.include_router(abitur_docs_router, prefix="/api") -from teacher_dashboard_api import router as teacher_dashboard_router +from dashboard.api import router as teacher_dashboard_router app.include_router(teacher_dashboard_router) # Already has /api/teacher prefix # --- 9. Certificates & Letters --- -from certificates_api import router as certificates_router +from letters.certificates_api import router as certificates_router app.include_router(certificates_router, prefix="/api") -from letters_api import router as letters_router +from letters.api import router as letters_router app.include_router(letters_router, prefix="/api") # --- 10. Game System --- -from game_api import router as game_router +from game.api import router as game_router app.include_router(game_router) # Already has /api/game prefix # --- 11. AI Processor (OCR + Content generation) --- diff --git a/backend-lehrer/messenger_api.py b/backend-lehrer/messenger_api.py deleted file mode 100644 index 0c530f0..0000000 --- a/backend-lehrer/messenger_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to messenger/api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("messenger.api") diff --git a/backend-lehrer/messenger_contacts.py b/backend-lehrer/messenger_contacts.py deleted file mode 100644 index b81dba4..0000000 --- a/backend-lehrer/messenger_contacts.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to messenger/contacts.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("messenger.contacts") diff --git a/backend-lehrer/messenger_conversations.py b/backend-lehrer/messenger_conversations.py deleted file mode 100644 index 440213c..0000000 --- a/backend-lehrer/messenger_conversations.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to messenger/conversations.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("messenger.conversations") diff --git a/backend-lehrer/messenger_helpers.py b/backend-lehrer/messenger_helpers.py deleted file mode 100644 index 0a0ef56..0000000 --- a/backend-lehrer/messenger_helpers.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to messenger/helpers.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("messenger.helpers") diff --git a/backend-lehrer/messenger_models.py b/backend-lehrer/messenger_models.py deleted file mode 100644 index bcf8291..0000000 --- a/backend-lehrer/messenger_models.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to messenger/models.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("messenger.models") diff --git a/backend-lehrer/progress_api.py b/backend-lehrer/progress_api.py deleted file mode 100644 index 4b5a5d1..0000000 --- a/backend-lehrer/progress_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to api/progress.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("api.progress") diff --git a/backend-lehrer/recording_api.py b/backend-lehrer/recording_api.py deleted file mode 100644 index ded9c45..0000000 --- a/backend-lehrer/recording_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to recording/api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("recording.api") diff --git a/backend-lehrer/recording_helpers.py b/backend-lehrer/recording_helpers.py deleted file mode 100644 index 45b6b9d..0000000 --- a/backend-lehrer/recording_helpers.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to recording/helpers.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("recording.helpers") diff --git a/backend-lehrer/recording_minutes.py b/backend-lehrer/recording_minutes.py deleted file mode 100644 index 00a16e3..0000000 --- a/backend-lehrer/recording_minutes.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to recording/minutes.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("recording.minutes") diff --git a/backend-lehrer/recording_models.py b/backend-lehrer/recording_models.py deleted file mode 100644 index a6cebf5..0000000 --- a/backend-lehrer/recording_models.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to recording/models.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("recording.models") diff --git a/backend-lehrer/recording_routes.py b/backend-lehrer/recording_routes.py deleted file mode 100644 index c37212e..0000000 --- a/backend-lehrer/recording_routes.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to recording/routes.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("recording.routes") diff --git a/backend-lehrer/recording_transcription.py b/backend-lehrer/recording_transcription.py deleted file mode 100644 index 6bc9308..0000000 --- a/backend-lehrer/recording_transcription.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to recording/transcription.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("recording.transcription") diff --git a/backend-lehrer/school_api.py b/backend-lehrer/school_api.py deleted file mode 100644 index 89c1426..0000000 --- a/backend-lehrer/school_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to api/school.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("api.school") diff --git a/backend-lehrer/services/ai_processor.py b/backend-lehrer/services/ai_processor.py index ba893a4..fffdad6 100644 --- a/backend-lehrer/services/ai_processor.py +++ b/backend-lehrer/services/ai_processor.py @@ -5,14 +5,14 @@ This file provides backward compatibility for code that imports from ai_processo All functionality has been moved to the ai_processor/ module. Usage (new): - from ai_processor import analyze_scan_structure_with_ai + from services.ai_processor import analyze_scan_structure_with_ai Usage (legacy, still works): - from ai_processor import analyze_scan_structure_with_ai + from services.ai_processor import analyze_scan_structure_with_ai """ # Re-export everything from the new modular structure -from ai_processor import ( +from services.ai_processor import ( # Configuration BASE_DIR, EINGANG_DIR, @@ -46,7 +46,7 @@ from ai_processor import ( ) # Legacy function alias -from ai_processor import get_openai_api_key as _get_api_key +from services.ai_processor import get_openai_api_key as _get_api_key __all__ = [ # Configuration diff --git a/backend-lehrer/services/translation.py b/backend-lehrer/services/translation.py index a10836c..cec12f4 100644 --- a/backend-lehrer/services/translation.py +++ b/backend-lehrer/services/translation.py @@ -113,7 +113,7 @@ async def translate_and_store( Returns count of newly translated words. """ - from vocabulary_db import get_pool + from vocabulary.db import get_pool pool = await get_pool() async with pool.acquire() as conn: diff --git a/backend-lehrer/state_engine_api.py b/backend-lehrer/state_engine_api.py deleted file mode 100644 index 8ab678b..0000000 --- a/backend-lehrer/state_engine_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to classroom/state_engine_api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("classroom.state_engine_api") diff --git a/backend-lehrer/state_engine_models.py b/backend-lehrer/state_engine_models.py deleted file mode 100644 index 6d395a2..0000000 --- a/backend-lehrer/state_engine_models.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to classroom/state_engine_models.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("classroom.state_engine_models") diff --git a/backend-lehrer/story_generator.py b/backend-lehrer/story_generator.py deleted file mode 100644 index f0e5d10..0000000 --- a/backend-lehrer/story_generator.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to services/story_generator.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("services.story_generator") diff --git a/backend-lehrer/teacher_dashboard_analytics.py b/backend-lehrer/teacher_dashboard_analytics.py deleted file mode 100644 index 8e8a44e..0000000 --- a/backend-lehrer/teacher_dashboard_analytics.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to dashboard/analytics.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("dashboard.analytics") diff --git a/backend-lehrer/teacher_dashboard_api.py b/backend-lehrer/teacher_dashboard_api.py deleted file mode 100644 index ce1d6ba..0000000 --- a/backend-lehrer/teacher_dashboard_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to dashboard/api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("dashboard.api") diff --git a/backend-lehrer/teacher_dashboard_models.py b/backend-lehrer/teacher_dashboard_models.py deleted file mode 100644 index 3029317..0000000 --- a/backend-lehrer/teacher_dashboard_models.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to dashboard/models.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("dashboard.models") diff --git a/backend-lehrer/translation_service.py b/backend-lehrer/translation_service.py deleted file mode 100644 index a34073c..0000000 --- a/backend-lehrer/translation_service.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to services/translation.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("services.translation") diff --git a/backend-lehrer/unit_analytics_api.py b/backend-lehrer/unit_analytics_api.py deleted file mode 100644 index 6fbff25..0000000 --- a/backend-lehrer/unit_analytics_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to units/analytics_api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("units.analytics_api") diff --git a/backend-lehrer/unit_analytics_export.py b/backend-lehrer/unit_analytics_export.py deleted file mode 100644 index 44fea2a..0000000 --- a/backend-lehrer/unit_analytics_export.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to units/analytics_export.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("units.analytics_export") diff --git a/backend-lehrer/unit_analytics_helpers.py b/backend-lehrer/unit_analytics_helpers.py deleted file mode 100644 index 0fc2392..0000000 --- a/backend-lehrer/unit_analytics_helpers.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to units/analytics_helpers.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("units.analytics_helpers") diff --git a/backend-lehrer/unit_analytics_models.py b/backend-lehrer/unit_analytics_models.py deleted file mode 100644 index 53ef622..0000000 --- a/backend-lehrer/unit_analytics_models.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to units/analytics_models.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("units.analytics_models") diff --git a/backend-lehrer/unit_analytics_routes.py b/backend-lehrer/unit_analytics_routes.py deleted file mode 100644 index 97e001b..0000000 --- a/backend-lehrer/unit_analytics_routes.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to units/analytics_routes.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("units.analytics_routes") diff --git a/backend-lehrer/unit_api.py b/backend-lehrer/unit_api.py deleted file mode 100644 index 2052435..0000000 --- a/backend-lehrer/unit_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to units/api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("units.api") diff --git a/backend-lehrer/unit_content_routes.py b/backend-lehrer/unit_content_routes.py deleted file mode 100644 index 70a2efa..0000000 --- a/backend-lehrer/unit_content_routes.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to units/content_routes.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("units.content_routes") diff --git a/backend-lehrer/unit_definition_routes.py b/backend-lehrer/unit_definition_routes.py deleted file mode 100644 index e1ae0b7..0000000 --- a/backend-lehrer/unit_definition_routes.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to units/definition_routes.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("units.definition_routes") diff --git a/backend-lehrer/unit_helpers.py b/backend-lehrer/unit_helpers.py deleted file mode 100644 index 9cdddc8..0000000 --- a/backend-lehrer/unit_helpers.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to units/helpers.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("units.helpers") diff --git a/backend-lehrer/unit_models.py b/backend-lehrer/unit_models.py deleted file mode 100644 index b6c4c8c..0000000 --- a/backend-lehrer/unit_models.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to units/models.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("units.models") diff --git a/backend-lehrer/unit_routes.py b/backend-lehrer/unit_routes.py deleted file mode 100644 index d8f0257..0000000 --- a/backend-lehrer/unit_routes.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to units/routes.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("units.routes") diff --git a/backend-lehrer/units/api.py b/backend-lehrer/units/api.py index 3b2f63a..2587fe6 100644 --- a/backend-lehrer/units/api.py +++ b/backend-lehrer/units/api.py @@ -8,7 +8,7 @@ # - unit_content_routes.py (H5P, worksheet, PDF routes) # # The `router` object is assembled here by including all sub-routers. -# Importers that did `from unit_api import router` continue to work. +# Importers that did `from units.api import router` continue to work. from fastapi import APIRouter diff --git a/backend-lehrer/user_language_api.py b/backend-lehrer/user_language_api.py deleted file mode 100644 index 91cdcce..0000000 --- a/backend-lehrer/user_language_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to api/user_language.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("api.user_language") diff --git a/backend-lehrer/vocabulary/api.py b/backend-lehrer/vocabulary/api.py index 703f054..eb93f93 100644 --- a/backend-lehrer/vocabulary/api.py +++ b/backend-lehrer/vocabulary/api.py @@ -121,7 +121,7 @@ async def api_get_word_audio(word_id: str, lang: str = "en"): if not text: raise HTTPException(status_code=400, detail=f"Kein Text fuer Sprache '{lang}'") - from audio_service import get_or_generate_audio + from services.audio import get_or_generate_audio audio_bytes = await get_or_generate_audio(text, language=lang, word_id=word_id) if not audio_bytes: @@ -151,7 +151,7 @@ async def api_get_syllable_audio(word_id: str, lang: str = "en"): # Join syllables with pauses (Piper handles "..." as pause) slow_text = " ... ".join(syllables) - from audio_service import get_or_generate_audio + from services.audio import get_or_generate_audio cache_key = f"{word_id}_syl_{lang}" audio_bytes = await get_or_generate_audio(slow_text, language=lang, word_id=cache_key) diff --git a/backend-lehrer/vocabulary_api.py b/backend-lehrer/vocabulary_api.py deleted file mode 100644 index 7965f61..0000000 --- a/backend-lehrer/vocabulary_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to vocabulary/api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("vocabulary.api") diff --git a/backend-lehrer/vocabulary_db.py b/backend-lehrer/vocabulary_db.py deleted file mode 100644 index 7e6172f..0000000 --- a/backend-lehrer/vocabulary_db.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to vocabulary/db.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("vocabulary.db") diff --git a/backend-lehrer/worksheets_api.py b/backend-lehrer/worksheets_api.py deleted file mode 100644 index a13de4e..0000000 --- a/backend-lehrer/worksheets_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to worksheets/api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("worksheets.api") diff --git a/backend-lehrer/worksheets_models.py b/backend-lehrer/worksheets_models.py deleted file mode 100644 index 00ed0b8..0000000 --- a/backend-lehrer/worksheets_models.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to worksheets/models.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("worksheets.models") diff --git a/klausur-service/backend/admin/nibis.py b/klausur-service/backend/admin/nibis.py index a7e04d3..dfcf3f0 100644 --- a/klausur-service/backend/admin/nibis.py +++ b/klausur-service/backend/admin/nibis.py @@ -17,7 +17,7 @@ from nibis_ingestion import ( DOCS_BASE_PATH, ) from qdrant_service import QdrantService, search_nibis_eh, get_qdrant_client -from eh_pipeline import generate_single_embedding +from korrektur.eh_pipeline import generate_single_embedding router = APIRouter(prefix="/api/v1/admin", tags=["Admin"]) diff --git a/klausur-service/backend/admin/templates.py b/klausur-service/backend/admin/templates.py index 77f0e11..0ef390a 100644 --- a/klausur-service/backend/admin/templates.py +++ b/klausur-service/backend/admin/templates.py @@ -11,7 +11,7 @@ from pydantic import BaseModel from typing import Optional, List, Dict from datetime import datetime -from eh_pipeline import generate_single_embedding +from korrektur.eh_pipeline import generate_single_embedding # Import legal templates modules try: diff --git a/klausur-service/backend/admin_api.py b/klausur-service/backend/admin_api.py deleted file mode 100644 index 142b3b9..0000000 --- a/klausur-service/backend/admin_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to admin/api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("admin.api") diff --git a/klausur-service/backend/admin_nibis.py b/klausur-service/backend/admin_nibis.py deleted file mode 100644 index a05fa8a..0000000 --- a/klausur-service/backend/admin_nibis.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to admin/nibis.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("admin.nibis") diff --git a/klausur-service/backend/admin_rag.py b/klausur-service/backend/admin_rag.py deleted file mode 100644 index 6e18a27..0000000 --- a/klausur-service/backend/admin_rag.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to admin/rag.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("admin.rag") diff --git a/klausur-service/backend/admin_templates.py b/klausur-service/backend/admin_templates.py deleted file mode 100644 index 5489fd0..0000000 --- a/klausur-service/backend/admin_templates.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to admin/templates.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("admin.templates") diff --git a/klausur-service/backend/compliance_extraction.py b/klausur-service/backend/compliance_extraction.py deleted file mode 100644 index f831223..0000000 --- a/klausur-service/backend/compliance_extraction.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to compliance/extraction.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("compliance.extraction") diff --git a/klausur-service/backend/compliance_models.py b/klausur-service/backend/compliance_models.py deleted file mode 100644 index 19f8d91..0000000 --- a/klausur-service/backend/compliance_models.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to compliance/models.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("compliance.models") diff --git a/klausur-service/backend/compliance_pipeline.py b/klausur-service/backend/compliance_pipeline.py deleted file mode 100644 index 13820e2..0000000 --- a/klausur-service/backend/compliance_pipeline.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to compliance/pipeline.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("compliance.pipeline") diff --git a/klausur-service/backend/crop_api.py b/klausur-service/backend/crop_api.py deleted file mode 100644 index 97971a7..0000000 --- a/klausur-service/backend/crop_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/crop_api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.crop_api") diff --git a/klausur-service/backend/cv_box_detect.py b/klausur-service/backend/cv_box_detect.py deleted file mode 100644 index e4d5c86..0000000 --- a/klausur-service/backend/cv_box_detect.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/detect\/box_detect.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.detect.box_detect") diff --git a/klausur-service/backend/cv_box_layout.py b/klausur-service/backend/cv_box_layout.py deleted file mode 100644 index 8cc7e13..0000000 --- a/klausur-service/backend/cv_box_layout.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/detect\/box_layout.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.detect.box_layout") diff --git a/klausur-service/backend/cv_cell_grid.py b/klausur-service/backend/cv_cell_grid.py deleted file mode 100644 index f82d614..0000000 --- a/klausur-service/backend/cv_cell_grid.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/cell_grid\/cell_grid.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.cell_grid.cell_grid") diff --git a/klausur-service/backend/cv_cell_grid_build.py b/klausur-service/backend/cv_cell_grid_build.py deleted file mode 100644 index 29fe6b5..0000000 --- a/klausur-service/backend/cv_cell_grid_build.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/cell_grid\/build.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.cell_grid.build") diff --git a/klausur-service/backend/cv_cell_grid_helpers.py b/klausur-service/backend/cv_cell_grid_helpers.py deleted file mode 100644 index 5cdcf18..0000000 --- a/klausur-service/backend/cv_cell_grid_helpers.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/cell_grid\/helpers.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.cell_grid.helpers") diff --git a/klausur-service/backend/cv_cell_grid_legacy.py b/klausur-service/backend/cv_cell_grid_legacy.py deleted file mode 100644 index 17e1436..0000000 --- a/klausur-service/backend/cv_cell_grid_legacy.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/cell_grid\/legacy.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.cell_grid.legacy") diff --git a/klausur-service/backend/cv_cell_grid_merge.py b/klausur-service/backend/cv_cell_grid_merge.py deleted file mode 100644 index 5bc616a..0000000 --- a/klausur-service/backend/cv_cell_grid_merge.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/cell_grid\/merge.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.cell_grid.merge") diff --git a/klausur-service/backend/cv_cell_grid_streaming.py b/klausur-service/backend/cv_cell_grid_streaming.py deleted file mode 100644 index 799bbbc..0000000 --- a/klausur-service/backend/cv_cell_grid_streaming.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/cell_grid\/streaming.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.cell_grid.streaming") diff --git a/klausur-service/backend/cv_cell_grid_vocab.py b/klausur-service/backend/cv_cell_grid_vocab.py deleted file mode 100644 index f8c091f..0000000 --- a/klausur-service/backend/cv_cell_grid_vocab.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/cell_grid\/vocab.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.cell_grid.vocab") diff --git a/klausur-service/backend/cv_color_detect.py b/klausur-service/backend/cv_color_detect.py deleted file mode 100644 index 1f757b2..0000000 --- a/klausur-service/backend/cv_color_detect.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/detect\/color_detect.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.detect.color_detect") diff --git a/klausur-service/backend/cv_doclayout_detect.py b/klausur-service/backend/cv_doclayout_detect.py deleted file mode 100644 index be9447a..0000000 --- a/klausur-service/backend/cv_doclayout_detect.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/detect\/doclayout_detect.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.detect.doclayout_detect") diff --git a/klausur-service/backend/cv_graphic_detect.py b/klausur-service/backend/cv_graphic_detect.py deleted file mode 100644 index 987e7a0..0000000 --- a/klausur-service/backend/cv_graphic_detect.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/detect\/graphic_detect.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.detect.graphic_detect") diff --git a/klausur-service/backend/cv_gutter_repair.py b/klausur-service/backend/cv_gutter_repair.py deleted file mode 100644 index 05eb58f..0000000 --- a/klausur-service/backend/cv_gutter_repair.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/gutter\/repair.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.gutter.repair") diff --git a/klausur-service/backend/cv_gutter_repair_core.py b/klausur-service/backend/cv_gutter_repair_core.py deleted file mode 100644 index e83ec63..0000000 --- a/klausur-service/backend/cv_gutter_repair_core.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/gutter\/core.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.gutter.core") diff --git a/klausur-service/backend/cv_gutter_repair_grid.py b/klausur-service/backend/cv_gutter_repair_grid.py deleted file mode 100644 index 0b91eef..0000000 --- a/klausur-service/backend/cv_gutter_repair_grid.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/gutter\/grid.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.gutter.grid") diff --git a/klausur-service/backend/cv_ipa_german.py b/klausur-service/backend/cv_ipa_german.py deleted file mode 100644 index 4f5664c..0000000 --- a/klausur-service/backend/cv_ipa_german.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/ipa_german.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.ipa_german") diff --git a/klausur-service/backend/cv_layout.py b/klausur-service/backend/cv_layout.py deleted file mode 100644 index 082cf52..0000000 --- a/klausur-service/backend/cv_layout.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/layout\/layout.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.layout.layout") diff --git a/klausur-service/backend/cv_layout_analyze.py b/klausur-service/backend/cv_layout_analyze.py deleted file mode 100644 index ef0a16b..0000000 --- a/klausur-service/backend/cv_layout_analyze.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/layout\/analyze.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.layout.analyze") diff --git a/klausur-service/backend/cv_layout_classify.py b/klausur-service/backend/cv_layout_classify.py deleted file mode 100644 index 4b07f54..0000000 --- a/klausur-service/backend/cv_layout_classify.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/layout\/classify.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.layout.classify") diff --git a/klausur-service/backend/cv_layout_classify_position.py b/klausur-service/backend/cv_layout_classify_position.py deleted file mode 100644 index 90a1f64..0000000 --- a/klausur-service/backend/cv_layout_classify_position.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/layout\/classify_position.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.layout.classify_position") diff --git a/klausur-service/backend/cv_layout_column_refine.py b/klausur-service/backend/cv_layout_column_refine.py deleted file mode 100644 index d3abdea..0000000 --- a/klausur-service/backend/cv_layout_column_refine.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/layout\/column_refine.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.layout.column_refine") diff --git a/klausur-service/backend/cv_layout_columns.py b/klausur-service/backend/cv_layout_columns.py deleted file mode 100644 index 7b1c070..0000000 --- a/klausur-service/backend/cv_layout_columns.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/layout\/columns.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.layout.columns") diff --git a/klausur-service/backend/cv_layout_detection.py b/klausur-service/backend/cv_layout_detection.py deleted file mode 100644 index 9bbadde..0000000 --- a/klausur-service/backend/cv_layout_detection.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/layout\/detection.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.layout.detection") diff --git a/klausur-service/backend/cv_layout_row_regularize.py b/klausur-service/backend/cv_layout_row_regularize.py deleted file mode 100644 index 8d5553c..0000000 --- a/klausur-service/backend/cv_layout_row_regularize.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/layout\/row_regularize.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.layout.row_regularize") diff --git a/klausur-service/backend/cv_layout_rows.py b/klausur-service/backend/cv_layout_rows.py deleted file mode 100644 index 37c3b83..0000000 --- a/klausur-service/backend/cv_layout_rows.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/layout\/rows.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.layout.rows") diff --git a/klausur-service/backend/cv_layout_scoring.py b/klausur-service/backend/cv_layout_scoring.py deleted file mode 100644 index 6c9450a..0000000 --- a/klausur-service/backend/cv_layout_scoring.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/layout\/scoring.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.layout.scoring") diff --git a/klausur-service/backend/cv_ocr_cell_filter.py b/klausur-service/backend/cv_ocr_cell_filter.py deleted file mode 100644 index 8b77d49..0000000 --- a/klausur-service/backend/cv_ocr_cell_filter.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/engines\/cell_filter.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.engines.cell_filter") diff --git a/klausur-service/backend/cv_ocr_cell_phonetics.py b/klausur-service/backend/cv_ocr_cell_phonetics.py deleted file mode 100644 index cd6d5fe..0000000 --- a/klausur-service/backend/cv_ocr_cell_phonetics.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/engines\/cell_phonetics.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.engines.cell_phonetics") diff --git a/klausur-service/backend/cv_ocr_engines.py b/klausur-service/backend/cv_ocr_engines.py deleted file mode 100644 index d272c58..0000000 --- a/klausur-service/backend/cv_ocr_engines.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/engines\/engines.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.engines.engines") diff --git a/klausur-service/backend/cv_ocr_ipa_lookup.py b/klausur-service/backend/cv_ocr_ipa_lookup.py deleted file mode 100644 index 29c2729..0000000 --- a/klausur-service/backend/cv_ocr_ipa_lookup.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/engines\/ipa_lookup.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.engines.ipa_lookup") diff --git a/klausur-service/backend/cv_ocr_ipa_repair.py b/klausur-service/backend/cv_ocr_ipa_repair.py deleted file mode 100644 index d973356..0000000 --- a/klausur-service/backend/cv_ocr_ipa_repair.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/engines\/ipa_repair.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.engines.ipa_repair") diff --git a/klausur-service/backend/cv_ocr_vocab_postprocess.py b/klausur-service/backend/cv_ocr_vocab_postprocess.py deleted file mode 100644 index 6103a1f..0000000 --- a/klausur-service/backend/cv_ocr_vocab_postprocess.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/engines\/vocab_postprocess.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.engines.vocab_postprocess") diff --git a/klausur-service/backend/cv_ocr_word_assembly.py b/klausur-service/backend/cv_ocr_word_assembly.py deleted file mode 100644 index 3dde57b..0000000 --- a/klausur-service/backend/cv_ocr_word_assembly.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/engines\/word_assembly.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.engines.word_assembly") diff --git a/klausur-service/backend/cv_preprocessing.py b/klausur-service/backend/cv_preprocessing.py deleted file mode 100644 index 220af51..0000000 --- a/klausur-service/backend/cv_preprocessing.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/preprocessing\/preprocessing.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.preprocessing.preprocessing") diff --git a/klausur-service/backend/cv_preprocessing_deskew.py b/klausur-service/backend/cv_preprocessing_deskew.py deleted file mode 100644 index 3ab60db..0000000 --- a/klausur-service/backend/cv_preprocessing_deskew.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/preprocessing\/deskew.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.preprocessing.deskew") diff --git a/klausur-service/backend/cv_preprocessing_dewarp.py b/klausur-service/backend/cv_preprocessing_dewarp.py deleted file mode 100644 index 8291bcd..0000000 --- a/klausur-service/backend/cv_preprocessing_dewarp.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/preprocessing\/dewarp.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.preprocessing.dewarp") diff --git a/klausur-service/backend/cv_review.py b/klausur-service/backend/cv_review.py deleted file mode 100644 index 5d89f5b..0000000 --- a/klausur-service/backend/cv_review.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/review\/review.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.review.review") diff --git a/klausur-service/backend/cv_review_llm.py b/klausur-service/backend/cv_review_llm.py deleted file mode 100644 index 07e2768..0000000 --- a/klausur-service/backend/cv_review_llm.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/review\/llm.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.review.llm") diff --git a/klausur-service/backend/cv_review_pipeline.py b/klausur-service/backend/cv_review_pipeline.py deleted file mode 100644 index 027d6fa..0000000 --- a/klausur-service/backend/cv_review_pipeline.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/review\/pipeline.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.review.pipeline") diff --git a/klausur-service/backend/cv_review_spell.py b/klausur-service/backend/cv_review_spell.py deleted file mode 100644 index 525dbb7..0000000 --- a/klausur-service/backend/cv_review_spell.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/review\/spell.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.review.spell") diff --git a/klausur-service/backend/cv_syllable_core.py b/klausur-service/backend/cv_syllable_core.py deleted file mode 100644 index 8588b20..0000000 --- a/klausur-service/backend/cv_syllable_core.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/detect\/syllable\/core.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.detect.syllable.core") diff --git a/klausur-service/backend/cv_syllable_detect.py b/klausur-service/backend/cv_syllable_detect.py deleted file mode 100644 index ef088b7..0000000 --- a/klausur-service/backend/cv_syllable_detect.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/detect\/syllable\/detect.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.detect.syllable.detect") diff --git a/klausur-service/backend/cv_syllable_merge.py b/klausur-service/backend/cv_syllable_merge.py deleted file mode 100644 index 4ce25ea..0000000 --- a/klausur-service/backend/cv_syllable_merge.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/detect\/syllable\/merge.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.detect.syllable.merge") diff --git a/klausur-service/backend/cv_vocab_pipeline.py b/klausur-service/backend/cv_vocab_pipeline.py deleted file mode 100644 index 7875825..0000000 --- a/klausur-service/backend/cv_vocab_pipeline.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/cv_pipeline.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.cv_pipeline") diff --git a/klausur-service/backend/cv_vocab_types.py b/klausur-service/backend/cv_vocab_types.py deleted file mode 100644 index 60f7231..0000000 --- a/klausur-service/backend/cv_vocab_types.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/types.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.types") diff --git a/klausur-service/backend/cv_words_first.py b/klausur-service/backend/cv_words_first.py deleted file mode 100644 index 3488924..0000000 --- a/klausur-service/backend/cv_words_first.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/words_first.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.words_first") diff --git a/klausur-service/backend/eh_pipeline.py b/klausur-service/backend/eh_pipeline.py deleted file mode 100644 index 374b9f5..0000000 --- a/klausur-service/backend/eh_pipeline.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to korrektur/eh_pipeline.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("korrektur.eh_pipeline") diff --git a/klausur-service/backend/eh_templates.py b/klausur-service/backend/eh_templates.py deleted file mode 100644 index e4645c2..0000000 --- a/klausur-service/backend/eh_templates.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to korrektur/eh_templates.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("korrektur.eh_templates") diff --git a/klausur-service/backend/eh_templates_analyse.py b/klausur-service/backend/eh_templates_analyse.py deleted file mode 100644 index 2e1e4db..0000000 --- a/klausur-service/backend/eh_templates_analyse.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to korrektur/eh_templates_analyse.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("korrektur.eh_templates_analyse") diff --git a/klausur-service/backend/eh_templates_eroerterung.py b/klausur-service/backend/eh_templates_eroerterung.py deleted file mode 100644 index 0ae4a43..0000000 --- a/klausur-service/backend/eh_templates_eroerterung.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to korrektur/eh_templates_eroerterung.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("korrektur.eh_templates_eroerterung") diff --git a/klausur-service/backend/eh_templates_registry.py b/klausur-service/backend/eh_templates_registry.py deleted file mode 100644 index 8f083f4..0000000 --- a/klausur-service/backend/eh_templates_registry.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to korrektur/eh_templates_registry.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("korrektur.eh_templates_registry") diff --git a/klausur-service/backend/eh_templates_types.py b/klausur-service/backend/eh_templates_types.py deleted file mode 100644 index 1b93696..0000000 --- a/klausur-service/backend/eh_templates_types.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to korrektur/eh_templates_types.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("korrektur.eh_templates_types") diff --git a/klausur-service/backend/full_compliance_pipeline.py b/klausur-service/backend/full_compliance_pipeline.py deleted file mode 100644 index 487b3c9..0000000 --- a/klausur-service/backend/full_compliance_pipeline.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to compliance/full_pipeline.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("compliance.full_pipeline") diff --git a/klausur-service/backend/github_crawler.py b/klausur-service/backend/github_crawler.py deleted file mode 100644 index 359f340..0000000 --- a/klausur-service/backend/github_crawler.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to crawler/github.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("crawler.github") diff --git a/klausur-service/backend/github_crawler_core.py b/klausur-service/backend/github_crawler_core.py deleted file mode 100644 index fb231b2..0000000 --- a/klausur-service/backend/github_crawler_core.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to crawler/github_core.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("crawler.github_core") diff --git a/klausur-service/backend/github_crawler_parsers.py b/klausur-service/backend/github_crawler_parsers.py deleted file mode 100644 index 972b99f..0000000 --- a/klausur-service/backend/github_crawler_parsers.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to crawler/github_parsers.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("crawler.github_parsers") diff --git a/klausur-service/backend/grid_build_cell_ops.py b/klausur-service/backend/grid_build_cell_ops.py deleted file mode 100644 index 0d2c74d..0000000 --- a/klausur-service/backend/grid_build_cell_ops.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to grid/build/cell_ops.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("grid.build.cell_ops") diff --git a/klausur-service/backend/grid_build_cleanup.py b/klausur-service/backend/grid_build_cleanup.py deleted file mode 100644 index b1d25a1..0000000 --- a/klausur-service/backend/grid_build_cleanup.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to grid/build/cleanup.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("grid.build.cleanup") diff --git a/klausur-service/backend/grid_build_core.py b/klausur-service/backend/grid_build_core.py deleted file mode 100644 index 19d1cbb..0000000 --- a/klausur-service/backend/grid_build_core.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to grid/build/core.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("grid.build.core") diff --git a/klausur-service/backend/grid_build_finalize.py b/klausur-service/backend/grid_build_finalize.py deleted file mode 100644 index 23a37ca..0000000 --- a/klausur-service/backend/grid_build_finalize.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to grid/build/finalize.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("grid.build.finalize") diff --git a/klausur-service/backend/grid_build_text_ops.py b/klausur-service/backend/grid_build_text_ops.py deleted file mode 100644 index e3b69c9..0000000 --- a/klausur-service/backend/grid_build_text_ops.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to grid/build/text_ops.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("grid.build.text_ops") diff --git a/klausur-service/backend/grid_build_zones.py b/klausur-service/backend/grid_build_zones.py deleted file mode 100644 index 3a51a62..0000000 --- a/klausur-service/backend/grid_build_zones.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to grid/build/zones.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("grid.build.zones") diff --git a/klausur-service/backend/grid_editor_api.py b/klausur-service/backend/grid_editor_api.py deleted file mode 100644 index 822f504..0000000 --- a/klausur-service/backend/grid_editor_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to grid/editor/api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("grid.editor.api") diff --git a/klausur-service/backend/grid_editor_api_box.py b/klausur-service/backend/grid_editor_api_box.py deleted file mode 100644 index 3fbd259..0000000 --- a/klausur-service/backend/grid_editor_api_box.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to grid/editor/api_box.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("grid.editor.api_box") diff --git a/klausur-service/backend/grid_editor_api_grid.py b/klausur-service/backend/grid_editor_api_grid.py deleted file mode 100644 index 39ba7bc..0000000 --- a/klausur-service/backend/grid_editor_api_grid.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to grid/editor/api_grid.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("grid.editor.api_grid") diff --git a/klausur-service/backend/grid_editor_api_gutter.py b/klausur-service/backend/grid_editor_api_gutter.py deleted file mode 100644 index 9b84c2c..0000000 --- a/klausur-service/backend/grid_editor_api_gutter.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to grid/editor/api_gutter.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("grid.editor.api_gutter") diff --git a/klausur-service/backend/grid_editor_api_unified.py b/klausur-service/backend/grid_editor_api_unified.py deleted file mode 100644 index 6c6c25f..0000000 --- a/klausur-service/backend/grid_editor_api_unified.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to grid/editor/api_unified.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("grid.editor.api_unified") diff --git a/klausur-service/backend/grid_editor_columns.py b/klausur-service/backend/grid_editor_columns.py deleted file mode 100644 index f8b8099..0000000 --- a/klausur-service/backend/grid_editor_columns.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to grid/editor/columns.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("grid.editor.columns") diff --git a/klausur-service/backend/grid_editor_filters.py b/klausur-service/backend/grid_editor_filters.py deleted file mode 100644 index 7f4063d..0000000 --- a/klausur-service/backend/grid_editor_filters.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to grid/editor/filters.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("grid.editor.filters") diff --git a/klausur-service/backend/grid_editor_headers.py b/klausur-service/backend/grid_editor_headers.py deleted file mode 100644 index 05563a3..0000000 --- a/klausur-service/backend/grid_editor_headers.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to grid/editor/headers.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("grid.editor.headers") diff --git a/klausur-service/backend/grid_editor_helpers.py b/klausur-service/backend/grid_editor_helpers.py deleted file mode 100644 index 3b17c78..0000000 --- a/klausur-service/backend/grid_editor_helpers.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to grid/editor/helpers.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("grid.editor.helpers") diff --git a/klausur-service/backend/grid_editor_zones.py b/klausur-service/backend/grid_editor_zones.py deleted file mode 100644 index 2e055ff..0000000 --- a/klausur-service/backend/grid_editor_zones.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to grid/editor/zones.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("grid.editor.zones") diff --git a/klausur-service/backend/handwriting_htr_api.py b/klausur-service/backend/handwriting_htr_api.py deleted file mode 100644 index 4e692ce..0000000 --- a/klausur-service/backend/handwriting_htr_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/htr_api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.htr_api") diff --git a/klausur-service/backend/legal_templates_chunking.py b/klausur-service/backend/legal_templates_chunking.py index 724b0da..3ace4db 100644 --- a/klausur-service/backend/legal_templates_chunking.py +++ b/klausur-service/backend/legal_templates_chunking.py @@ -12,7 +12,7 @@ from datetime import datetime from typing import List, Optional from template_sources import SourceConfig -from github_crawler import ExtractedDocument +from crawler.github import ExtractedDocument # Chunking configuration defaults (can be overridden by env vars in ingestion module) diff --git a/klausur-service/backend/legal_templates_ingestion.py b/klausur-service/backend/legal_templates_ingestion.py index c1c79fa..e8d0da7 100644 --- a/klausur-service/backend/legal_templates_ingestion.py +++ b/klausur-service/backend/legal_templates_ingestion.py @@ -42,7 +42,7 @@ from template_sources import ( get_enabled_sources, get_sources_by_priority, ) -from github_crawler import ( +from crawler.github import ( ExtractedDocument, GitHubCrawler, RepositoryDownloader, diff --git a/klausur-service/backend/main.py b/klausur-service/backend/main.py index 9113c89..68c17fe 100644 --- a/klausur-service/backend/main.py +++ b/klausur-service/backend/main.py @@ -33,22 +33,22 @@ from config import EH_UPLOAD_DIR, FRONTEND_PATH from routes import api_router # External module routers (already modular) -from admin_api import router as admin_router -from zeugnis_api import router as zeugnis_router -from training_api import router as training_router +from admin.api import router as admin_router +from zeugnis.api import router as zeugnis_router +from training.api import router as training_router from mail.api import router as mail_router try: - from trocr_api import router as trocr_router + from training.trocr_api import router as trocr_router except ImportError: trocr_router = None -from vocab_worksheet_api import router as vocab_router, set_db_pool as set_vocab_db_pool, _init_vocab_table, _load_all_sessions, DATABASE_URL as VOCAB_DATABASE_URL -from ocr_pipeline_api import router as ocr_pipeline_router, _cache as ocr_pipeline_cache -from grid_editor_api import router as grid_editor_router -from orientation_crop_api import router as orientation_crop_router, set_cache_ref as set_orientation_crop_cache -from ocr_pipeline_session_store import init_ocr_pipeline_tables +from vocab.worksheet.api import router as vocab_router, set_db_pool as set_vocab_db_pool, _init_vocab_table, _load_all_sessions, DATABASE_URL as VOCAB_DATABASE_URL +from ocr.pipeline.api import router as ocr_pipeline_router, _cache as ocr_pipeline_cache +from grid.editor.api import router as grid_editor_router +from ocr.pipeline.orientation_crop_api import router as orientation_crop_router, set_cache_ref as set_orientation_crop_cache +from ocr.pipeline.session_store import init_ocr_pipeline_tables from ocr_kombi.router import router as ocr_kombi_router try: - from handwriting_htr_api import router as htr_router + from ocr.pipeline.htr_api import router as htr_router except ImportError: htr_router = None try: diff --git a/klausur-service/backend/metrics_db.py b/klausur-service/backend/metrics_db.py deleted file mode 100644 index 2c2132a..0000000 --- a/klausur-service/backend/metrics_db.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to metrics/db.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("metrics.db") diff --git a/klausur-service/backend/metrics_db_core.py b/klausur-service/backend/metrics_db_core.py deleted file mode 100644 index 1fad21b..0000000 --- a/klausur-service/backend/metrics_db_core.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to metrics/db_core.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("metrics.db_core") diff --git a/klausur-service/backend/metrics_db_schema.py b/klausur-service/backend/metrics_db_schema.py deleted file mode 100644 index dcb73ac..0000000 --- a/klausur-service/backend/metrics_db_schema.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to metrics/db_schema.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("metrics.db_schema") diff --git a/klausur-service/backend/metrics_db_zeugnis.py b/klausur-service/backend/metrics_db_zeugnis.py deleted file mode 100644 index 2340165..0000000 --- a/klausur-service/backend/metrics_db_zeugnis.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to metrics/db_zeugnis.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("metrics.db_zeugnis") diff --git a/klausur-service/backend/nibis_ingestion.py b/klausur-service/backend/nibis_ingestion.py index 63b2f23..543fa02 100644 --- a/klausur-service/backend/nibis_ingestion.py +++ b/klausur-service/backend/nibis_ingestion.py @@ -20,7 +20,7 @@ from datetime import datetime import asyncio # Local imports -from eh_pipeline import chunk_text, generate_embeddings, extract_text_from_pdf, get_vector_size, EMBEDDING_BACKEND +from korrektur.eh_pipeline import chunk_text, generate_embeddings, extract_text_from_pdf, get_vector_size, EMBEDDING_BACKEND from qdrant_service import QdrantService from nibis_parsers import parse_filename_old_format, parse_filename_new_format diff --git a/klausur-service/backend/nru_worksheet_generator.py b/klausur-service/backend/nru_worksheet_generator.py deleted file mode 100644 index 64e692f..0000000 --- a/klausur-service/backend/nru_worksheet_generator.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to worksheet/nru_generator.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("worksheet.nru_generator") diff --git a/klausur-service/backend/nru_worksheet_html.py b/klausur-service/backend/nru_worksheet_html.py deleted file mode 100644 index b9610e9..0000000 --- a/klausur-service/backend/nru_worksheet_html.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to worksheet/nru_html.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("worksheet.nru_html") diff --git a/klausur-service/backend/nru_worksheet_models.py b/klausur-service/backend/nru_worksheet_models.py deleted file mode 100644 index 3d14576..0000000 --- a/klausur-service/backend/nru_worksheet_models.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to worksheet/nru_models.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("worksheet.nru_models") diff --git a/klausur-service/backend/nru_worksheet_pdf.py b/klausur-service/backend/nru_worksheet_pdf.py deleted file mode 100644 index 8af86b6..0000000 --- a/klausur-service/backend/nru_worksheet_pdf.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to worksheet/nru_pdf.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("worksheet.nru_pdf") diff --git a/klausur-service/backend/ocr_image_enhance.py b/klausur-service/backend/ocr_image_enhance.py deleted file mode 100644 index d154675..0000000 --- a/klausur-service/backend/ocr_image_enhance.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr\/image_enhance.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.image_enhance") diff --git a/klausur-service/backend/ocr_kombi/step_upload.py b/klausur-service/backend/ocr_kombi/step_upload.py index 5b49330..108d166 100644 --- a/klausur-service/backend/ocr_kombi/step_upload.py +++ b/klausur-service/backend/ocr_kombi/step_upload.py @@ -13,7 +13,7 @@ from typing import Optional from fastapi import APIRouter, UploadFile, File, Form, HTTPException -from ocr_pipeline_session_store import create_session_db, get_document_group_sessions +from ocr.pipeline.session_store import create_session_db, get_document_group_sessions logger = logging.getLogger(__name__) diff --git a/klausur-service/backend/ocr_labeling_api.py b/klausur-service/backend/ocr_labeling_api.py deleted file mode 100644 index 0c415e9..0000000 --- a/klausur-service/backend/ocr_labeling_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/labeling/api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.labeling.api") diff --git a/klausur-service/backend/ocr_labeling_helpers.py b/klausur-service/backend/ocr_labeling_helpers.py deleted file mode 100644 index 85835d2..0000000 --- a/klausur-service/backend/ocr_labeling_helpers.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/labeling/helpers.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.labeling.helpers") diff --git a/klausur-service/backend/ocr_labeling_models.py b/klausur-service/backend/ocr_labeling_models.py deleted file mode 100644 index 5985c90..0000000 --- a/klausur-service/backend/ocr_labeling_models.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/labeling/models.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.labeling.models") diff --git a/klausur-service/backend/ocr_labeling_routes.py b/klausur-service/backend/ocr_labeling_routes.py deleted file mode 100644 index 4d5f73a..0000000 --- a/klausur-service/backend/ocr_labeling_routes.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/labeling/routes.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.labeling.routes") diff --git a/klausur-service/backend/ocr_labeling_upload_routes.py b/klausur-service/backend/ocr_labeling_upload_routes.py deleted file mode 100644 index e8579e4..0000000 --- a/klausur-service/backend/ocr_labeling_upload_routes.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/labeling/upload_routes.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.labeling.upload_routes") diff --git a/klausur-service/backend/ocr_merge_helpers.py b/klausur-service/backend/ocr_merge_helpers.py deleted file mode 100644 index 40b211c..0000000 --- a/klausur-service/backend/ocr_merge_helpers.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/merge_helpers.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.merge_helpers") diff --git a/klausur-service/backend/ocr_pipeline_api.py b/klausur-service/backend/ocr_pipeline_api.py deleted file mode 100644 index 18ca941..0000000 --- a/klausur-service/backend/ocr_pipeline_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.api") diff --git a/klausur-service/backend/ocr_pipeline_auto.py b/klausur-service/backend/ocr_pipeline_auto.py deleted file mode 100644 index 3ef8168..0000000 --- a/klausur-service/backend/ocr_pipeline_auto.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/auto.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.auto") diff --git a/klausur-service/backend/ocr_pipeline_auto_helpers.py b/klausur-service/backend/ocr_pipeline_auto_helpers.py deleted file mode 100644 index 306d2b3..0000000 --- a/klausur-service/backend/ocr_pipeline_auto_helpers.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/auto_helpers.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.auto_helpers") diff --git a/klausur-service/backend/ocr_pipeline_auto_steps.py b/klausur-service/backend/ocr_pipeline_auto_steps.py deleted file mode 100644 index eff30b2..0000000 --- a/klausur-service/backend/ocr_pipeline_auto_steps.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/auto_steps.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.auto_steps") diff --git a/klausur-service/backend/ocr_pipeline_columns.py b/klausur-service/backend/ocr_pipeline_columns.py deleted file mode 100644 index 6a9d510..0000000 --- a/klausur-service/backend/ocr_pipeline_columns.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/columns.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.columns") diff --git a/klausur-service/backend/ocr_pipeline_common.py b/klausur-service/backend/ocr_pipeline_common.py deleted file mode 100644 index 4eacaa4..0000000 --- a/klausur-service/backend/ocr_pipeline_common.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/common.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.common") diff --git a/klausur-service/backend/ocr_pipeline_deskew.py b/klausur-service/backend/ocr_pipeline_deskew.py deleted file mode 100644 index c15dd4b..0000000 --- a/klausur-service/backend/ocr_pipeline_deskew.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/deskew.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.deskew") diff --git a/klausur-service/backend/ocr_pipeline_dewarp.py b/klausur-service/backend/ocr_pipeline_dewarp.py deleted file mode 100644 index 7291b19..0000000 --- a/klausur-service/backend/ocr_pipeline_dewarp.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/dewarp.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.dewarp") diff --git a/klausur-service/backend/ocr_pipeline_geometry.py b/klausur-service/backend/ocr_pipeline_geometry.py deleted file mode 100644 index f20d948..0000000 --- a/klausur-service/backend/ocr_pipeline_geometry.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/geometry.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.geometry") diff --git a/klausur-service/backend/ocr_pipeline_llm_review.py b/klausur-service/backend/ocr_pipeline_llm_review.py deleted file mode 100644 index ef8e16e..0000000 --- a/klausur-service/backend/ocr_pipeline_llm_review.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/llm_review.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.llm_review") diff --git a/klausur-service/backend/ocr_pipeline_ocr_merge.py b/klausur-service/backend/ocr_pipeline_ocr_merge.py deleted file mode 100644 index e9f45db..0000000 --- a/klausur-service/backend/ocr_pipeline_ocr_merge.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/ocr_merge.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.ocr_merge") diff --git a/klausur-service/backend/ocr_pipeline_overlay_grid.py b/klausur-service/backend/ocr_pipeline_overlay_grid.py deleted file mode 100644 index de01832..0000000 --- a/klausur-service/backend/ocr_pipeline_overlay_grid.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/overlay_grid.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.overlay_grid") diff --git a/klausur-service/backend/ocr_pipeline_overlay_structure.py b/klausur-service/backend/ocr_pipeline_overlay_structure.py deleted file mode 100644 index 721748d..0000000 --- a/klausur-service/backend/ocr_pipeline_overlay_structure.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/overlay_structure.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.overlay_structure") diff --git a/klausur-service/backend/ocr_pipeline_overlays.py b/klausur-service/backend/ocr_pipeline_overlays.py deleted file mode 100644 index ce6fc95..0000000 --- a/klausur-service/backend/ocr_pipeline_overlays.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/overlays.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.overlays") diff --git a/klausur-service/backend/ocr_pipeline_postprocess.py b/klausur-service/backend/ocr_pipeline_postprocess.py deleted file mode 100644 index 815ff82..0000000 --- a/klausur-service/backend/ocr_pipeline_postprocess.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/postprocess.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.postprocess") diff --git a/klausur-service/backend/ocr_pipeline_reconstruction.py b/klausur-service/backend/ocr_pipeline_reconstruction.py deleted file mode 100644 index cd22501..0000000 --- a/klausur-service/backend/ocr_pipeline_reconstruction.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/reconstruction.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.reconstruction") diff --git a/klausur-service/backend/ocr_pipeline_regression.py b/klausur-service/backend/ocr_pipeline_regression.py deleted file mode 100644 index b5147ed..0000000 --- a/klausur-service/backend/ocr_pipeline_regression.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/regression.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.regression") diff --git a/klausur-service/backend/ocr_pipeline_regression_endpoints.py b/klausur-service/backend/ocr_pipeline_regression_endpoints.py deleted file mode 100644 index 375d135..0000000 --- a/klausur-service/backend/ocr_pipeline_regression_endpoints.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/regression_endpoints.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.regression_endpoints") diff --git a/klausur-service/backend/ocr_pipeline_regression_helpers.py b/klausur-service/backend/ocr_pipeline_regression_helpers.py deleted file mode 100644 index 865dc35..0000000 --- a/klausur-service/backend/ocr_pipeline_regression_helpers.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/regression_helpers.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.regression_helpers") diff --git a/klausur-service/backend/ocr_pipeline_reprocess.py b/klausur-service/backend/ocr_pipeline_reprocess.py deleted file mode 100644 index 5d5dd49..0000000 --- a/klausur-service/backend/ocr_pipeline_reprocess.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/reprocess.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.reprocess") diff --git a/klausur-service/backend/ocr_pipeline_rows.py b/klausur-service/backend/ocr_pipeline_rows.py deleted file mode 100644 index 6d387cc..0000000 --- a/klausur-service/backend/ocr_pipeline_rows.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/rows.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.rows") diff --git a/klausur-service/backend/ocr_pipeline_session_store.py b/klausur-service/backend/ocr_pipeline_session_store.py deleted file mode 100644 index 6efa9ec..0000000 --- a/klausur-service/backend/ocr_pipeline_session_store.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/session_store.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.session_store") diff --git a/klausur-service/backend/ocr_pipeline_sessions.py b/klausur-service/backend/ocr_pipeline_sessions.py deleted file mode 100644 index d1f978f..0000000 --- a/klausur-service/backend/ocr_pipeline_sessions.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/sessions.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.sessions") diff --git a/klausur-service/backend/ocr_pipeline_sessions_crud.py b/klausur-service/backend/ocr_pipeline_sessions_crud.py deleted file mode 100644 index a507df6..0000000 --- a/klausur-service/backend/ocr_pipeline_sessions_crud.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/sessions_crud.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.sessions_crud") diff --git a/klausur-service/backend/ocr_pipeline_sessions_images.py b/klausur-service/backend/ocr_pipeline_sessions_images.py deleted file mode 100644 index 6283e3f..0000000 --- a/klausur-service/backend/ocr_pipeline_sessions_images.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/sessions_images.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.sessions_images") diff --git a/klausur-service/backend/ocr_pipeline_structure.py b/klausur-service/backend/ocr_pipeline_structure.py deleted file mode 100644 index 5c697df..0000000 --- a/klausur-service/backend/ocr_pipeline_structure.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/structure.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.structure") diff --git a/klausur-service/backend/ocr_pipeline_validation.py b/klausur-service/backend/ocr_pipeline_validation.py deleted file mode 100644 index 08187e8..0000000 --- a/klausur-service/backend/ocr_pipeline_validation.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/validation.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.validation") diff --git a/klausur-service/backend/ocr_pipeline_words.py b/klausur-service/backend/ocr_pipeline_words.py deleted file mode 100644 index 189962d..0000000 --- a/klausur-service/backend/ocr_pipeline_words.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/words.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.words") diff --git a/klausur-service/backend/ocr_pipeline_words_detect.py b/klausur-service/backend/ocr_pipeline_words_detect.py deleted file mode 100644 index 6824efe..0000000 --- a/klausur-service/backend/ocr_pipeline_words_detect.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/words_detect.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.words_detect") diff --git a/klausur-service/backend/ocr_pipeline_words_stream.py b/klausur-service/backend/ocr_pipeline_words_stream.py deleted file mode 100644 index ff8c452..0000000 --- a/klausur-service/backend/ocr_pipeline_words_stream.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/words_stream.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.words_stream") diff --git a/klausur-service/backend/orientation_api.py b/klausur-service/backend/orientation_api.py deleted file mode 100644 index 75ba362..0000000 --- a/klausur-service/backend/orientation_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/orientation_api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.orientation_api") diff --git a/klausur-service/backend/orientation_crop_api.py b/klausur-service/backend/orientation_crop_api.py deleted file mode 100644 index a22db49..0000000 --- a/klausur-service/backend/orientation_crop_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/orientation_crop_api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.orientation_crop_api") diff --git a/klausur-service/backend/orientation_crop_helpers.py b/klausur-service/backend/orientation_crop_helpers.py deleted file mode 100644 index 3a0ab6b..0000000 --- a/klausur-service/backend/orientation_crop_helpers.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/orientation_crop_helpers.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.orientation_crop_helpers") diff --git a/klausur-service/backend/page_crop.py b/klausur-service/backend/page_crop.py deleted file mode 100644 index de0fa82..0000000 --- a/klausur-service/backend/page_crop.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/page_crop.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.page_crop") diff --git a/klausur-service/backend/page_crop_core.py b/klausur-service/backend/page_crop_core.py deleted file mode 100644 index fefcdf5..0000000 --- a/klausur-service/backend/page_crop_core.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/page_crop_core.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.page_crop_core") diff --git a/klausur-service/backend/page_crop_edges.py b/klausur-service/backend/page_crop_edges.py deleted file mode 100644 index 21a87eb..0000000 --- a/klausur-service/backend/page_crop_edges.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/page_crop_edges.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.page_crop_edges") diff --git a/klausur-service/backend/page_sub_sessions.py b/klausur-service/backend/page_sub_sessions.py deleted file mode 100644 index aee311b..0000000 --- a/klausur-service/backend/page_sub_sessions.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/page_sub_sessions.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.page_sub_sessions") diff --git a/klausur-service/backend/pdf_export.py b/klausur-service/backend/pdf_export.py deleted file mode 100644 index 3490727..0000000 --- a/klausur-service/backend/pdf_export.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to korrektur/pdf_export.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("korrektur.pdf_export") diff --git a/klausur-service/backend/pdf_export_gutachten.py b/klausur-service/backend/pdf_export_gutachten.py deleted file mode 100644 index 1d3e1be..0000000 --- a/klausur-service/backend/pdf_export_gutachten.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to korrektur/pdf_export_gutachten.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("korrektur.pdf_export_gutachten") diff --git a/klausur-service/backend/pdf_export_overview.py b/klausur-service/backend/pdf_export_overview.py deleted file mode 100644 index f9472bf..0000000 --- a/klausur-service/backend/pdf_export_overview.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to korrektur/pdf_export_overview.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("korrektur.pdf_export_overview") diff --git a/klausur-service/backend/pdf_export_styles.py b/klausur-service/backend/pdf_export_styles.py deleted file mode 100644 index 51809fb..0000000 --- a/klausur-service/backend/pdf_export_styles.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to korrektur/pdf_export_styles.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("korrektur.pdf_export_styles") diff --git a/klausur-service/backend/pdf_extraction.py b/klausur-service/backend/pdf_extraction.py deleted file mode 100644 index e712af1..0000000 --- a/klausur-service/backend/pdf_extraction.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to korrektur/pdf_extraction.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("korrektur.pdf_extraction") diff --git a/klausur-service/backend/rbac.py b/klausur-service/backend/rbac.py deleted file mode 100644 index 623672a..0000000 --- a/klausur-service/backend/rbac.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to compliance/rbac.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("compliance.rbac") diff --git a/klausur-service/backend/rbac_engine.py b/klausur-service/backend/rbac_engine.py deleted file mode 100644 index 7392f03..0000000 --- a/klausur-service/backend/rbac_engine.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to compliance/rbac_engine.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("compliance.rbac_engine") diff --git a/klausur-service/backend/rbac_permissions.py b/klausur-service/backend/rbac_permissions.py deleted file mode 100644 index 274ec8e..0000000 --- a/klausur-service/backend/rbac_permissions.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to compliance/rbac_permissions.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("compliance.rbac_permissions") diff --git a/klausur-service/backend/rbac_types.py b/klausur-service/backend/rbac_types.py deleted file mode 100644 index c9ae916..0000000 --- a/klausur-service/backend/rbac_types.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to compliance/rbac_types.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("compliance.rbac_types") diff --git a/klausur-service/backend/routes/archiv.py b/klausur-service/backend/routes/archiv.py index ade05da..ce0806c 100644 --- a/klausur-service/backend/routes/archiv.py +++ b/klausur-service/backend/routes/archiv.py @@ -13,7 +13,7 @@ from pydantic import BaseModel from qdrant_service import get_qdrant_client, search_nibis_eh from minio_storage import get_presigned_url, list_documents -from eh_pipeline import generate_single_embedding +from korrektur.eh_pipeline import generate_single_embedding router = APIRouter() diff --git a/klausur-service/backend/routes/eh_upload.py b/klausur-service/backend/routes/eh_upload.py index f02f475..d740f97 100644 --- a/klausur-service/backend/routes/eh_upload.py +++ b/klausur-service/backend/routes/eh_upload.py @@ -33,7 +33,7 @@ import storage from qdrant_service import ( get_collection_info, delete_eh_vectors, search_eh, index_eh_chunks ) -from eh_pipeline import ( +from korrektur.eh_pipeline import ( decrypt_text, verify_key_hash, process_eh_for_indexing, generate_single_embedding, EncryptionError, EmbeddingError ) diff --git a/klausur-service/backend/routes/grading.py b/klausur-service/backend/routes/grading.py index 014462e..bdeb8f2 100644 --- a/klausur-service/backend/routes/grading.py +++ b/klausur-service/backend/routes/grading.py @@ -25,9 +25,9 @@ import storage # BYOEH imports (conditional) try: - from eh_pipeline import decrypt_text, EncryptionError + from korrektur.eh_pipeline import decrypt_text, EncryptionError from qdrant_service import search_eh - from eh_pipeline import generate_single_embedding + from korrektur.eh_pipeline import generate_single_embedding BYOEH_AVAILABLE = True except ImportError: BYOEH_AVAILABLE = False diff --git a/klausur-service/backend/scan_quality.py b/klausur-service/backend/scan_quality.py deleted file mode 100644 index 831639c..0000000 --- a/klausur-service/backend/scan_quality.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/scan_quality.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.scan_quality") diff --git a/klausur-service/backend/smart_spell.py b/klausur-service/backend/smart_spell.py deleted file mode 100644 index 6ad63f0..0000000 --- a/klausur-service/backend/smart_spell.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/spell/smart_spell.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.spell.smart_spell") diff --git a/klausur-service/backend/smart_spell_core.py b/klausur-service/backend/smart_spell_core.py deleted file mode 100644 index 0082387..0000000 --- a/klausur-service/backend/smart_spell_core.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/spell/core.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.spell.core") diff --git a/klausur-service/backend/smart_spell_text.py b/klausur-service/backend/smart_spell_text.py deleted file mode 100644 index c3dc96f..0000000 --- a/klausur-service/backend/smart_spell_text.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/spell/text.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.spell.text") diff --git a/klausur-service/backend/tesseract_vocab_extractor.py b/klausur-service/backend/tesseract_vocab_extractor.py deleted file mode 100644 index fc63392..0000000 --- a/klausur-service/backend/tesseract_vocab_extractor.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/engines/tesseract_extractor.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.engines.tesseract_extractor") diff --git a/klausur-service/backend/tests/debug_shear.py b/klausur-service/backend/tests/debug_shear.py index 9e2a7c9..ff0f8cf 100644 --- a/klausur-service/backend/tests/debug_shear.py +++ b/klausur-service/backend/tests/debug_shear.py @@ -6,7 +6,7 @@ sys.path.insert(0, "/app/backend") import cv2 import numpy as np import pytesseract -from ocr_pipeline_session_store import get_session_db +from ocr.pipeline.session_store import get_session_db SESSION_ID = "3dcb1897-09a6-4b80-91b5-7e4207980bf3" @@ -74,7 +74,7 @@ async def main(): # Also test the 4 dewarp methods directly print("\n--- Dewarp method results on deskewed image ---") - from cv_vocab_pipeline import ( + from ocr.cv_pipeline import ( _detect_shear_angle, _detect_shear_by_projection, _detect_shear_by_hough, _detect_shear_by_text_lines, ) diff --git a/klausur-service/backend/tests/test_advanced_rag.py b/klausur-service/backend/tests/test_advanced_rag.py index 5d7fedb..9234e03 100644 --- a/klausur-service/backend/tests/test_advanced_rag.py +++ b/klausur-service/backend/tests/test_advanced_rag.py @@ -257,7 +257,7 @@ class TestPDFExtraction: def test_pdf_extraction_config(self): """Test PDF extraction configuration.""" - from pdf_extraction import PDF_BACKEND, get_pdf_extraction_info + from korrektur.pdf_extraction import PDF_BACKEND, get_pdf_extraction_info info = get_pdf_extraction_info() assert "configured_backend" in info @@ -266,7 +266,7 @@ class TestPDFExtraction: def test_detect_available_backends(self): """Test backend detection.""" - from pdf_extraction import _detect_available_backends + from korrektur.pdf_extraction import _detect_available_backends backends = _detect_available_backends() assert isinstance(backends, list) @@ -280,7 +280,7 @@ class TestPDFExtraction: def test_pdf_extraction_result_class(self): """Test PDFExtractionResult data class.""" - from pdf_extraction import PDFExtractionResult + from korrektur.pdf_extraction import PDFExtractionResult result = PDFExtractionResult( text="Extracted text", @@ -305,7 +305,7 @@ class TestPDFExtraction: def test_pdf_extraction_error(self): """Test PDF extraction error handling.""" - from pdf_extraction import PDFExtractionError + from korrektur.pdf_extraction import PDFExtractionError with pytest.raises(PDFExtractionError): raise PDFExtractionError("Test error") @@ -313,7 +313,7 @@ class TestPDFExtraction: @pytest.mark.xfail(reason="_extract_with_pypdf is internal function not exposed in API") def test_pypdf_extraction(self): """Test pypdf extraction with a simple PDF (BSD-3-Clause licensed).""" - from pdf_extraction import _extract_with_pypdf, PDFExtractionError + from korrektur.pdf_extraction import _extract_with_pypdf, PDFExtractionError # Create a minimal valid PDF # This is a very simple PDF that PyPDF2 can parse @@ -517,7 +517,7 @@ class TestModuleAvailability: def test_pdf_extraction_import(self): """Test PDF Extraction module import.""" - from pdf_extraction import ( + from korrektur.pdf_extraction import ( extract_text_from_pdf, extract_text_from_pdf_enhanced, get_pdf_extraction_info, @@ -551,7 +551,7 @@ class TestFeatureVerification: from hyde import get_hyde_info from hybrid_search import get_hybrid_search_info from rag_evaluation import get_evaluation_info - from pdf_extraction import get_pdf_extraction_info + from korrektur.pdf_extraction import get_pdf_extraction_info from self_rag import get_self_rag_info infos = [ @@ -598,7 +598,7 @@ class TestRAGAdminAPI: @pytest.mark.asyncio async def test_rag_documentation_markdown_format(self): """Test RAG documentation endpoint returns markdown.""" - from admin_api import get_rag_documentation + from admin.api import get_rag_documentation result = await get_rag_documentation(format="markdown") @@ -610,7 +610,7 @@ class TestRAGAdminAPI: @pytest.mark.asyncio async def test_rag_documentation_html_format(self): """Test RAG documentation endpoint returns HTML with tables.""" - from admin_api import get_rag_documentation + from admin.api import get_rag_documentation result = await get_rag_documentation(format="html") @@ -628,7 +628,7 @@ class TestRAGAdminAPI: @pytest.mark.asyncio async def test_rag_system_info_has_feature_status(self): """Test RAG system-info includes feature status.""" - from admin_api import get_rag_system_info + from admin.api import get_rag_system_info result = await get_rag_system_info() @@ -639,7 +639,7 @@ class TestRAGAdminAPI: @pytest.mark.asyncio async def test_rag_system_info_has_privacy_notes(self): """Test RAG system-info includes privacy notes.""" - from admin_api import get_rag_system_info + from admin.api import get_rag_system_info result = await get_rag_system_info() diff --git a/klausur-service/backend/tests/test_border_ghost_filter.py b/klausur-service/backend/tests/test_border_ghost_filter.py index 99f9c5e..d8c8974 100644 --- a/klausur-service/backend/tests/test_border_ghost_filter.py +++ b/klausur-service/backend/tests/test_border_ghost_filter.py @@ -15,8 +15,8 @@ import os sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..")) -from ocr_pipeline_api import _filter_border_ghost_words, _BORDER_GHOST_CHARS -from cv_vocab_types import DetectedBox +from ocr.pipeline.api import _filter_border_ghost_words, _BORDER_GHOST_CHARS +from ocr.types import DetectedBox # --------------------------------------------------------------------------- diff --git a/klausur-service/backend/tests/test_box_column_awareness.py b/klausur-service/backend/tests/test_box_column_awareness.py index 255a4e7..cc44e5d 100644 --- a/klausur-service/backend/tests/test_box_column_awareness.py +++ b/klausur-service/backend/tests/test_box_column_awareness.py @@ -14,7 +14,7 @@ import os sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..")) -from cv_words_first import build_grid_from_words, _cluster_columns +from ocr.words_first import build_grid_from_words, _cluster_columns # --------------------------------------------------------------------------- diff --git a/klausur-service/backend/tests/test_box_layout.py b/klausur-service/backend/tests/test_box_layout.py index a1cf428..67230a4 100644 --- a/klausur-service/backend/tests/test_box_layout.py +++ b/klausur-service/backend/tests/test_box_layout.py @@ -4,7 +4,7 @@ import pytest import sys, os sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..")) -from cv_box_layout import classify_box_layout, build_box_zone_grid, _group_into_lines +from ocr.detect.box_layout import classify_box_layout, build_box_zone_grid, _group_into_lines def _make_words(lines_data): diff --git a/klausur-service/backend/tests/test_byoeh.py b/klausur-service/backend/tests/test_byoeh.py index 8f2c030..15a6970 100644 --- a/klausur-service/backend/tests/test_byoeh.py +++ b/klausur-service/backend/tests/test_byoeh.py @@ -514,7 +514,7 @@ class TestEncryptionUtils: def test_hash_key(self): """Key hashing produces consistent results.""" - from eh_pipeline import hash_key + from korrektur.eh_pipeline import hash_key import os passphrase = "test-secret-passphrase" @@ -527,7 +527,7 @@ class TestEncryptionUtils: def test_verify_key_hash(self): """Key hash verification works correctly.""" - from eh_pipeline import hash_key, verify_key_hash + from korrektur.eh_pipeline import hash_key, verify_key_hash import os passphrase = "test-secret-passphrase" @@ -539,7 +539,7 @@ class TestEncryptionUtils: def test_chunk_text(self): """Text chunking produces correct overlap.""" - from eh_pipeline import chunk_text + from korrektur.eh_pipeline import chunk_text text = "A" * 2000 # 2000 characters chunks = chunk_text(text, chunk_size=1000, overlap=200) @@ -550,7 +550,7 @@ class TestEncryptionUtils: def test_encrypt_decrypt_text(self): """Text encryption and decryption round-trip.""" - from eh_pipeline import encrypt_text, decrypt_text + from korrektur.eh_pipeline import encrypt_text, decrypt_text plaintext = "Dies ist ein geheimer Text." passphrase = "geheim123" diff --git a/klausur-service/backend/tests/test_cell_phonetics.py b/klausur-service/backend/tests/test_cell_phonetics.py index 3ea2b74..e2916e4 100644 --- a/klausur-service/backend/tests/test_cell_phonetics.py +++ b/klausur-service/backend/tests/test_cell_phonetics.py @@ -13,71 +13,71 @@ class TestInsertMissingIpa: def test_single_headword_gets_ipa(self): """Single English headword should get IPA inserted.""" - from cv_ocr_engines import _insert_missing_ipa + from ocr.engines.engines import _insert_missing_ipa result = _insert_missing_ipa("badge", "british") assert "[" in result and "]" in result assert result.startswith("badge [") def test_short_phrase_first_word_gets_ipa(self): """First real word in short phrase gets IPA.""" - from cv_ocr_engines import _insert_missing_ipa + from ocr.engines.engines import _insert_missing_ipa result = _insert_missing_ipa("film", "british") assert "[" in result def test_long_sentence_unchanged(self): """Sentences with >6 words should not get IPA.""" - from cv_ocr_engines import _insert_missing_ipa + from ocr.engines.engines import _insert_missing_ipa text = "Can I borrow your CD player from you please" result = _insert_missing_ipa(text, "british") assert result == text def test_existing_brackets_unchanged(self): """Text with existing brackets should not get double IPA.""" - from cv_ocr_engines import _insert_missing_ipa + from ocr.engines.engines import _insert_missing_ipa text = "dance [dˈɑːns]" result = _insert_missing_ipa(text, "british") assert result == text def test_empty_text_unchanged(self): """Empty text returns empty.""" - from cv_ocr_engines import _insert_missing_ipa + from ocr.engines.engines import _insert_missing_ipa assert _insert_missing_ipa("", "british") == "" assert _insert_missing_ipa(" ", "british") == "" def test_grammar_words_skipped(self): """Grammar particles should not get IPA.""" - from cv_ocr_engines import _insert_missing_ipa + from ocr.engines.engines import _insert_missing_ipa # "sth" is in _GRAMMAR_BRACKET_WORDS result = _insert_missing_ipa("sth", "british") assert "[" not in result def test_german_word_no_ipa(self): """German words (no IPA entry) stay unchanged.""" - from cv_ocr_engines import _insert_missing_ipa + from ocr.engines.engines import _insert_missing_ipa result = _insert_missing_ipa("Anstecknadel", "british") assert result == "Anstecknadel" def test_compound_word_schoolbag_gets_ipa(self): """R07: Compound word 'schoolbag' should get decomposed IPA (school+bag).""" - from cv_ocr_engines import _insert_missing_ipa + from ocr.engines.engines import _insert_missing_ipa result = _insert_missing_ipa("schoolbag", "british") assert "[" in result and "]" in result assert result.startswith("schoolbag [") def test_compound_word_blackbird(self): """Compound word 'blackbird' should get decomposed IPA.""" - from cv_ocr_engines import _insert_missing_ipa + from ocr.engines.engines import _insert_missing_ipa result = _insert_missing_ipa("blackbird", "british") assert "[" in result and "]" in result def test_compound_word_too_short(self): """Words shorter than 6 chars should not attempt compound decomposition.""" - from cv_ocr_engines import _decompose_compound + from ocr.engines.engines import _decompose_compound assert _decompose_compound("bag", "british") is None def test_decompose_compound_direct(self): """Direct test of _decompose_compound for known compounds.""" - from cv_ocr_engines import _decompose_compound + from ocr.engines.engines import _decompose_compound # schoolbag = school + bag — both should be in dictionary result = _decompose_compound("schoolbag", "british") assert result is not None @@ -88,14 +88,14 @@ class TestStripPostBracketGarbled: def test_simple_trailing_garbled(self): """R21-simple: 'sea [sˈiː] si:' → trailing IPA marker removed.""" - from cv_ocr_engines import _strip_post_bracket_garbled + from ocr.engines.engines import _strip_post_bracket_garbled result = _strip_post_bracket_garbled("sea [sˈiː] si:") assert "si:" not in result assert result.startswith("sea [sˈiː]") def test_multi_word_trailing_garbled(self): """R21: 'seat [sˈiːt] belt si:t belt' → keep 'belt', remove garbled.""" - from cv_ocr_engines import _strip_post_bracket_garbled + from ocr.engines.engines import _strip_post_bracket_garbled result = _strip_post_bracket_garbled("seat [sˈiːt] belt si:t belt") assert "belt" in result # real word kept assert "si:t" not in result # garbled removed @@ -104,13 +104,13 @@ class TestStripPostBracketGarbled: def test_delimiter_after_bracket_kept(self): """Delimiters after IPA bracket are kept.""" - from cv_ocr_engines import _strip_post_bracket_garbled + from ocr.engines.engines import _strip_post_bracket_garbled result = _strip_post_bracket_garbled("dance [dˈɑːns] – tanzen") assert "– tanzen" in result def test_german_after_bracket_kept(self): """German words (uppercase) after IPA bracket are kept.""" - from cv_ocr_engines import _strip_post_bracket_garbled + from ocr.engines.engines import _strip_post_bracket_garbled result = _strip_post_bracket_garbled("badge [bædʒ] Abzeichen") assert "Abzeichen" in result @@ -120,7 +120,7 @@ class TestFixCellPhonetics: def test_english_column_cells_processed(self): """Cells with col_type column_en should be processed.""" - from cv_ocr_engines import fix_cell_phonetics + from ocr.engines.engines import fix_cell_phonetics cells = [ {"cell_id": "c1", "col_type": "column_en", "text": "badge"}, {"cell_id": "c2", "col_type": "column_de", "text": "Anstecknadel"}, @@ -133,7 +133,7 @@ class TestFixCellPhonetics: def test_column_text_cells_processed(self): """Cells with col_type column_text should be processed.""" - from cv_ocr_engines import fix_cell_phonetics + from ocr.engines.engines import fix_cell_phonetics cells = [ {"cell_id": "c1", "col_type": "column_text", "text": "challenge"}, ] @@ -142,7 +142,7 @@ class TestFixCellPhonetics: def test_garbled_ipa_replaced(self): """Garbled IPA brackets should be replaced with correct IPA.""" - from cv_ocr_engines import fix_cell_phonetics + from ocr.engines.engines import fix_cell_phonetics cells = [ {"cell_id": "c1", "col_type": "column_en", "text": "dance {'tfatno]"}, ] @@ -154,7 +154,7 @@ class TestFixCellPhonetics: def test_empty_cells_unchanged(self): """Empty cells should not cause errors.""" - from cv_ocr_engines import fix_cell_phonetics + from ocr.engines.engines import fix_cell_phonetics cells = [ {"cell_id": "c1", "col_type": "column_en", "text": ""}, {"cell_id": "c2", "col_type": "column_en", "text": None}, @@ -164,7 +164,7 @@ class TestFixCellPhonetics: def test_non_english_col_types_skipped(self): """Cells with column_de, column_example etc. should not be processed.""" - from cv_ocr_engines import fix_cell_phonetics + from ocr.engines.engines import fix_cell_phonetics cells = [ {"cell_id": "c1", "col_type": "column_de", "text": "Eis (gefrorenes Wasser)"}, {"cell_id": "c2", "col_type": "column_example", "text": "(sich beschweren)"}, diff --git a/klausur-service/backend/tests/test_cv_box_detect.py b/klausur-service/backend/tests/test_cv_box_detect.py index 0f3c73f..aa7135e 100644 --- a/klausur-service/backend/tests/test_cv_box_detect.py +++ b/klausur-service/backend/tests/test_cv_box_detect.py @@ -9,8 +9,8 @@ import pytest import cv2 -from cv_box_detect import detect_boxes, split_page_into_zones -from cv_vocab_types import DetectedBox, PageZone +from ocr.detect.box_detect import detect_boxes, split_page_into_zones +from ocr.types import DetectedBox, PageZone # --------------------------------------------------------------------------- diff --git a/klausur-service/backend/tests/test_cv_graphic_detect.py b/klausur-service/backend/tests/test_cv_graphic_detect.py index 1a008f0..f65ffce 100644 --- a/klausur-service/backend/tests/test_cv_graphic_detect.py +++ b/klausur-service/backend/tests/test_cv_graphic_detect.py @@ -9,7 +9,7 @@ import pytest import cv2 -from cv_graphic_detect import detect_graphic_elements, GraphicElement, _dominant_color +from ocr.detect.graphic_detect import detect_graphic_elements, GraphicElement, _dominant_color # --------------------------------------------------------------------------- diff --git a/klausur-service/backend/tests/test_cv_vocab_pipeline.py b/klausur-service/backend/tests/test_cv_vocab_pipeline.py index 67ca888..22aa993 100644 --- a/klausur-service/backend/tests/test_cv_vocab_pipeline.py +++ b/klausur-service/backend/tests/test_cv_vocab_pipeline.py @@ -23,7 +23,7 @@ from unittest.mock import AsyncMock, MagicMock, patch, PropertyMock from dataclasses import asdict # Import module under test -from cv_vocab_pipeline import ( +from ocr.cv_pipeline import ( ColumnGeometry, DocumentTypeResult, PageRegion, @@ -1408,7 +1408,7 @@ class TestCellsToVocabEntriesPageRef: def test_page_ref_mapped_to_source_page(self): """Cell with col_type='page_ref' → source_page field populated.""" - from cv_vocab_pipeline import _cells_to_vocab_entries + from ocr.cv_pipeline import _cells_to_vocab_entries cells = [ { @@ -1450,7 +1450,7 @@ class TestCellsToVocabEntriesPageRef: def test_no_page_ref_defaults_empty(self): """Without page_ref cell, source_page defaults to empty string.""" - from cv_vocab_pipeline import _cells_to_vocab_entries + from ocr.cv_pipeline import _cells_to_vocab_entries cells = [ { @@ -1472,7 +1472,7 @@ class TestCellsToVocabEntriesPageRef: def test_marker_only_row_included(self): """Row with only a marker (no english/german/example) is kept.""" - from cv_vocab_pipeline import _cells_to_vocab_entries + from ocr.cv_pipeline import _cells_to_vocab_entries cells = [ # Row 0: has english + marker @@ -1543,7 +1543,7 @@ class TestCellsToVocabEntriesPageRef: def test_page_ref_only_row_included(self): """Row with only source_page text is kept (no english/german/example).""" - from cv_vocab_pipeline import _cells_to_vocab_entries + from ocr.cv_pipeline import _cells_to_vocab_entries cells = [ { diff --git a/klausur-service/backend/tests/test_cv_words_first.py b/klausur-service/backend/tests/test_cv_words_first.py index 1b3d262..10c5b9a 100644 --- a/klausur-service/backend/tests/test_cv_words_first.py +++ b/klausur-service/backend/tests/test_cv_words_first.py @@ -1,7 +1,7 @@ """Tests for cv_words_first.py — Words-First Grid Builder.""" import pytest -from cv_words_first import ( +from ocr.words_first import ( _assign_word_to_column, _assign_word_to_row, _build_cells, diff --git a/klausur-service/backend/tests/test_dictionary_detection.py b/klausur-service/backend/tests/test_dictionary_detection.py index a9840ac..35e255f 100644 --- a/klausur-service/backend/tests/test_dictionary_detection.py +++ b/klausur-service/backend/tests/test_dictionary_detection.py @@ -10,8 +10,8 @@ import os # Add backend to path for imports sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..")) -from cv_vocab_types import ColumnGeometry -from cv_layout import _score_dictionary_signals, _classify_dictionary_columns, _score_language +from ocr.types import ColumnGeometry +from ocr.layout.layout import _score_dictionary_signals, _classify_dictionary_columns, _score_language def _make_words(texts, start_y=0, y_step=30, x=100, conf=80): diff --git a/klausur-service/backend/tests/test_doclayout_detect.py b/klausur-service/backend/tests/test_doclayout_detect.py index 3b3d8f7..b02812f 100644 --- a/klausur-service/backend/tests/test_doclayout_detect.py +++ b/klausur-service/backend/tests/test_doclayout_detect.py @@ -19,8 +19,8 @@ import importlib # --------------------------------------------------------------------------- def _fresh_import(): - """Re-import cv_doclayout_detect with reset globals.""" - import cv_doclayout_detect as mod + """Re-import ocr.detect.doclayout_detect with reset globals.""" + import ocr.detect.doclayout_detect as mod # Reset module-level caching so each test starts clean mod._onnx_session = None mod._model_path = None @@ -62,7 +62,7 @@ class TestIsDoclayoutAvailableNoModel: class TestLayoutRegionDataclass: def test_basic_creation(self): - from cv_doclayout_detect import LayoutRegion + from ocr.detect.doclayout_detect import LayoutRegion region = LayoutRegion( x=10, y=20, width=100, height=200, label="figure", confidence=0.95, label_index=1, @@ -76,14 +76,14 @@ class TestLayoutRegionDataclass: assert region.label_index == 1 def test_all_fields_present(self): - from cv_doclayout_detect import LayoutRegion + from ocr.detect.doclayout_detect import LayoutRegion import dataclasses field_names = {f.name for f in dataclasses.fields(LayoutRegion)} expected = {"x", "y", "width", "height", "label", "confidence", "label_index"} assert field_names == expected def test_different_labels(self): - from cv_doclayout_detect import LayoutRegion, DOCLAYOUT_CLASSES + from ocr.detect.doclayout_detect import LayoutRegion, DOCLAYOUT_CLASSES for idx, label in enumerate(DOCLAYOUT_CLASSES): region = LayoutRegion( x=0, y=0, width=50, height=50, @@ -125,7 +125,7 @@ class TestDetectLayoutRegionsNoModel: class TestPreprocessingShapes: def test_square_image(self): - from cv_doclayout_detect import preprocess_image + from ocr.detect.doclayout_detect import preprocess_image img = np.random.randint(0, 255, (800, 800, 3), dtype=np.uint8) tensor, scale, pad_x, pad_y = preprocess_image(img) assert tensor.shape == (1, 3, 800, 800) @@ -134,7 +134,7 @@ class TestPreprocessingShapes: assert tensor.max() <= 1.0 def test_landscape_image(self): - from cv_doclayout_detect import preprocess_image + from ocr.detect.doclayout_detect import preprocess_image img = np.random.randint(0, 255, (600, 1200, 3), dtype=np.uint8) tensor, scale, pad_x, pad_y = preprocess_image(img) assert tensor.shape == (1, 3, 800, 800) @@ -144,7 +144,7 @@ class TestPreprocessingShapes: assert pad_y > 0 # vertical padding expected def test_portrait_image(self): - from cv_doclayout_detect import preprocess_image + from ocr.detect.doclayout_detect import preprocess_image img = np.random.randint(0, 255, (1200, 600, 3), dtype=np.uint8) tensor, scale, pad_x, pad_y = preprocess_image(img) assert tensor.shape == (1, 3, 800, 800) @@ -154,20 +154,20 @@ class TestPreprocessingShapes: assert pad_x > 0 # horizontal padding expected def test_small_image(self): - from cv_doclayout_detect import preprocess_image + from ocr.detect.doclayout_detect import preprocess_image img = np.random.randint(0, 255, (100, 200, 3), dtype=np.uint8) tensor, scale, pad_x, pad_y = preprocess_image(img) assert tensor.shape == (1, 3, 800, 800) def test_typical_scan_a4(self): """A4 scan at 300dpi: roughly 2480x3508 pixels.""" - from cv_doclayout_detect import preprocess_image + from ocr.detect.doclayout_detect import preprocess_image img = np.random.randint(0, 255, (3508, 2480, 3), dtype=np.uint8) tensor, scale, pad_x, pad_y = preprocess_image(img) assert tensor.shape == (1, 3, 800, 800) def test_values_normalized(self): - from cv_doclayout_detect import preprocess_image + from ocr.detect.doclayout_detect import preprocess_image # All white image img = np.full((400, 400, 3), 255, dtype=np.uint8) tensor, _, _, _ = preprocess_image(img) @@ -182,20 +182,20 @@ class TestPreprocessingShapes: class TestNmsLogic: def test_empty_input(self): - from cv_doclayout_detect import nms + from ocr.detect.doclayout_detect import nms boxes = np.array([]).reshape(0, 4) scores = np.array([]) assert nms(boxes, scores) == [] def test_single_box(self): - from cv_doclayout_detect import nms + from ocr.detect.doclayout_detect import nms boxes = np.array([[10, 10, 100, 100]], dtype=np.float32) scores = np.array([0.9]) kept = nms(boxes, scores, iou_threshold=0.5) assert kept == [0] def test_non_overlapping_boxes(self): - from cv_doclayout_detect import nms + from ocr.detect.doclayout_detect import nms boxes = np.array([ [0, 0, 50, 50], [200, 200, 300, 300], @@ -207,7 +207,7 @@ class TestNmsLogic: assert set(kept) == {0, 1, 2} def test_overlapping_boxes_suppressed(self): - from cv_doclayout_detect import nms + from ocr.detect.doclayout_detect import nms # Two boxes that heavily overlap boxes = np.array([ [10, 10, 110, 110], # 100x100 @@ -219,7 +219,7 @@ class TestNmsLogic: assert kept == [0] def test_partially_overlapping_boxes_kept(self): - from cv_doclayout_detect import nms + from ocr.detect.doclayout_detect import nms # Two boxes that overlap ~25% (below 0.5 threshold) boxes = np.array([ [0, 0, 100, 100], # 100x100 @@ -231,7 +231,7 @@ class TestNmsLogic: assert len(kept) == 2 def test_nms_respects_score_ordering(self): - from cv_doclayout_detect import nms + from ocr.detect.doclayout_detect import nms # Three overlapping boxes — highest confidence should be kept first boxes = np.array([ [10, 10, 110, 110], @@ -244,7 +244,7 @@ class TestNmsLogic: assert kept[0] == 1 def test_iou_computation(self): - from cv_doclayout_detect import _compute_iou + from ocr.detect.doclayout_detect import _compute_iou box_a = np.array([0, 0, 100, 100], dtype=np.float32) box_b = np.array([0, 0, 100, 100], dtype=np.float32) assert abs(_compute_iou(box_a, box_b) - 1.0) < 1e-5 @@ -259,7 +259,7 @@ class TestNmsLogic: class TestDoclayoutClasses: def test_correct_class_list(self): - from cv_doclayout_detect import DOCLAYOUT_CLASSES + from ocr.detect.doclayout_detect import DOCLAYOUT_CLASSES expected = [ "table", "figure", "title", "text", "list", "header", "footer", "equation", "reference", "abstract", @@ -267,15 +267,15 @@ class TestDoclayoutClasses: assert DOCLAYOUT_CLASSES == expected def test_class_count(self): - from cv_doclayout_detect import DOCLAYOUT_CLASSES + from ocr.detect.doclayout_detect import DOCLAYOUT_CLASSES assert len(DOCLAYOUT_CLASSES) == 10 def test_no_duplicates(self): - from cv_doclayout_detect import DOCLAYOUT_CLASSES + from ocr.detect.doclayout_detect import DOCLAYOUT_CLASSES assert len(DOCLAYOUT_CLASSES) == len(set(DOCLAYOUT_CLASSES)) def test_all_lowercase(self): - from cv_doclayout_detect import DOCLAYOUT_CLASSES + from ocr.detect.doclayout_detect import DOCLAYOUT_CLASSES for cls in DOCLAYOUT_CLASSES: assert cls == cls.lower(), f"Class '{cls}' should be lowercase" @@ -303,7 +303,7 @@ class TestGetDoclayoutStatus: class TestPostprocessing: def test_single_tensor_format_6cols(self): """Test parsing of (1, N, 6) output format: x1,y1,x2,y2,score,class.""" - from cv_doclayout_detect import _postprocess + from ocr.detect.doclayout_detect import _postprocess # One detection: figure at (100,100)-(300,300) in 800x800 space raw = np.array([[[100, 100, 300, 300, 0.92, 1]]], dtype=np.float32) @@ -320,7 +320,7 @@ class TestPostprocessing: def test_three_tensor_format(self): """Test parsing of 3-tensor output: boxes, scores, class_ids.""" - from cv_doclayout_detect import _postprocess + from ocr.detect.doclayout_detect import _postprocess boxes = np.array([[50, 50, 200, 150]], dtype=np.float32) scores = np.array([0.88], dtype=np.float32) @@ -338,7 +338,7 @@ class TestPostprocessing: def test_confidence_filtering(self): """Detections below threshold should be excluded.""" - from cv_doclayout_detect import _postprocess + from ocr.detect.doclayout_detect import _postprocess raw = np.array([ [100, 100, 200, 200, 0.9, 1], # above threshold @@ -357,7 +357,7 @@ class TestPostprocessing: def test_coordinate_scaling(self): """Verify coordinates are correctly scaled back to original image.""" - from cv_doclayout_detect import _postprocess + from ocr.detect.doclayout_detect import _postprocess # Image was 1600x1200, scaled to fit 800x800 → scale=0.5, pad_y offset scale = 800 / 1600 # 0.5 @@ -382,7 +382,7 @@ class TestPostprocessing: assert r.y == 200 def test_empty_output(self): - from cv_doclayout_detect import _postprocess + from ocr.detect.doclayout_detect import _postprocess raw = np.array([]).reshape(1, 0, 6).astype(np.float32) regions = _postprocess( outputs=[raw], diff --git a/klausur-service/backend/tests/test_grid_editor_api.py b/klausur-service/backend/tests/test_grid_editor_api.py index 0b7a89b..c0d2d3c 100644 --- a/klausur-service/backend/tests/test_grid_editor_api.py +++ b/klausur-service/backend/tests/test_grid_editor_api.py @@ -14,15 +14,15 @@ sys.path.insert(0, '/app') import cv2 import numpy as np import pytest -from cv_vocab_types import PageZone, DetectedBox -from grid_editor_api import ( +from ocr.types import PageZone, DetectedBox +from grid.editor.api import ( _merge_content_zones_across_boxes, _filter_border_ghosts, _detect_header_rows, _detect_heading_rows_by_color, _detect_heading_rows_by_single_cell, ) -from cv_ocr_engines import _text_has_garbled_ipa, fix_ipa_continuation_cell +from ocr.engines.engines import _text_has_garbled_ipa, fix_ipa_continuation_cell # --------------------------------------------------------------------------- @@ -818,7 +818,7 @@ class TestSlashIpaConversion: def _run_step_5h(self, text: str) -> str: """Run the Step 5h regex logic on a single text string.""" import re - from cv_ocr_engines import _lookup_ipa + from ocr.engines.engines import _lookup_ipa _SLASH_IPA_RE = re.compile( r'(\b[a-zA-Z]+[²³¹]?)\s*' @@ -926,7 +926,7 @@ class TestRedFalsePositiveSuppression: def test_low_saturation_red_classified_as_black(self): """Black text with slight warm scanner tint (sat ~85) → black, not red.""" import numpy as np - from cv_color_detect import detect_word_colors + from ocr.detect.color_detect import detect_word_colors # Create a 40x20 image with dark gray pixels (slight warm tint) # HSV: hue=5 (red range), sat=85 (above 55 threshold but below 90), val=40 @@ -941,7 +941,7 @@ class TestRedFalsePositiveSuppression: def test_high_saturation_red_classified_as_red(self): """Genuinely red text (sat=150) → red.""" import numpy as np - from cv_color_detect import detect_word_colors + from ocr.detect.color_detect import detect_word_colors # White background with red text region # Background: white (H=0, S=0, V=255) @@ -984,7 +984,7 @@ class TestBlueBulletFilter: zone = {"zone_index": 0, "cells": [cell], "rows": [], "columns": []} # Run the bullet filter logic inline - from grid_editor_api import _build_grid_core + from grid.editor.api import _build_grid_core # Instead, test the logic directly wbs = cell["word_boxes"] to_remove = set() @@ -1057,7 +1057,7 @@ class TestWordBoxReadingOrder: def test_single_line_sorted_by_left(self): """Words on same Y line sorted by X (left) position.""" - from cv_ocr_engines import _group_words_into_lines + from ocr.engines.engines import _group_words_into_lines wbs = [ {"text": "up", "left": 376, "top": 264, "width": 22, "height": 19}, {"text": "tie", "left": 284, "top": 264, "width": 23, "height": 14}, @@ -1069,7 +1069,7 @@ class TestWordBoxReadingOrder: def test_two_lines_preserves_line_order(self): """Words on two Y lines: first line first, then second line.""" - from cv_ocr_engines import _group_words_into_lines + from ocr.engines.engines import _group_words_into_lines wbs = [ {"text": "b)", "left": 100, "top": 290, "width": 20, "height": 15}, {"text": "cat", "left": 50, "top": 264, "width": 30, "height": 15}, @@ -1082,7 +1082,7 @@ class TestWordBoxReadingOrder: def test_already_sorted_unchanged(self): """Already-sorted word_boxes stay in same order.""" - from cv_ocr_engines import _group_words_into_lines + from ocr.engines.engines import _group_words_into_lines wbs = [ {"text": "tie", "left": 284, "top": 264, "width": 23, "height": 14}, {"text": "sb/sth", "left": 309, "top": 264, "width": 57, "height": 20}, diff --git a/klausur-service/backend/tests/test_gutter_repair.py b/klausur-service/backend/tests/test_gutter_repair.py index 931c19e..f08d3cb 100644 --- a/klausur-service/backend/tests/test_gutter_repair.py +++ b/klausur-service/backend/tests/test_gutter_repair.py @@ -7,7 +7,7 @@ import os # Add parent directory to path so we can import the module sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) -from cv_gutter_repair import ( +from ocr.gutter.repair import ( _is_known, _try_hyphen_join, _try_spell_fix, diff --git a/klausur-service/backend/tests/test_legal_templates.py b/klausur-service/backend/tests/test_legal_templates.py index b9a2476..a4e044f 100644 --- a/klausur-service/backend/tests/test_legal_templates.py +++ b/klausur-service/backend/tests/test_legal_templates.py @@ -173,7 +173,7 @@ class TestMarkdownParser: def test_parse_simple_markdown(self): """Test parsing simple markdown content.""" - from github_crawler import MarkdownParser + from crawler.github import MarkdownParser content = """# Test Title @@ -191,21 +191,21 @@ More content here. def test_extract_title_from_heading(self): """Test extracting title from h1 heading.""" - from github_crawler import MarkdownParser + from crawler.github import MarkdownParser title = MarkdownParser._extract_title("# My Document\n\nContent", "fallback.md") assert title == "My Document" def test_extract_title_fallback(self): """Test fallback to filename when no heading.""" - from github_crawler import MarkdownParser + from crawler.github import MarkdownParser title = MarkdownParser._extract_title("No heading here", "my-document.md") assert title == "My Document" def test_detect_german_language(self): """Test German language detection.""" - from github_crawler import MarkdownParser + from crawler.github import MarkdownParser german_text = "Dies ist eine Datenschutzerklaerung fuer die Verarbeitung personenbezogener Daten." lang = MarkdownParser._detect_language(german_text) @@ -213,7 +213,7 @@ More content here. def test_detect_english_language(self): """Test English language detection.""" - from github_crawler import MarkdownParser + from crawler.github import MarkdownParser english_text = "This is a privacy policy for processing personal data in our application." lang = MarkdownParser._detect_language(english_text) @@ -221,7 +221,7 @@ More content here. def test_find_placeholders(self): """Test finding placeholder patterns.""" - from github_crawler import MarkdownParser + from crawler.github import MarkdownParser content = "Company: [COMPANY_NAME], Contact: {email}, Address: __ADDRESS__" placeholders = MarkdownParser._find_placeholders(content) @@ -236,7 +236,7 @@ class TestHTMLParser: def test_parse_simple_html(self): """Test parsing simple HTML content.""" - from github_crawler import HTMLParser + from crawler.github import HTMLParser content = """ @@ -255,7 +255,7 @@ class TestHTMLParser: def test_html_to_text_removes_scripts(self): """Test that scripts are removed from HTML.""" - from github_crawler import HTMLParser + from crawler.github import HTMLParser html = "
Text
More
" text = HTMLParser._html_to_text(html) @@ -270,7 +270,7 @@ class TestJSONParser: def test_parse_simple_json(self): """Test parsing simple JSON content.""" - from github_crawler import JSONParser + from crawler.github import JSONParser content = json.dumps({ "title": "Privacy Policy", @@ -286,7 +286,7 @@ class TestJSONParser: def test_parse_nested_json(self): """Test parsing nested JSON structures.""" - from github_crawler import JSONParser + from crawler.github import JSONParser content = json.dumps({ "sections": { @@ -305,7 +305,7 @@ class TestExtractedDocument: def test_extracted_document_hash(self): """Test that source hash is auto-generated.""" - from github_crawler import ExtractedDocument + from crawler.github import ExtractedDocument doc = ExtractedDocument( text="Some content", @@ -396,7 +396,7 @@ class TestLegalTemplatesIngestion: def test_infer_template_type_privacy(self): """Test inferring privacy policy type.""" from legal_templates_ingestion import LegalTemplatesIngestion - from github_crawler import ExtractedDocument + from crawler.github import ExtractedDocument from template_sources import SourceConfig, LicenseType with patch('legal_templates_ingestion.QdrantClient'): @@ -449,7 +449,7 @@ class TestTemplatesAdminAPI: def test_templates_status_structure(self): """Test the structure of templates status response.""" - from admin_api import _templates_ingestion_status + from admin.api import _templates_ingestion_status # Reset status _templates_ingestion_status["running"] = False @@ -462,7 +462,7 @@ class TestTemplatesAdminAPI: def test_templates_status_running(self): """Test status when ingestion is running.""" - from admin_api import _templates_ingestion_status + from admin.api import _templates_ingestion_status _templates_ingestion_status["running"] = True _templates_ingestion_status["current_source"] = "github-site-policy" @@ -473,7 +473,7 @@ class TestTemplatesAdminAPI: def test_templates_results_tracking(self): """Test that ingestion results are tracked correctly.""" - from admin_api import _templates_ingestion_status + from admin.api import _templates_ingestion_status _templates_ingestion_status["results"] = { "github-site-policy": { @@ -578,7 +578,7 @@ class TestTemplatesIntegration: def test_full_chunk_creation_pipeline(self, mock_all_services): """Test the full chunk creation pipeline.""" from legal_templates_ingestion import LegalTemplatesIngestion - from github_crawler import ExtractedDocument + from crawler.github import ExtractedDocument from template_sources import SourceConfig, LicenseType ingestion = LegalTemplatesIngestion() diff --git a/klausur-service/backend/tests/test_merge_wrapped_rows.py b/klausur-service/backend/tests/test_merge_wrapped_rows.py index d90fcf7..0e7a4b0 100644 --- a/klausur-service/backend/tests/test_merge_wrapped_rows.py +++ b/klausur-service/backend/tests/test_merge_wrapped_rows.py @@ -5,7 +5,7 @@ import sys import os sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) -from cv_cell_grid import _merge_wrapped_rows +from ocr.cell_grid.cell_grid import _merge_wrapped_rows def _entry(row_index, english='', german='', example=''): diff --git a/klausur-service/backend/tests/test_ocr_labeling.py b/klausur-service/backend/tests/test_ocr_labeling.py index 5cbf019..156c2bd 100644 --- a/klausur-service/backend/tests/test_ocr_labeling.py +++ b/klausur-service/backend/tests/test_ocr_labeling.py @@ -124,8 +124,8 @@ class TestSessionCreation: @pytest.mark.asyncio async def test_create_session_success(self, mock_db_pool): """Test successful session creation.""" - from ocr_labeling_api import SessionCreate - from metrics_db import create_ocr_labeling_session + from ocr.labeling.api import SessionCreate + from metrics.db import create_ocr_labeling_session pool, conn = mock_db_pool conn.execute.return_value = None @@ -144,7 +144,7 @@ class TestSessionCreation: def test_session_create_model_validation(self): """Test SessionCreate model validation.""" - from ocr_labeling_api import SessionCreate + from ocr.labeling.api import SessionCreate # Valid session session = SessionCreate( @@ -158,7 +158,7 @@ class TestSessionCreation: def test_session_create_with_custom_model(self): """Test SessionCreate with custom OCR model.""" - from ocr_labeling_api import SessionCreate + from ocr.labeling.api import SessionCreate session = SessionCreate( name="TrOCR Session", @@ -174,7 +174,7 @@ class TestSessionListing: @pytest.mark.asyncio async def test_get_sessions_empty(self): """Test getting sessions when none exist.""" - from metrics_db import get_ocr_labeling_sessions + from metrics.db import get_ocr_labeling_sessions with patch('metrics_db.get_pool', new_callable=AsyncMock, return_value=None): sessions = await get_ocr_labeling_sessions() @@ -183,7 +183,7 @@ class TestSessionListing: @pytest.mark.asyncio async def test_get_session_not_found(self): """Test getting a non-existent session.""" - from metrics_db import get_ocr_labeling_session + from metrics.db import get_ocr_labeling_session with patch('metrics_db.get_pool', new_callable=AsyncMock, return_value=None): session = await get_ocr_labeling_session("non-existent-id") @@ -199,7 +199,7 @@ class TestImageUpload: def test_compute_image_hash(self): """Test image hash computation.""" - from ocr_labeling_api import compute_image_hash + from ocr.labeling.api import compute_image_hash image_data = b"\x89PNG fake image data" hash1 = compute_image_hash(image_data) @@ -211,7 +211,7 @@ class TestImageUpload: def test_compute_image_hash_different_data(self): """Test that different images produce different hashes.""" - from ocr_labeling_api import compute_image_hash + from ocr.labeling.api import compute_image_hash hash1 = compute_image_hash(b"image 1 data") hash2 = compute_image_hash(b"image 2 data") @@ -220,11 +220,11 @@ class TestImageUpload: def test_save_image_locally(self, tmp_path): """Test local image saving.""" - from ocr_labeling_api import save_image_locally, LOCAL_STORAGE_PATH + from ocr.labeling.api import save_image_locally, LOCAL_STORAGE_PATH # Temporarily override storage path with patch('ocr_labeling_api.LOCAL_STORAGE_PATH', str(tmp_path)): - from ocr_labeling_api import save_image_locally + from ocr.labeling.api import save_image_locally image_data = b"\x89PNG fake image data" filepath = save_image_locally( @@ -241,7 +241,7 @@ class TestImageUpload: def test_get_image_url_local(self): """Test URL generation for local images.""" - from ocr_labeling_api import get_image_url, LOCAL_STORAGE_PATH + from ocr.labeling.api import get_image_url, LOCAL_STORAGE_PATH local_path = f"{LOCAL_STORAGE_PATH}/session-123/item-456.png" url = get_image_url(local_path) @@ -250,7 +250,7 @@ class TestImageUpload: def test_get_image_url_minio(self): """Test URL for MinIO images (passthrough).""" - from ocr_labeling_api import get_image_url + from ocr.labeling.api import get_image_url minio_path = "ocr-labeling/session-123/item-456.png" url = get_image_url(minio_path) @@ -269,7 +269,7 @@ class TestConfirmLabel: @pytest.mark.asyncio async def test_confirm_label_success(self, mock_db_pool): """Test successful label confirmation.""" - from metrics_db import confirm_ocr_label + from metrics.db import confirm_ocr_label pool, conn = mock_db_pool conn.fetchrow.return_value = {"ocr_text": "Test text"} @@ -287,7 +287,7 @@ class TestConfirmLabel: def test_confirm_request_validation(self): """Test ConfirmRequest model validation.""" - from ocr_labeling_api import ConfirmRequest + from ocr.labeling.api import ConfirmRequest request = ConfirmRequest( item_id="item-456", @@ -303,7 +303,7 @@ class TestCorrectLabel: @pytest.mark.asyncio async def test_correct_label_success(self, mock_db_pool): """Test successful label correction.""" - from metrics_db import correct_ocr_label + from metrics.db import correct_ocr_label pool, conn = mock_db_pool conn.execute.return_value = None @@ -321,7 +321,7 @@ class TestCorrectLabel: def test_correct_request_validation(self): """Test CorrectRequest model validation.""" - from ocr_labeling_api import CorrectRequest + from ocr.labeling.api import CorrectRequest request = CorrectRequest( item_id="item-456", @@ -338,7 +338,7 @@ class TestSkipItem: @pytest.mark.asyncio async def test_skip_item_success(self, mock_db_pool): """Test successful item skip.""" - from metrics_db import skip_ocr_item + from metrics.db import skip_ocr_item pool, conn = mock_db_pool conn.execute.return_value = None @@ -363,7 +363,7 @@ class TestLabelingStats: @pytest.mark.asyncio async def test_get_stats_no_db(self): """Test stats when database is not available.""" - from metrics_db import get_ocr_labeling_stats + from metrics.db import get_ocr_labeling_stats with patch('metrics_db.get_pool', new_callable=AsyncMock, return_value=None): stats = await get_ocr_labeling_stats() @@ -371,7 +371,7 @@ class TestLabelingStats: def test_stats_response_model(self): """Test StatsResponse model structure.""" - from ocr_labeling_api import StatsResponse + from ocr.labeling.api import StatsResponse stats = StatsResponse( total_items=100, @@ -395,7 +395,7 @@ class TestTrainingExport: def test_export_request_validation(self): """Test ExportRequest model validation.""" - from ocr_labeling_api import ExportRequest + from ocr.labeling.api import ExportRequest # Default format is generic request = ExportRequest() @@ -412,7 +412,7 @@ class TestTrainingExport: @pytest.mark.asyncio async def test_export_training_samples(self, mock_db_pool): """Test training sample export from database.""" - from metrics_db import export_training_samples + from metrics.db import export_training_samples pool, conn = mock_db_pool conn.fetch.return_value = [ @@ -495,7 +495,7 @@ class TestOCRProcessing: @pytest.mark.asyncio async def test_run_ocr_on_image_no_service(self): """Test OCR when service is not available.""" - from ocr_labeling_api import run_ocr_on_image + from ocr.labeling.api import run_ocr_on_image with patch('ocr_labeling_api.VISION_OCR_AVAILABLE', False), \ patch('ocr_labeling_api.PADDLEOCR_AVAILABLE', False), \ @@ -512,7 +512,7 @@ class TestOCRProcessing: @pytest.mark.asyncio async def test_run_ocr_on_image_success(self, mock_vision_ocr): """Test successful OCR processing.""" - from ocr_labeling_api import run_ocr_on_image + from ocr.labeling.api import run_ocr_on_image text, confidence = await run_ocr_on_image( image_data=b"fake image", @@ -533,7 +533,7 @@ class TestOCRModelDispatcher: @pytest.mark.asyncio async def test_dispatcher_vision_model_default(self, mock_vision_ocr): """Test dispatcher uses Vision OCR by default.""" - from ocr_labeling_api import run_ocr_on_image + from ocr.labeling.api import run_ocr_on_image text, confidence = await run_ocr_on_image( image_data=b"fake image", @@ -547,7 +547,7 @@ class TestOCRModelDispatcher: @pytest.mark.asyncio async def test_dispatcher_paddleocr_model(self): """Test dispatcher routes to PaddleOCR.""" - from ocr_labeling_api import run_ocr_on_image + from ocr.labeling.api import run_ocr_on_image # Mock PaddleOCR mock_regions = [] @@ -567,7 +567,7 @@ class TestOCRModelDispatcher: @pytest.mark.asyncio async def test_dispatcher_paddleocr_fallback_to_vision(self, mock_vision_ocr): """Test PaddleOCR falls back to Vision OCR when unavailable.""" - from ocr_labeling_api import run_ocr_on_image + from ocr.labeling.api import run_ocr_on_image with patch('ocr_labeling_api.PADDLEOCR_AVAILABLE', False): text, confidence = await run_ocr_on_image( @@ -583,7 +583,7 @@ class TestOCRModelDispatcher: @pytest.mark.asyncio async def test_dispatcher_trocr_model(self): """Test dispatcher routes to TrOCR.""" - from ocr_labeling_api import run_ocr_on_image + from ocr.labeling.api import run_ocr_on_image async def mock_trocr(image_data): return "TrOCR erkannter Text", 0.85 @@ -603,7 +603,7 @@ class TestOCRModelDispatcher: @pytest.mark.asyncio async def test_dispatcher_donut_model(self): """Test dispatcher routes to Donut.""" - from ocr_labeling_api import run_ocr_on_image + from ocr.labeling.api import run_ocr_on_image async def mock_donut(image_data): return "Donut erkannter Text", 0.80 @@ -623,7 +623,7 @@ class TestOCRModelDispatcher: @pytest.mark.asyncio async def test_dispatcher_unknown_model_uses_vision(self, mock_vision_ocr): """Test dispatcher uses Vision OCR for unknown models.""" - from ocr_labeling_api import run_ocr_on_image + from ocr.labeling.api import run_ocr_on_image text, confidence = await run_ocr_on_image( image_data=b"fake image", @@ -641,7 +641,7 @@ class TestOCRModelTypes: def test_session_with_paddleocr_model(self): """Test session creation with PaddleOCR model.""" - from ocr_labeling_api import SessionCreate + from ocr.labeling.api import SessionCreate session = SessionCreate( name="PaddleOCR Session", @@ -653,7 +653,7 @@ class TestOCRModelTypes: def test_session_with_donut_model(self): """Test session creation with Donut model.""" - from ocr_labeling_api import SessionCreate + from ocr.labeling.api import SessionCreate session = SessionCreate( name="Donut Session", @@ -665,7 +665,7 @@ class TestOCRModelTypes: def test_session_with_trocr_model(self): """Test session creation with TrOCR model.""" - from ocr_labeling_api import SessionCreate + from ocr.labeling.api import SessionCreate session = SessionCreate( name="TrOCR Session", @@ -685,7 +685,7 @@ class TestResponseModels: def test_session_response_model(self): """Test SessionResponse model.""" - from ocr_labeling_api import SessionResponse + from ocr.labeling.api import SessionResponse session = SessionResponse( id="session-123", @@ -706,7 +706,7 @@ class TestResponseModels: def test_item_response_model(self): """Test ItemResponse model.""" - from ocr_labeling_api import ItemResponse + from ocr.labeling.api import ItemResponse item = ItemResponse( id="item-456", @@ -735,7 +735,7 @@ class TestDeduplication: def test_hash_based_deduplication(self): """Test that same images produce same hash for deduplication.""" - from ocr_labeling_api import compute_image_hash + from ocr.labeling.api import compute_image_hash # Same content should be detected as duplicate image1 = b"\x89PNG\x0d\x0a\x1a\x0a test image content" @@ -748,7 +748,7 @@ class TestDeduplication: def test_unique_images_different_hash(self): """Test that different images produce different hashes.""" - from ocr_labeling_api import compute_image_hash + from ocr.labeling.api import compute_image_hash image1 = b"\x89PNG unique content 1" image2 = b"\x89PNG unique content 2" diff --git a/klausur-service/backend/tests/test_paddle_kombi.py b/klausur-service/backend/tests/test_paddle_kombi.py index a68aabc..ce15db5 100644 --- a/klausur-service/backend/tests/test_paddle_kombi.py +++ b/klausur-service/backend/tests/test_paddle_kombi.py @@ -13,7 +13,7 @@ import os sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..")) -from ocr_pipeline_api import ( +from ocr.pipeline.api import ( _split_paddle_multi_words, _group_words_into_rows, _merge_row_sequences, diff --git a/klausur-service/backend/tests/test_page_crop.py b/klausur-service/backend/tests/test_page_crop.py index e1724a2..6e027c6 100644 --- a/klausur-service/backend/tests/test_page_crop.py +++ b/klausur-service/backend/tests/test_page_crop.py @@ -13,7 +13,7 @@ Tests cover: import numpy as np import pytest -from page_crop import ( +from ocr.pipeline.page_crop import ( detect_and_crop_page, detect_page_splits, _detect_format, diff --git a/klausur-service/backend/tests/test_rag_admin.py b/klausur-service/backend/tests/test_rag_admin.py index dcc1ab0..8d9edaf 100644 --- a/klausur-service/backend/tests/test_rag_admin.py +++ b/klausur-service/backend/tests/test_rag_admin.py @@ -56,7 +56,7 @@ class TestIngestionStatus: def test_status_not_running(self): """Test status when no ingestion is running.""" - from admin_api import _ingestion_status + from admin.api import _ingestion_status # Reset status _ingestion_status["running"] = False @@ -67,7 +67,7 @@ class TestIngestionStatus: def test_status_running(self): """Test status when ingestion is running.""" - from admin_api import _ingestion_status + from admin.api import _ingestion_status _ingestion_status["running"] = True _ingestion_status["last_run"] = datetime.now().isoformat() @@ -81,7 +81,7 @@ class TestUploadAPI: def test_upload_record_creation(self): """Test that upload records are created correctly.""" - from admin_api import _upload_history + from admin.api import _upload_history # Clear history _upload_history.clear() @@ -102,7 +102,7 @@ class TestUploadAPI: def test_upload_history_limit(self): """Test that upload history is limited to 100 entries.""" - from admin_api import _upload_history + from admin.api import _upload_history _upload_history.clear() @@ -187,7 +187,7 @@ class TestMetricsDB: @pytest.mark.asyncio async def test_store_feedback_no_pool(self): """Test feedback storage when DB is not available.""" - from metrics_db import store_feedback + from metrics.db import store_feedback with patch('metrics_db.get_pool', new_callable=AsyncMock, return_value=None): result = await store_feedback( @@ -199,7 +199,7 @@ class TestMetricsDB: @pytest.mark.asyncio async def test_calculate_metrics_no_pool(self): """Test metrics calculation when DB is not available.""" - from metrics_db import calculate_metrics + from metrics.db import calculate_metrics with patch('metrics_db.get_pool', new_callable=AsyncMock, return_value=None): metrics = await calculate_metrics() @@ -214,7 +214,7 @@ class TestMetricsDB: ] # Read the metrics_db module to check table names - from metrics_db import init_metrics_tables + from metrics.db import init_metrics_tables # The function should create these tables assert callable(init_metrics_tables) @@ -231,8 +231,8 @@ class TestRAGIntegration: @pytest.mark.asyncio async def test_nibis_search(self): """Test NiBiS semantic search.""" - from admin_api import search_nibis - from admin_api import NiBiSSearchRequest + from admin.api import search_nibis + from admin.api import NiBiSSearchRequest request = NiBiSSearchRequest( query="Gedichtanalyse Expressionismus", @@ -265,7 +265,7 @@ class TestRAGIntegration: @pytest.mark.asyncio async def test_metrics_storage(self): """Test metrics storage in PostgreSQL.""" - from metrics_db import store_feedback, calculate_metrics + from metrics.db import store_feedback, calculate_metrics # This would require PostgreSQL running # stored = await store_feedback( @@ -330,7 +330,7 @@ class TestEmbeddings: def test_vector_dimensions(self): """Test that vector dimensions are configured correctly.""" - from eh_pipeline import get_vector_size, EMBEDDING_BACKEND + from korrektur.eh_pipeline import get_vector_size, EMBEDDING_BACKEND size = get_vector_size() @@ -341,7 +341,7 @@ class TestEmbeddings: def test_chunking_config(self): """Test chunking configuration.""" - from eh_pipeline import CHUNK_SIZE, CHUNK_OVERLAP + from korrektur.eh_pipeline import CHUNK_SIZE, CHUNK_OVERLAP assert CHUNK_SIZE > 0 assert CHUNK_OVERLAP >= 0 diff --git a/klausur-service/backend/tests/test_rbac.py b/klausur-service/backend/tests/test_rbac.py index 7d2f09b..69d8fed 100644 --- a/klausur-service/backend/tests/test_rbac.py +++ b/klausur-service/backend/tests/test_rbac.py @@ -30,7 +30,7 @@ from datetime import datetime, timezone, timedelta import sys sys.path.insert(0, '..') -from rbac import ( +from compliance.rbac import ( Role, Action, ResourceType, diff --git a/klausur-service/backend/tests/test_smart_spell.py b/klausur-service/backend/tests/test_smart_spell.py index deae241..c3ce13a 100644 --- a/klausur-service/backend/tests/test_smart_spell.py +++ b/klausur-service/backend/tests/test_smart_spell.py @@ -4,7 +4,7 @@ import pytest import sys, os sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..")) -from smart_spell import SmartSpellChecker, CorrectionResult +from ocr.spell.smart_spell import SmartSpellChecker, CorrectionResult @pytest.fixture diff --git a/klausur-service/backend/tests/test_unified_grid.py b/klausur-service/backend/tests/test_unified_grid.py index 9e9375d..da51571 100644 --- a/klausur-service/backend/tests/test_unified_grid.py +++ b/klausur-service/backend/tests/test_unified_grid.py @@ -4,7 +4,7 @@ import pytest import sys, os sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..")) -from unified_grid import ( +from grid.unified import ( _compute_dominant_row_height, _classify_boxes, build_unified_grid, diff --git a/klausur-service/backend/tests/test_vocab_worksheet.py b/klausur-service/backend/tests/test_vocab_worksheet.py index 6889d7d..495ef2c 100644 --- a/klausur-service/backend/tests/test_vocab_worksheet.py +++ b/klausur-service/backend/tests/test_vocab_worksheet.py @@ -37,7 +37,7 @@ from fastapi.testclient import TestClient # Import the main app and vocab-worksheet components sys.path.insert(0, '..') from main import app -from vocab_worksheet_api import ( +from vocab.worksheet.api import ( _sessions, _worksheets, SessionStatus, diff --git a/klausur-service/backend/tests/test_word_split.py b/klausur-service/backend/tests/test_word_split.py index 628a3f5..459af6e 100644 --- a/klausur-service/backend/tests/test_word_split.py +++ b/klausur-service/backend/tests/test_word_split.py @@ -7,7 +7,7 @@ uses dynamic programming + dictionary lookup to find valid splits. import pytest -from cv_review import _try_split_merged_word, _spell_dict_knows, _SPELL_AVAILABLE +from ocr.review.review import _try_split_merged_word, _spell_dict_knows, _SPELL_AVAILABLE pytestmark = pytest.mark.skipif( not _SPELL_AVAILABLE, diff --git a/klausur-service/backend/tests/test_worksheet_editor.py b/klausur-service/backend/tests/test_worksheet_editor.py index 46003aa..b7f6bcf 100644 --- a/klausur-service/backend/tests/test_worksheet_editor.py +++ b/klausur-service/backend/tests/test_worksheet_editor.py @@ -35,7 +35,7 @@ from fastapi.testclient import TestClient # Import the main app and worksheet-editor components sys.path.insert(0, '..') from main import app -from worksheet_editor_api import ( +from worksheet.editor_api import ( worksheets_db, AIImageStyle, WorksheetStatus, diff --git a/klausur-service/backend/training_api.py b/klausur-service/backend/training_api.py deleted file mode 100644 index 861158a..0000000 --- a/klausur-service/backend/training_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to training/api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("training.api") diff --git a/klausur-service/backend/training_export_service.py b/klausur-service/backend/training_export_service.py deleted file mode 100644 index 3945d78..0000000 --- a/klausur-service/backend/training_export_service.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to training/export_service.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("training.export_service") diff --git a/klausur-service/backend/training_models.py b/klausur-service/backend/training_models.py deleted file mode 100644 index 56d2c4b..0000000 --- a/klausur-service/backend/training_models.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to training/models.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("training.models") diff --git a/klausur-service/backend/training_routes.py b/klausur-service/backend/training_routes.py deleted file mode 100644 index f21b798..0000000 --- a/klausur-service/backend/training_routes.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to training/routes.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("training.routes") diff --git a/klausur-service/backend/training_simulation.py b/klausur-service/backend/training_simulation.py deleted file mode 100644 index 5290c8e..0000000 --- a/klausur-service/backend/training_simulation.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to training/simulation.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("training.simulation") diff --git a/klausur-service/backend/trocr_api.py b/klausur-service/backend/trocr_api.py deleted file mode 100644 index 25d1f01..0000000 --- a/klausur-service/backend/trocr_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to training/trocr_api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("training.trocr_api") diff --git a/klausur-service/backend/unified_grid.py b/klausur-service/backend/unified_grid.py deleted file mode 100644 index e0aa370..0000000 --- a/klausur-service/backend/unified_grid.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to grid/unified.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("grid.unified") diff --git a/klausur-service/backend/upload_api.py b/klausur-service/backend/upload_api.py deleted file mode 100644 index 79c5359..0000000 --- a/klausur-service/backend/upload_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to upload/api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("upload.api") diff --git a/klausur-service/backend/upload_api_chunked.py b/klausur-service/backend/upload_api_chunked.py deleted file mode 100644 index 7478b87..0000000 --- a/klausur-service/backend/upload_api_chunked.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to upload/chunked.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("upload.chunked") diff --git a/klausur-service/backend/upload_api_mobile.py b/klausur-service/backend/upload_api_mobile.py deleted file mode 100644 index 10fd87e..0000000 --- a/klausur-service/backend/upload_api_mobile.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to upload/mobile.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("upload.mobile") diff --git a/klausur-service/backend/vision_ocr_fusion.py b/klausur-service/backend/vision_ocr_fusion.py deleted file mode 100644 index dc175fb..0000000 --- a/klausur-service/backend/vision_ocr_fusion.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to ocr/pipeline/vision_fusion.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("ocr.pipeline.vision_fusion") diff --git a/klausur-service/backend/vocab_learn_bridge.py b/klausur-service/backend/vocab_learn_bridge.py deleted file mode 100644 index 112a5e5..0000000 --- a/klausur-service/backend/vocab_learn_bridge.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to vocab/learn_bridge.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("vocab.learn_bridge") diff --git a/klausur-service/backend/vocab_session_store.py b/klausur-service/backend/vocab_session_store.py deleted file mode 100644 index 131a78a..0000000 --- a/klausur-service/backend/vocab_session_store.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to vocab/session_store.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("vocab.session_store") diff --git a/klausur-service/backend/vocab_worksheet_analysis_api.py b/klausur-service/backend/vocab_worksheet_analysis_api.py deleted file mode 100644 index 1e48f7a..0000000 --- a/klausur-service/backend/vocab_worksheet_analysis_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to vocab/worksheet/analysis_api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("vocab.worksheet.analysis_api") diff --git a/klausur-service/backend/vocab_worksheet_api.py b/klausur-service/backend/vocab_worksheet_api.py deleted file mode 100644 index e004882..0000000 --- a/klausur-service/backend/vocab_worksheet_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to vocab/worksheet/api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("vocab.worksheet.api") diff --git a/klausur-service/backend/vocab_worksheet_compare_api.py b/klausur-service/backend/vocab_worksheet_compare_api.py deleted file mode 100644 index 74adda7..0000000 --- a/klausur-service/backend/vocab_worksheet_compare_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to vocab/worksheet/compare_api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("vocab.worksheet.compare_api") diff --git a/klausur-service/backend/vocab_worksheet_extraction.py b/klausur-service/backend/vocab_worksheet_extraction.py deleted file mode 100644 index 061476c..0000000 --- a/klausur-service/backend/vocab_worksheet_extraction.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to vocab/worksheet/extraction.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("vocab.worksheet.extraction") diff --git a/klausur-service/backend/vocab_worksheet_generation.py b/klausur-service/backend/vocab_worksheet_generation.py deleted file mode 100644 index 95c8159..0000000 --- a/klausur-service/backend/vocab_worksheet_generation.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to vocab/worksheet/generation.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("vocab.worksheet.generation") diff --git a/klausur-service/backend/vocab_worksheet_models.py b/klausur-service/backend/vocab_worksheet_models.py deleted file mode 100644 index f201b00..0000000 --- a/klausur-service/backend/vocab_worksheet_models.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to vocab/worksheet/models.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("vocab.worksheet.models") diff --git a/klausur-service/backend/vocab_worksheet_ocr.py b/klausur-service/backend/vocab_worksheet_ocr.py deleted file mode 100644 index 9463b5e..0000000 --- a/klausur-service/backend/vocab_worksheet_ocr.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to vocab/worksheet/ocr.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("vocab.worksheet.ocr") diff --git a/klausur-service/backend/vocab_worksheet_upload_api.py b/klausur-service/backend/vocab_worksheet_upload_api.py deleted file mode 100644 index be9d342..0000000 --- a/klausur-service/backend/vocab_worksheet_upload_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to vocab/worksheet/upload_api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("vocab.worksheet.upload_api") diff --git a/klausur-service/backend/worksheet_cleanup_api.py b/klausur-service/backend/worksheet_cleanup_api.py deleted file mode 100644 index 1255703..0000000 --- a/klausur-service/backend/worksheet_cleanup_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to worksheet/cleanup_api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("worksheet.cleanup_api") diff --git a/klausur-service/backend/worksheet_editor_ai.py b/klausur-service/backend/worksheet_editor_ai.py deleted file mode 100644 index 868af28..0000000 --- a/klausur-service/backend/worksheet_editor_ai.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to worksheet/editor_ai.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("worksheet.editor_ai") diff --git a/klausur-service/backend/worksheet_editor_api.py b/klausur-service/backend/worksheet_editor_api.py deleted file mode 100644 index d20d408..0000000 --- a/klausur-service/backend/worksheet_editor_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to worksheet/editor_api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("worksheet.editor_api") diff --git a/klausur-service/backend/worksheet_editor_models.py b/klausur-service/backend/worksheet_editor_models.py deleted file mode 100644 index a473a13..0000000 --- a/klausur-service/backend/worksheet_editor_models.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to worksheet/editor_models.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("worksheet.editor_models") diff --git a/klausur-service/backend/worksheet_editor_reconstruct.py b/klausur-service/backend/worksheet_editor_reconstruct.py deleted file mode 100644 index eaad001..0000000 --- a/klausur-service/backend/worksheet_editor_reconstruct.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to worksheet/editor_reconstruct.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("worksheet.editor_reconstruct") diff --git a/klausur-service/backend/zeugnis_api.py b/klausur-service/backend/zeugnis_api.py deleted file mode 100644 index fa86c51..0000000 --- a/klausur-service/backend/zeugnis_api.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to zeugnis/api.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("zeugnis.api") diff --git a/klausur-service/backend/zeugnis_api_docs.py b/klausur-service/backend/zeugnis_api_docs.py deleted file mode 100644 index 56ee121..0000000 --- a/klausur-service/backend/zeugnis_api_docs.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to zeugnis/api_docs.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("zeugnis.api_docs") diff --git a/klausur-service/backend/zeugnis_api_sources.py b/klausur-service/backend/zeugnis_api_sources.py deleted file mode 100644 index 9b27423..0000000 --- a/klausur-service/backend/zeugnis_api_sources.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to zeugnis/api_sources.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("zeugnis.api_sources") diff --git a/klausur-service/backend/zeugnis_control.py b/klausur-service/backend/zeugnis_control.py deleted file mode 100644 index bee4c09..0000000 --- a/klausur-service/backend/zeugnis_control.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to zeugnis/control.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("zeugnis.control") diff --git a/klausur-service/backend/zeugnis_crawler.py b/klausur-service/backend/zeugnis_crawler.py deleted file mode 100644 index b1bfce4..0000000 --- a/klausur-service/backend/zeugnis_crawler.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to zeugnis/crawler.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("zeugnis.crawler") diff --git a/klausur-service/backend/zeugnis_models.py b/klausur-service/backend/zeugnis_models.py deleted file mode 100644 index 5f9533e..0000000 --- a/klausur-service/backend/zeugnis_models.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to zeugnis/models.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("zeugnis.models") diff --git a/klausur-service/backend/zeugnis_seed_data.py b/klausur-service/backend/zeugnis_seed_data.py deleted file mode 100644 index dade519..0000000 --- a/klausur-service/backend/zeugnis_seed_data.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to zeugnis/seed_data.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("zeugnis.seed_data") diff --git a/klausur-service/backend/zeugnis_storage.py b/klausur-service/backend/zeugnis_storage.py deleted file mode 100644 index 2953ab7..0000000 --- a/klausur-service/backend/zeugnis_storage.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to zeugnis/storage.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("zeugnis.storage") diff --git a/klausur-service/backend/zeugnis_text.py b/klausur-service/backend/zeugnis_text.py deleted file mode 100644 index e2bffb4..0000000 --- a/klausur-service/backend/zeugnis_text.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to zeugnis/text.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("zeugnis.text") diff --git a/klausur-service/backend/zeugnis_worker.py b/klausur-service/backend/zeugnis_worker.py deleted file mode 100644 index 2b6c668..0000000 --- a/klausur-service/backend/zeugnis_worker.py +++ /dev/null @@ -1,4 +0,0 @@ -# Backward-compat shim -- module moved to zeugnis/worker.py -import importlib as _importlib -import sys as _sys -_sys.modules[__name__] = _importlib.import_module("zeugnis.worker")