"""
todo
"""


class AbstractCommand():
    # pylint: disable=too-few-public-methods
    """
    todo
    """
    def __init__(self):
        pass

    def _logic(self):
        pass

    def execute(self):
        """
        todo
        """
        self._logic()


class SymbolicLink(AbstractCommand):
    # pylint: disable=too-few-public-methods
    """
    todo
    """
    def __init__(self, source, dest):
        super().__init__()
        self.source = source
        self.dest = dest

    def _logic(self):
        self.dest.symlink_to(self.source)
        msg = "Link: {dest} => {source}"
        print(msg.format(source=self.source, dest=self.dest))


class SymbolicLinkExists(AbstractCommand):
    # pylint: disable=too-few-public-methods
    """
    todo
    """
    def __init__(self, source, dest):
        super().__init__()
        self.source = source
        self.dest = dest

    def _logic(self):
        msg = "Link: Nothing To Do Already Linked {dest} => {source}"
        print(msg.format(source=self.source, dest=self.dest))


class UnLink(AbstractCommand):
    # pylint: disable=too-few-public-methods
    """
    todo
    """
    def __init__(self, target):
        super().__init__()
        self.target = target

    def _logic(self):
        self.target.unlink()


class MakeDirectory(AbstractCommand):
    # pylint: disable=too-few-public-methods
    """
    todo
    """
    def __init__(self, target):
        super().__init__()
        self.target = target

    def _logic(self):
        self.target.mkdir()

@@ -567,21 +567,32 @@
  msg = %22
-L
+dploy stow: l
 ink
-:
  %7Bdest%7D 
@@ -942,37 +942,29 @@
  = %22
-Link: Nothing To Do A
+dploy stow: a
 lready 
-L
+l
 inke
@@ -1253,32 +1253,122 @@
 f _logic(self):%0A
+        msg = %22dploy stow: unlink %7Btarget%7D%22%0A        print(msg.format(target=self.target))%0A
         self.tar
@@ -1571,32 +1571,32 @@
 arget = target%0A%0A
-
     def _logic(s
@@ -1593,32 +1593,130 @@
 f _logic(self):%0A
+        msg = %22dploy stow: make directory %7Btarget%7D%22%0A        print(msg.format(target=self.target))%0A
         self.tar

improve and formalize printing while stowing