40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
import logging
|
|
|
|
from typing import Optional
|
|
|
|
logger = logging.getLogger("TodoObject")
|
|
logger.setLevel(logging.INFO)
|
|
logger.addHandler(logging.StreamHandler())
|
|
|
|
class TodoObject:
|
|
def __init__(self, level, text, parent = None):
|
|
self.text: str = text
|
|
self.level: int = level
|
|
self.parents: list[TodoObject] = []
|
|
self.children: list[TodoObject] = []
|
|
self.parent: Optional[TodoObject] = parent
|
|
if parent is not None:
|
|
self.set_parents(parent)
|
|
|
|
def get_children(self, immediate = False):
|
|
output = []
|
|
for child in self.children:
|
|
if immediate and child.parent is self:
|
|
output.append(child)
|
|
elif not immediate:
|
|
output.append(child)
|
|
return output
|
|
|
|
def set_parents(self, parent):
|
|
parent: TodoObject
|
|
for p in parent.parents:
|
|
logger.debug(f"adding parent '{p.text}' to '{self.text}'")
|
|
self.parents.append(p)
|
|
logger.debug(f"adding child '{self.text}' to '{p.text}'")
|
|
p.children.append(self)
|
|
logger.debug(f"adding parent '{parent.text}' to '{self.text}'")
|
|
self.parents.append(parent)
|
|
logger.debug(f"adding child '{self.text}' to '{parent.text}'")
|
|
parent.children.append(self)
|
|
self.parent = parent
|