11"""Message property types."""
22
33import binascii
4- import datetime
4+ from datetime import UTC , date , datetime , time , timedelta
55import struct
66from typing import Any
77
@@ -161,10 +161,10 @@ def value(self) -> int:
161161class UnixTimestamp (BaseType ):
162162 """Unix formatted timestamp property."""
163163
164- def __init__ (self , value : float , length : int = 8 ) -> None :
164+ def __init__ (self , value : datetime | None , length : int = 8 ) -> None :
165165 """Initialize Unix formatted timestamp property."""
166166 super ().__init__ (value , length )
167- self ._value : datetime . datetime | None = None
167+ self ._value : datetime | None = None
168168
169169 def serialize (self ) -> bytes :
170170 """Return current string formatted value into an iterable list of bytes."""
@@ -173,10 +173,10 @@ def serialize(self) -> bytes:
173173
174174 def deserialize (self , val : bytes ) -> None :
175175 """Convert data into datetime based on Unix timestamp format."""
176- self ._value = datetime .datetime . fromtimestamp (int (val , 16 ), datetime . UTC )
176+ self ._value = datetime .fromtimestamp (int (val , 16 ), UTC )
177177
178178 @property
179- def value (self ) -> datetime . datetime :
179+ def value (self ) -> datetime :
180180 """Return converted datetime value."""
181181 if self ._value is None :
182182 raise MessageError ("Unable to return value. Deserialize data first" )
@@ -218,7 +218,7 @@ def __init__(self, year: int = 0, month: int = 1, minutes: int = 0) -> None:
218218 self .month = Int (month , 2 , False )
219219 self .minutes = Int (minutes , 4 , False )
220220 self .contents += [self .year , self .month , self .minutes ]
221- self ._value : datetime . datetime | None = None
221+ self ._value : datetime | None = None
222222 self ._deserialized = False
223223
224224 def deserialize (self , val : bytes ) -> None :
@@ -227,9 +227,9 @@ def deserialize(self, val: bytes) -> None:
227227 self ._value = None
228228 else :
229229 CompositeType .deserialize (self , val )
230- self ._value = datetime . datetime (
230+ self ._value = datetime (
231231 year = self .year .value , month = self .month .value , day = 1
232- ) + datetime . timedelta (minutes = self .minutes .value )
232+ ) + timedelta (minutes = self .minutes .value )
233233 self ._deserialized = True
234234
235235 @property
@@ -240,7 +240,7 @@ def value_set(self) -> bool:
240240 return (self ._value is not None )
241241
242242 @property
243- def value (self ) -> datetime . datetime :
243+ def value (self ) -> datetime :
244244 """Return converted datetime value."""
245245 if self ._value is None :
246246 raise MessageError ("Unable to return value. Deserialize data first" )
@@ -257,17 +257,15 @@ def __init__(self, hour: int = 0, minute: int = 0, second: int = 0) -> None:
257257 self .minute = Int (minute , 2 , False )
258258 self .second = Int (second , 2 , False )
259259 self .contents += [self .hour , self .minute , self .second ]
260- self ._value : datetime . time | None = None
260+ self ._value : time | None = None
261261
262262 def deserialize (self , val : bytes ) -> None :
263263 """Convert data into time value."""
264264 CompositeType .deserialize (self , val )
265- self ._value = datetime .time (
266- self .hour .value , self .minute .value , self .second .value
267- )
265+ self ._value = time (self .hour .value , self .minute .value , self .second .value )
268266
269267 @property
270- def value (self ) -> datetime . time :
268+ def value (self ) -> time :
271269 """Return converted time value."""
272270 if self ._value is None :
273271 raise MessageError ("Unable to return value. Deserialize data first" )
@@ -309,19 +307,19 @@ def __init__(self, hour: int = 0, minute: int = 0, second: int = 0) -> None:
309307 self .minute = IntDec (minute , 2 )
310308 self .second = IntDec (second , 2 )
311309 self .contents += [self .second , self .minute , self .hour ]
312- self ._value : datetime . time | None = None
310+ self ._value : time | None = None
313311
314312 def deserialize (self , val : bytes ) -> None :
315313 """Convert data into time value based on integer formatted data."""
316314 CompositeType .deserialize (self , val )
317- self ._value = datetime . time (
315+ self ._value = time (
318316 int (self .hour .value ),
319317 int (self .minute .value ),
320318 int (self .second .value ),
321319 )
322320
323321 @property
324- def value (self ) -> datetime . time :
322+ def value (self ) -> time :
325323 """Return converted time value."""
326324 if self ._value is None :
327325 raise MessageError ("Unable to return value. Deserialize data first" )
@@ -338,19 +336,19 @@ def __init__(self, day: int = 0, month: int = 0, year: int = 0) -> None:
338336 self .month = IntDec (month , 2 )
339337 self .year = IntDec (year - PLUGWISE_EPOCH , 2 )
340338 self .contents += [self .day , self .month , self .year ]
341- self ._value : datetime . date | None = None
339+ self ._value : date | None = None
342340
343341 def deserialize (self , val : bytes ) -> None :
344342 """Convert data into date value based on integer formatted data."""
345343 CompositeType .deserialize (self , val )
346- self ._value = datetime . date (
344+ self ._value = date (
347345 int (self .year .value ) + PLUGWISE_EPOCH ,
348346 int (self .month .value ),
349347 int (self .day .value ),
350348 )
351349
352350 @property
353- def value (self ) -> datetime . date :
351+ def value (self ) -> date :
354352 """Return converted date value."""
355353 if self ._value is None :
356354 raise MessageError ("Unable to return value. Deserialize data first" )
0 commit comments