[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[master] dispatcher: allow requesting a step without insisting.



Introduces Dispatcher.request_steps_gently() which requests steps if they
are not skipped already (i.e. "Unless there is a compelling reason, like a
kickstart command, not to run this step, it must be run.").

Resolves: rhbz#723798
---
 pyanaconda/dispatch.py                 |   10 ++++++++++
 pyanaconda/iw/autopart_type.py         |    3 ++-
 pyanaconda/storage/partitioning.py     |    6 +-----
 tests/pyanaconda_test/dispatch_test.py |   12 ++++++++++++
 4 files changed, 25 insertions(+), 6 deletions(-)

diff --git a/pyanaconda/dispatch.py b/pyanaconda/dispatch.py
index 3d4b9b2..820a92b 100644
--- a/pyanaconda/dispatch.py
+++ b/pyanaconda/dispatch.py
@@ -290,6 +290,16 @@ class Dispatcher(object):
     def request_steps(self, *steps):
         changes = map(lambda s: self.steps[s].request(self._current_step()), steps)
 
+    def request_steps_gently(self, *steps):
+        """ Requests steps and won't raise an error if it is not possible for
+            some of them.
+        """
+        for step in steps:
+            try:
+                self.request_steps(step)
+            except errors.DispatchError as e:
+                log.debug("dispatch: %s" % e)
+
     def run(self):
         self.anaconda.intf.run(self.anaconda)
         log.info("dispatch: finished.")
diff --git a/pyanaconda/iw/autopart_type.py b/pyanaconda/iw/autopart_type.py
index d69b5f9..999c281 100644
--- a/pyanaconda/iw/autopart_type.py
+++ b/pyanaconda/iw/autopart_type.py
@@ -202,7 +202,8 @@ class PartitionTypeWindow(InstallWindow):
 
             if self.reviewButton.get_active():
                 self.dispatch.request_steps("partition")
-                self.dispatch.request_steps("bootloader")
+                # with kickstart bootloader is already scheduled to be skipped:
+                self.dispatch.request_steps_gently("bootloader")
             else:
                 self.dispatch.skip_steps("partition")
                 self.dispatch.skip_steps("bootloader")
diff --git a/pyanaconda/storage/partitioning.py b/pyanaconda/storage/partitioning.py
index a594697..ffb4ef4 100644
--- a/pyanaconda/storage/partitioning.py
+++ b/pyanaconda/storage/partitioning.py
@@ -29,7 +29,6 @@ from pykickstart.constants import *
 
 from pyanaconda.constants import *
 
-from pyanaconda.errors import DispatchError
 from errors import *
 from deviceaction import *
 from devices import PartitionDevice, LUKSDevice, devicePathToName
@@ -301,10 +300,7 @@ def doAutoPartition(anaconda):
         if anaconda.ksdata:
             extra = _("\n\nPress 'OK' to exit the installer.")
         else:
-            try:
-                anaconda.dispatch.request_steps("partition")
-            except DispatchError:
-                pass
+            anaconda.dispatch.request_steps_gently("partition")
         anaconda.intf.messageWindow(_("Error Partitioning"),
                _("Could not allocate requested partitions: \n\n"
                  "%(msg)s.%(extra)s") % {'msg': msg, 'extra': extra},
diff --git a/tests/pyanaconda_test/dispatch_test.py b/tests/pyanaconda_test/dispatch_test.py
index c84427a..57de692 100644
--- a/tests/pyanaconda_test/dispatch_test.py
+++ b/tests/pyanaconda_test/dispatch_test.py
@@ -171,6 +171,18 @@ class DispatchTest(mock.TestCase):
         self.assertFalse(d.step_enabled("complete"))
         self.assertTrue(d.step_enabled("filtertype"))
 
+    def request_steps_gently_test(self):
+        from pyanaconda.errors import DispatchError
+        from pyanaconda.dispatch import Step
+        d = self._getDispatcher()
+        d.schedule_steps("betanag", "complete")
+        d.skip_steps("betanag")
+        self.assertRaises(DispatchError, d.request_steps, "betanag")
+        d.request_steps_gently("betanag")
+        d.request_steps_gently("complete")
+        self.assertEqual(d.steps["betanag"].sched, Step.SCHED_SKIPPED)
+        self.assertEqual(d.steps["complete"].sched, Step.SCHED_REQUESTED)
+
     def track_scheduling_test(self):
         from pyanaconda.dispatch import Step
         d = self._getDispatcher()
-- 
1.7.6


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]