Factorizer/Cluster ERP WikiCluster ERP English
Ana sayfa / Platform

Referans

Hatalar ve istisnalar

Cluster ERP sunucusundaki hata sınıfları, 213 hata kodu sabiti, JSON hata gövdesi, izleme kimlikleri ve istisnalardan HTTP durum kodlarına eşleme.

Bu sayfa Cluster ERP'nin hata sınıflarını ve kodlarını ve sunucunun istisnaları HTTP yanıtlarına nasıl çevirdiğini listeler. core/errors.py, core/exceptions.py ve server/error_handler.py dosyalarını kapsar. Kodların istemcinin gördüğü biçimde nedenleriyle tam listesi API hataları sayfasındadır.

Kapsam ve kaynak

  • Tanımlandığı yer: src/cluster_erp/core/errors.py (AppError, kod sabitleri, fabrikalar), src/cluster_erp/core/exceptions.py (platform istisnaları), src/cluster_erp/server/error_handler.py (install_error_handlers)
  • Sayı: core/errors.py içinde NAME = "NAME" biçiminde 213 modül düzeyi dizgi sabiti (grep -c -E '^[A-Z_0-9]+ = "' ile sayıldı), 23 yorumlu grupta; 6 fabrika işlevi; core/exceptions.py içinde 7 istisna sınıfı (grep -c "^class" ile sayıldı)

Hata gövdesi

Ele alınan her hata _build_body ile kurulan bir JSON gövdesi döndürür (src/cluster_erp/server/error_handler.py:33-46):

{
 "error": {
 "code": "<CODE>",
 "message": "<developer message>",
 "trace_id": "<YYMMDD-NNN>",
 "details": {}
 }
}

details yalnızca boş değilse bulunur. Hata ayıklama kipinde ele alınmayan istisna işleyicisi debug_message ve exception_type ekler, eşlenmiş işleyiciler debug_message ekler (src/cluster_erp/server/error_handler.py:305-308, src/cluster_erp/server/error_handler.py:345-347). debug_message en fazla sürücü mesajının ilk satırını, 300 karaktere kısaltılmış olarak taşır; SQL metnini asla taşımaz (src/cluster_erp/server/error_handler.py:99-107).

İzleme kimlikleri

_next_trace_id, trace_sequence tablosunda günlük bir sayacı artırır ve YYMMDD-NNN döndürür. Veritabanına ulaşılamazsa monoton bir saatten alınan sekiz basamakla YYMMDD- döndürür (src/cluster_erp/server/error_handler.py:49-70). Tablo feefe25508db_add_trace_sequence_table.py göçünden gelir. İşleyiciler izleme kimliğini ve hata verisini request.state üzerinde saklar; etkinlik günlüğü ara katmanı bunları hata günlüğüne yazar (src/cluster_erp/server/error_handler.py:73-93, src/cluster_erp/server/middleware.py:638-659).

AppError

AppError(code, message, *, status_code=400, details=None), servislerin ve rotaların yükselttiği istisnadır (src/cluster_erp/core/errors.py:6-30). Kod makine tarafından okunur, istemci onu yerelleştirilmiş bir metne eşler; mesaj İngilizce bir geliştirici dizgisidir (src/cluster_erp/core/errors.py:7-16).

Kod grupları

