Skip to content

Commit

Permalink
refactor(sidecar): create sidecar configuration class
Browse files Browse the repository at this point in the history
  • Loading branch information
MadeInPierre committed Jun 5, 2023
1 parent 560d4fa commit 96ba022
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 42 deletions.
2 changes: 1 addition & 1 deletion finalynx/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

# Portfolio
from .portfolio import TargetRange, TargetMin, TargetMax, TargetRatio, TargetGlobalRatio
from .portfolio import Line, LinePerf, Folder, Bucket, SharedFolder, Portfolio, FolderDisplay
from .portfolio import Line, LinePerf, Sidecar, Folder, Bucket, SharedFolder, Portfolio, FolderDisplay
from .portfolio import AssetClass, AssetSubclass, EnvelopeClass
from .portfolio import Envelope, EnvelopeState, PEA, PEE, AV, PER

Expand Down
32 changes: 16 additions & 16 deletions finalynx/assistant.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
from finalynx.portfolio.folder import Folder
from finalynx.portfolio.folder import FolderDisplay
from finalynx.portfolio.folder import SharedFolder
from finalynx.portfolio.folder import Sidecar
from finalynx.portfolio.node import Node
from finalynx.portfolio.targets import Target
from html2image import Html2Image
Expand Down Expand Up @@ -84,7 +85,7 @@ def __init__(
export_dir: str = "logs",
active_sources: Optional[List[str]] = None,
theme: Optional[finalynx.theme.Theme] = None,
sidecars: Optional[List[str]] = None,
sidecars: Optional[List[Sidecar]] = None,
ignore_argv: bool = False,
):
self.portfolio = portfolio
Expand Down Expand Up @@ -144,19 +145,27 @@ def _parse_args(self) -> None:
if args["--format"]:
self.output_format = args["--format"]
if args["--sidecar"]:
self.sidecars += list(args["--sidecar"])
for sidecar in list(args["--sidecar"]):
if sidecar.count(",") > 3:
console.log(
"[red]Error: invalid sidecar format, skipping. Use at most 3 ',' to"
" define format, condition, title and/or folder rendering.",
highlight=False,
)
continue
self.sidecars.append(Sidecar(*sidecar.split(",")))
if args["delta"]:
self.output_format = "[console_delta]"
self.sidecars.remove("[delta]") if "[delta]" in self.sidecars else None
self.sidecars = [s for s in self.sidecars if s.output_format != "[delta]"]
if args["perf"]:
self.output_format = "[console_perf]"
self.sidecars.remove("[perf]") if "[perf]" in self.sidecars else None
self.sidecars = [s for s in self.sidecars if s.output_format != "[perf]"]
if args["ideal"]:
self.output_format = "[console_ideal]"
self.sidecars.remove("[ideal]") if "[ideal]" in self.sidecars else None
self.sidecars = [s for s in self.sidecars if s.output_format != "[ideal]"]
if args["target"]:
self.output_format = "[console_target]"
self.sidecars.remove("[target]") if "[target]" in self.sidecars else None
self.sidecars = [s for s in self.sidecars if s.output_format != "[target]"]
if args["text"]:
self.output_format = "[text]"
if args["--no-export"]:
Expand Down Expand Up @@ -241,16 +250,7 @@ def render_mainframe(self) -> Columns:
]

# Display deltas only if not already printed in the main tree
main_frame.append(Text(" "))
for sidecar in self.sidecars:
if sidecar.count(",") > 3:
console.log(
"[red]Error: invalid sidecar format, skipping. Use at most 3 ',' to"
" define format, condition, title and/or folder rendering.",
highlight=False,
)
continue
main_frame.append(self.portfolio.render_sidecar(*sidecar.split(","), hide_root=self.hide_root)) # type: ignore
main_frame += [Text(" ")] + [self.portfolio.render_sidecar(s, self.hide_root) for s in self.sidecars]

return Columns(main_frame, padding=(0, 0)) # type: ignore

