pgreco / rpms / ipa

Forked from forks/areguera/rpms/ipa 4 years ago
Clone

Blame SOURCES/0209-add-a-class-that-tracks-the-indentation-in-the-gener.patch

483b06
From bdf024c20213110306b2fcf3651f274c229aae29 Mon Sep 17 00:00:00 2001
483b06
From: Martin Babinsky <mbabinsk@redhat.com>
483b06
Date: Thu, 22 Jun 2017 13:18:54 +0200
483b06
Subject: [PATCH] add a class that tracks the indentation in the generated
483b06
 advises
483b06
483b06
https://pagure.io/freeipa/issue/7036
483b06
483b06
Reviewed-By: Florence Blanc-Renaud <frenaud@redhat.com>
483b06
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
483b06
---
483b06
 ipaserver/advise/base.py | 49 ++++++++++++++++++++++++++++++++++++++++++++++++
483b06
 1 file changed, 49 insertions(+)
483b06
483b06
diff --git a/ipaserver/advise/base.py b/ipaserver/advise/base.py
483b06
index ba412b872472580cd32baf2a326a14edb951cab1..639fd1807f72f11f46136999c4ce4c6eec6b3698 100644
483b06
--- a/ipaserver/advise/base.py
483b06
+++ b/ipaserver/advise/base.py
483b06
@@ -76,6 +76,55 @@ As a result, you can redirect the advice's output directly to a script file.
483b06
 """
483b06
 
483b06
 
483b06
+class _IndentationTracker(object):
483b06
+    """
483b06
+    A simple wrapper that tracks the indentation level of the generated bash
483b06
+    commands
483b06
+    """
483b06
+    def __init__(self, spaces_per_indent=0):
483b06
+        if spaces_per_indent <= 0:
483b06
+            raise ValueError(
483b06
+                "Indentation increments cannot be zero or negative")
483b06
+        self.spaces_per_indent = spaces_per_indent
483b06
+        self._indentation_stack = []
483b06
+        self._total_indentation_level = 0
483b06
+
483b06
+    @property
483b06
+    def indentation_string(self):
483b06
+        """
483b06
+        return a string containing number of spaces corresponding to
483b06
+        indentation level
483b06
+        """
483b06
+        return " " * self._total_indentation_level
483b06
+
483b06
+    def indent(self):
483b06
+        """
483b06
+        track a single indentation of the generated code
483b06
+        """
483b06
+        self._indentation_stack.append(self.spaces_per_indent)
483b06
+        self._recompute_indentation_level()
483b06
+
483b06
+    def _recompute_indentation_level(self):
483b06
+        """
483b06
+        Track total indentation level of the generated code
483b06
+        """
483b06
+        self._total_indentation_level = sum(self._indentation_stack)
483b06
+
483b06
+    def dedent(self):
483b06
+        """
483b06
+        track a single dedentation of the generated code
483b06
+        dedents that would result in zero or negative indentation level will be
483b06
+        ignored
483b06
+        """
483b06
+        try:
483b06
+            self._indentation_stack.pop()
483b06
+        except IndexError:
483b06
+            # can not dedent any further
483b06
+            pass
483b06
+
483b06
+        self._recompute_indentation_level()
483b06
+
483b06
+
483b06
 class _AdviceOutput(object):
483b06
 
483b06
     def __init__(self):
483b06
-- 
483b06
2.9.4
483b06