@@ -149,6 +149,10 @@ def id(self) -> TypeURI:
149
149
""" # noqa RST304
150
150
return self .__id
151
151
152
+ @id .setter
153
+ def id (self , value : str | TypeURI ) -> None :
154
+ self .__id = value if isinstance (value , TypeURI ) else TypeURI (value )
155
+
152
156
@property
153
157
def version (self ) -> dict [str , str ]:
154
158
"""Builder version mapping.
@@ -279,6 +283,10 @@ def finished_on(self) -> datetime:
279
283
"""The timestamp of when the build completed."""
280
284
return self .__finished_on
281
285
286
+ @finished_on .setter
287
+ def finished_on (self , value : datetime | str ) -> None :
288
+ self .__finished_on = self .__validate_timestamp (value )
289
+
282
290
@property
283
291
def invocation_id (self ) -> str :
284
292
"""Build invocation identifier.
@@ -299,6 +307,10 @@ def started_on(self) -> datetime:
299
307
"""The timestamp of when the build started."""
300
308
return self .__started_on
301
309
310
+ @started_on .setter
311
+ def started_on (self , value : datetime | str ) -> None :
312
+ self .__started_on = self .__validate_timestamp (value )
313
+
302
314
# --------------------------- Public methods ---------------------------- #
303
315
304
316
def as_dict (self ) -> dict :
@@ -380,13 +392,20 @@ def load_json(cls, initializer: str) -> BuildMetadata:
380
392
# --------------------------- Private methods --------------------------- #
381
393
382
394
@staticmethod
383
- def __validate_timestamp (timestamp : datetime ) -> datetime :
395
+ def __validate_timestamp (timestamp : datetime | str ) -> datetime :
384
396
"""Validate a timestamp."""
385
- valid_timestamp : datetime
386
- if isinstance (timestamp , datetime ):
397
+ valid_timestamp : datetime | None = None
398
+ if isinstance (timestamp , str ):
399
+ valid_timestamp = date_parser .parse (timestamp )
400
+ elif isinstance (timestamp , datetime ):
401
+ valid_timestamp = timestamp
402
+
403
+ if isinstance (valid_timestamp , datetime ):
387
404
# When converting to JSON representation, the microseconds
388
405
# are lost. Just remove them.
389
- valid_timestamp = timestamp .astimezone (timezone .utc ).replace (microsecond = 0 )
406
+ valid_timestamp = valid_timestamp .astimezone (timezone .utc ).replace (
407
+ microsecond = 0
408
+ )
390
409
else :
391
410
raise TypeError (f"Invalid timestamp type { type (timestamp )} " )
392
411
0 commit comments