Coverage for sbe2/schema/primitive_type.py: 100%

30 statements  

« prev     ^ index     » next       coverage.py v7.9.1, created at 2025-06-21 19:48 +0200

1from dataclasses import dataclass 

2from functools import cached_property 

3from typing import ClassVar 

4 

5@dataclass 

6class PrimitiveType: 

7 """ 

8 Represents a primitive type built into SBE. 

9 """ 

10 name: str # Name of the primitive type 

11 length: int # Length of the primitive type in bytes 

12 max_value: int | float | str # Maximum value for the primitive type 

13 min_value: int | float | str # Minimum value for the primitive type 

14 default_null_value: int | float | str # Default null value for the primitive type 

15 base_type: type # Python type equivalent 

16 

17 by_name: ClassVar[dict[str, "PrimitiveType"]] = {} 

18 

19 @cached_property 

20 def is_byte(self) -> bool: 

21 """ 

22 Returns True if this primitive type is a byte. 

23 """ 

24 return self.length == 1 

25 

26 

27 

28 def __post_init__(self): 

29 """ 

30 Post-initialization to register the primitive type by its name. 

31 """ 

32 if self.name in PrimitiveType.by_name: 

33 raise ValueError(f"Primitive type '{self.name}' is already registered.") # pragma: no cover 

34 PrimitiveType.by_name[self.name] = self 

35 

36 

37char = PrimitiveType(name='char', length=1, max_value=126, min_value=26, default_null_value=0, base_type=str) 

38int_ = PrimitiveType(name='int', length=4, max_value=2**31-1, min_value=-(2**31-1), default_null_value=-(2**31), base_type=int) 

39int8 = PrimitiveType(name='int8', length=1, max_value=127, min_value=-127, default_null_value=-128, base_type=int) 

40int16 = PrimitiveType(name='int16', length=2, max_value=(2**15-1), min_value=-(2**15-1), default_null_value=-(2**15), base_type=int) 

41int32 = PrimitiveType(name='int32', length=4, max_value=(2**31-1), min_value=-(2**31-1), default_null_value=-(2**31), base_type=int) 

42int64 = PrimitiveType(name='int64', length=8, max_value=(2**63-1), min_value=-(2**63-1), default_null_value=-(2**63), base_type=int) 

43uint8 = PrimitiveType(name='uint8', length=1, max_value=2**8-2, min_value=0, default_null_value=2**8-1, base_type=int) 

44uint16 = PrimitiveType(name='uint16', length=2, max_value=2**16-2, min_value=0, default_null_value=2**16-1, base_type=int) 

45uint32 = PrimitiveType(name='uint32', length=4, max_value=2**32-2, min_value=0, default_null_value=2**32-1, base_type=int) 

46uint64 = PrimitiveType(name='uint64', length=8, max_value=2**64-2, min_value=0, default_null_value=2**64-1, base_type=int) 

47float_ = PrimitiveType(name='float', length=4, max_value=float('inf'), min_value=-float('inf'), default_null_value=float('nan'), base_type=float) 

48double = PrimitiveType(name='double', length=8, max_value=float('inf'), min_value=-float('inf'), default_null_value=float('nan'), base_type=float)