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

1"""DSL 관련 사용자 정의 예외""" 

2 

3 

4class DSLError(Exception): 

5 """DSL 관련 기본 예외""" 

6 

7 pass 

8 

9 

10class DSLCompilationError(DSLError): 

11 """DSL 코드 컴파일 실패""" 

12 

13 pass 

14 

15 

16class DSLValidationError(DSLError): 

17 """DSL 코드 검증 실패 (보안, 타입 등)""" 

18 

19 pass 

20 

21 

22class DSLSecurityError(DSLValidationError): 

23 """보안 위반 (금지된 import, builtin 등)""" 

24 

25 pass 

26 

27 

28class DSLExecutionError(DSLError): 

29 """DSL 코드 실행 중 에러""" 

30 

31 pass 

32 

33 

34class DSLTimeoutError(DSLExecutionError): 

35 """실행 시간 초과""" 

36 

37 pass 

38 

39 

40class DSLMemoryError(DSLExecutionError): 

41 """메모리 제한 초과""" 

42 

43 pass 

44 

45 

46class SecurityViolation: 

47 """보안 위반 사항""" 

48 

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 

60 

61 def __repr__(self) -> str: 

62 location = f" (line {self.line})" if self.line else "" 

63 return f"[{self.level}]{location} {self.message}" 

64 

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 }