Grup yorumu Kod sayısı Satırlar Örnekler
Auth 12 src/cluster_erp/core/errors.py:33-48 AUTH_TOKEN_EXPIRED, AUTH_PERMISSION_DENIED
Resource CRUD 3 src/cluster_erp/core/errors.py:50-53 RESOURCE_NOT_FOUND, RESOURCE_CONFLICT, RESOURCE_PROTECTED
Validation 7 src/cluster_erp/core/errors.py:55-75 VALIDATION_ERROR, FIELD_VALUE_INVALID
Business logic 5 src/cluster_erp/core/errors.py:77-82 UNIT_CONVERSION_FAILED, APPROVAL_INVALID_STATE
Currency 1 src/cluster_erp/core/errors.py:84-85 TCMB_SYNC_FAILED
CRM 14 src/cluster_erp/core/errors.py:87-104 RFQ_INVALID_STATUS, PRFQ_AWARD_INVALID
Quotations 9 src/cluster_erp/core/errors.py:106-117 QUOTE_INVALID_STATUS, QUOTE_INCOMPLETE
Sales Orders 9 src/cluster_erp/core/errors.py:119-129 ORDER_INVALID_STATUS, PDF_RENDERER_UNAVAILABLE
Projects 8 src/cluster_erp/core/errors.py:131-139 PROJECT_INVALID_STATUS, PROJECT_ACTIVITY_CYCLE
BOM 8 src/cluster_erp/core/errors.py:141-151 BOM_INVALID_STATUS, BOM_MAX_DEPTH_EXCEEDED
Design and Engineering 6 src/cluster_erp/core/errors.py:153-159 DESIGN_INVALID_STATUS, ECN_INVALID_STATUS
Products and Materials 13 src/cluster_erp/core/errors.py:161-179 PRODUCT_NOT_SELLABLE, PRODUCT_VERSION_MODEL_MISMATCH
Inventory 21 src/cluster_erp/core/errors.py:181-202 INVENTORY_INSUFFICIENT_STOCK, INVENTORY_NEGATIVE_STOCK
Production 32 src/cluster_erp/core/errors.py:204-264 dosyaya bakın
Nesting 14 src/cluster_erp/core/errors.py:266-280 dosyaya bakın
Costing 17 src/cluster_erp/core/errors.py:282-299 dosyaya bakın
Procurement 20 src/cluster_erp/core/errors.py:301-321 SUBSTITUTION_GROUP_SINGLE_MEMBER, CRITICAL_MATERIAL_ALREADY_EXISTS
Concurrency 1 src/cluster_erp/core/errors.py:323-324 CONCURRENCY_VERSION_CONFLICT
External services 3 src/cluster_erp/core/errors.py:326-329 SMTP_NOT_CONFIGURED, SMTP_ERROR, FILE_NOT_FOUND_ON_DISK
Database 5 src/cluster_erp/core/errors.py:331-340 DB_INTEGRITY_ERROR, DB_UNIQUE_VIOLATION
Serialization 1 src/cluster_erp/core/errors.py:342-343 SERIALIZATION_ERROR
Runtime 3 src/cluster_erp/core/errors.py:345-348 TYPE_ERROR, VALUE_ERROR, TIMEOUT_ERROR
Server 1 src/cluster_erp/core/errors.py:350-351 INTERNAL_ERROR

Bazı modüller kendi dosyalarında ek kodlar tanımlar; örneğin CURRENCY_UNKNOWN (src/cluster_erp/core/currencies.py:27) ve UPLOAD_TYPE_REFUSED (src/cluster_erp/core/upload_policy.py:19). Bunlar yukarıda sayılmamıştır.

Fabrikalar

İşlev Kod HTTP durumu Kaynak
not_found(resource, resource_id=None) RESOURCE_NOT_FOUND 404 src/cluster_erp/core/errors.py:357-367
conflict(resource, field, value) RESOURCE_CONFLICT 409 src/cluster_erp/core/errors.py:370-376
protected(resource, reason="") RESOURCE_PROTECTED 400 src/cluster_erp/core/errors.py:379-385
permission_denied(permission) AUTH_PERMISSION_DENIED 403 src/cluster_erp/core/errors.py:388-394
privilege_escalation(missing_codes) AUTH_PRIVILEGE_ESCALATION 403 src/cluster_erp/core/errors.py:397-408
version_conflict(resource, expected, actual) ve check_version(...) CONCURRENCY_VERSION_CONFLICT 409 src/cluster_erp/core/errors.py:411-430

İstisna işleyicileri

install_error_handlers(app, debug) aşağıdaki işleyicileri kaydeder (src/cluster_erp/server/error_handler.py:200-398).

