@@ -346,11 +346,17 @@ def __init__(self, workers=0, jobs=0, jobsDone=0, jobsFailed=0, tasksFailed=0
346346 self .tasksRoot = tasksRoot
347347 self .tasksRootFailed = tasksRootFailed
348348
349+
349350 # @property
350351 # def __dict__(self):
351352 # return dict({p: self.__getattribute__(p) for p in self.__slots__})
352353
353354
355+ def json (self ):
356+ """Serialize self to the JSON representation"""
357+ return {p : self .__getattribute__ (p ) for p in self .__slots__ }
358+
359+
354360class WebUiApp (threading .Thread ):
355361 """WebUI App starting in the dedicated thread and providing remote interface to inspect ExecPool"""
356362 RAM = None
@@ -510,8 +516,7 @@ def root(cmd):
510516
511517 # Expected format of data is a table: header, rows
512518 if resopts .fmt == UiResFmt .json :
513- # TODO: implements JSON serializer
514- return json .dumps (cmd .data )
519+ return json .dumps (cmd .data , default = lambda obj : obj .json ())
515520 elif resopts .fmt == UiResFmt .txt :
516521 # 501 - Not Implemented
517522 bottle .response .status = 501
@@ -582,8 +587,7 @@ def jobs(cmd):
582587 return cmderr
583588
584589 if resopts .fmt == UiResFmt .json :
585- # TOFIX: implements JSON serializer
586- return json .dumps (cmd .data )
590+ return json .dumps (cmd .data , default = lambda obj : obj .json ())
587591 elif resopts .fmt == UiResFmt .txt :
588592 # 501 - Not Implemented
589593 bottle .response .status = 501
@@ -647,8 +651,7 @@ def tasks(cmd):
647651 return cmderr
648652
649653 if resopts .fmt == UiResFmt .json :
650- # TOFIX: implements JSON serializer
651- return json .dumps (cmd .data )
654+ return json .dumps (cmd .data , default = lambda obj : obj .json ())
652655 elif resopts .fmt == UiResFmt .txt :
653656 # 501 - Not Implemented
654657 bottle .response .status = 501
0 commit comments