Expand Down
1 change: 1 addition & 0 deletions finalynx/portfolio/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
from .folder import FolderDisplay
from .folder import Portfolio
from .folder import SharedFolder
from .folder import Sidecar
from .hierarchy import Hierarchy
from .line import Line
from .line import LinePerf
Expand Down
47 changes: 23 additions & 24 deletions finalynx/portfolio/folder.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from typing import Union

import numpy as np
from attr import dataclass
from rich.tree import Tree

if TYPE_CHECKING:
Expand Down Expand Up @@ -39,6 +40,14 @@ class FolderDisplay(Enum):
LINE = 2


@dataclass
class Sidecar:
output_format: str = "[delta]"
condition_format: str = ""
title: Optional[str] = None
render_folders: Union[bool, str] = True


class Folder(Node):
"""Holds a group of `Node` objects to build the portfolio hierarchy."""

Expand Down Expand Up @@ -171,15 +180,7 @@ def tree(
child.tree(output_format=output_format, _tree=node, **render_args)
return node

def render_sidecar(
self,
output_format: str = "[delta]",
condition_format: str = "",
title: Optional[str] = None,
render_folders: Union[bool, str] = True,
hide_root: Optional[bool] = None,
_tree: Optional[Tree] = None,
) -> Tree:
def render_sidecar(self, sidecar: Sidecar, hide_root: Optional[bool] = None, _tree: Optional[Tree] = None) -> Tree:
"""Generates a vertical tree with the specified output format for each node.
:param output_format: The output format to be rendered for each node.
:param condition_format: Only show this node's `output_format` if the rendered
Expand All @@ -189,22 +190,20 @@ def render_sidecar(
"""

def _render_node(node: Node) -> str:
if not condition_format or node.render(condition_format).strip():
return node.render(output_format, align=False) # type: ignore
if not sidecar.condition_format or node.render(sidecar.condition_format).strip():
return node.render(sidecar.output_format, align=False) # type: ignore
return ""

# Follow the same print policy as the main tree
render = _render_node(self)
if (
render_folders in [False, "False", "false"]
and not isinstance(self, SharedFolder)
and self.display == FolderDisplay.EXPANDED
):
render = ""

# TODO nicer style maybe?
# if self.display == FolderDisplay.EXPANDED:
# render = f"[{TH().FOLDER_STYLE}]{render}[/]"
render = (
_render_node(self)
if not (
sidecar.render_folders in [False, "False", "false"]
and not isinstance(self, SharedFolder)
and self.display == FolderDisplay.EXPANDED
)
else ""
)

if self.display != FolderDisplay.EXPANDED and self.newline:
render += "\n"
Expand All @@ -219,13 +218,13 @@ def _render_node(node: Node) -> str:
if self.display == FolderDisplay.EXPANDED:
for child in self.children:
if isinstance(child, Folder):
child.render_sidecar(output_format, condition_format, title, render_folders, _tree=_tree)
child.render_sidecar(sidecar, _tree=_tree)
else:
_tree.add(_render_node(child) + ("\n" if child.newline else ""))

# Align deltas if root is shown (necessary hack for bugfix #105)
if hide_root is False and _tree.children:
title = title if title else output_format.replace("[", "").replace("]", "").upper()
title = sidecar.title if sidecar.title else sidecar.output_format.replace("[", "").replace("]", "").upper()
_tree.children[0].label = f"[bold {TH().TEXT}]{title}[/]\n" + str(_tree.children[0].label)

return _tree
Expand Down
2 changes: 1 addition & 1 deletion finalynx/portfolio/node.py
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ def _render_delta(self, align: bool = True, children: Optional[List["Node"]] = N
delta, check, max_length = round(self.get_delta()), self.target.check(), 0

# Skip nodes where everything is fine, or if the node is empty
if delta == 0 or check in [Target.RESULT_NONE, Target.RESULT_OK]:
if delta == 0 or check in [Target.RESULT_NONE, Target.RESULT_TOLERATED, Target.RESULT_OK]:
return ""

# Align all amounts vertically if needed
Expand Down

0 comments on commit 96ba022

Please sign in to comment.