İstisna Kod HTTP durumu Kaynak
AppError hatanın kendi kodu hatanın kendi durumu src/cluster_erp/server/error_handler.py:203-224
RequestValidationError VALIDATION_ERROR; details.fields içinde field ve reason listelenir 422 src/cluster_erp/server/error_handler.py:226-246
HTTPException HTTP_<status> ya da sözlük ayrıntısındaki code istisnanın durumu src/cluster_erp/server/error_handler.py:248-270
SQLAlchemy DisconnectionError DB_CONNECTION_ERROR 503 src/cluster_erp/server/error_handler.py:128
SQLAlchemy TimeoutError (havuz) DB_TIMEOUT 503 src/cluster_erp/server/error_handler.py:129-131
SQLAlchemy IntegrityError bir benzersizlik kısıtı adlandırılmışsa details.constraint ile DB_UNIQUE_VIOLATION, değilse DB_INTEGRITY_ERROR 409 src/cluster_erp/server/error_handler.py:132, src/cluster_erp/server/error_handler.py:352-398
SQLAlchemy DataError VALIDATION_ERROR 422 src/cluster_erp/server/error_handler.py:133-135
SQLAlchemy OperationalError DB_OPERATIONAL_ERROR 500 src/cluster_erp/server/error_handler.py:136
decimal.InvalidOperation VALIDATION_ERROR 422 src/cluster_erp/server/error_handler.py:142-148
Pydantic ValidationError SERIALIZATION_ERROR 500 src/cluster_erp/server/error_handler.py:150-155
TimeoutError TIMEOUT_ERROR 504 src/cluster_erp/server/error_handler.py:161
TypeError TYPE_ERROR 500 src/cluster_erp/server/error_handler.py:162
ValueError VALUE_ERROR 500 src/cluster_erp/server/error_handler.py:163
diğer her Exception INTERNAL_ERROR 500 src/cluster_erp/server/error_handler.py:272-310

Ele alınmayan istisna işleyicisinin 503 yanıtı Retry-After: 2 başlığını taşır (src/cluster_erp/server/error_handler.py:309). Her eşlenmiş tür kendi işleyicisini alır; böylece onu sunucu hatası ara katmanı yerine Starlette'in istisna ara katmanı ele alır (src/cluster_erp/server/error_handler.py:312-318, src/cluster_erp/server/error_handler.py:394-398).

Platform istisnaları

core/exceptions.py içindeki bu sınıfları modül kaydı ve EventBus yükseltir. HTTP kodlarına eşlenmezler.

Sınıf Üst sınıf Ne zaman yükselir Kaynak
ClusterERPError Exception Temel sınıf src/cluster_erp/core/exceptions.py:4-5
ModuleError ClusterERPError Modül hataları için temel sınıf src/cluster_erp/core/exceptions.py:8-9
ModuleLoadError ModuleError Bir modül içe aktarılamadığında veya Module sınıfı olmadığında src/cluster_erp/core/exceptions.py:12-16
ModuleNotRegisteredError ModuleError registry.get bilinmeyen bir ad aldığında src/cluster_erp/core/exceptions.py:19-22
EventBusError ClusterERPError Veri yolu hataları için temel sınıf src/cluster_erp/core/exceptions.py:25-26
QueryHandlerNotFoundError EventBusError Bir sorgunun işleyicisi olmadığında src/cluster_erp/core/exceptions.py:29-32
DuplicateQueryHandlerError EventBusError Bir sorgu türü için ikinci işleyici kaydedildiğinde src/cluster_erp/core/exceptions.py:35-38

Kısıtlar ve doğrulama

  • max_request_body_bytes değerinden büyük bir istek gövdesi, herhangi bir işleyici çalışmadan önce bir ara katman tarafından HTTP 413 ve REQUEST_TOO_LARGE koduyla reddedilir (src/cluster_erp/server/app.py:1396-1410). Bu kod core/errors.py içindeki sabitlerden biri değildir.
  • RESOURCE_PROTECTED hatası 403 değil, HTTP 400 kullanır (src/cluster_erp/core/errors.py:379-385).

Tanıtılan terimler

Terim Kod tanımlayıcısı Tanım Türkçe terim Kaynak
application error AppError Makine tarafından okunan bir kod, mesaj, durum ve ayrıntı taşıyan istisna. uygulama hatası src/cluster_erp/core/errors.py:6
trace id trace_id Bir hata yanıtını hata günlüğü satırına bağlayan günlük sıra kimliği. izleme kimliği src/cluster_erp/server/error_handler.py:58-70

İlgili sayfalar


92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.

Doğrulanan commit 92f8051 · 2026-11-13