Coverage for src / mysingle / dsl / errors.py: 0%
25 statements
« prev ^ index » next coverage.py v7.12.0, created at 2025-12-02 00:58 +0900
« prev ^ index » next coverage.py v7.12.0, created at 2025-12-02 00:58 +0900
1"""DSL 관련 사용자 정의 예외"""
4class DSLError(Exception):
5 """DSL 관련 기본 예외"""
7 pass
10class DSLCompilationError(DSLError):
11 """DSL 코드 컴파일 실패"""
13 pass
16class DSLValidationError(DSLError):
17 """DSL 코드 검증 실패 (보안, 타입 등)"""
19 pass
22class DSLSecurityError(DSLValidationError):
23 """보안 위반 (금지된 import, builtin 등)"""
25 pass
28class DSLExecutionError(DSLError):
29 """DSL 코드 실행 중 에러"""
31 pass
34class DSLTimeoutError(DSLExecutionError):
35 """실행 시간 초과"""
37 pass
40class DSLMemoryError(DSLExecutionError):
41 """메모리 제한 초과"""
43 pass
46class SecurityViolation:
47 """보안 위반 사항"""
49 def __init__(
50 self,
51 level: str,
52 message: str,
53 line: int | None = None,
54 column: int | None = None,
55 ):
56 self.level = level # ERROR, WARNING, INFO
57 self.message = message
58 self.line = line
59 self.column = column
61 def __repr__(self) -> str:
62 location = f" (line {self.line})" if self.line else ""
63 return f"[{self.level}]{location} {self.message}"
65 def to_dict(self) -> dict:
66 """딕셔너리로 변환"""
67 return {
68 "level": self.level,
69 "message": self.message,
70 "line": self.line,
71 "column": self.column,
72 }