[master 2/30] Add some infrastructure for tracking availability of applications.

mulkieran installerbot-noreply at redhat.com
Wed Mar 25 22:47:40 UTC 2015


From: mulhern <amulhern at redhat.com>

Signed-off-by: mulhern <amulhern at redhat.com>
---
 blivet/tasks/availability.py | 121 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 121 insertions(+)
 create mode 100644 blivet/tasks/availability.py

diff --git a/blivet/tasks/availability.py b/blivet/tasks/availability.py
new file mode 100644
index 0000000..150ff2d
--- /dev/null
+++ b/blivet/tasks/availability.py
@@ -0,0 +1,121 @@
+# availability.py
+# Class for tracking availability of an application.
+#
+# Copyright (C) 2014  Red Hat, Inc.
+#
+# This copyrighted material is made available to anyone wishing to use,
+# modify, copy, or redistribute it subject to the terms and conditions of
+# the GNU General Public License v.2, or (at your option) any later version.
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY expressed or implied, including the implied warranties of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
+# Public License for more details.  You should have received a copy of the
+# GNU General Public License along with this program; if not, write to the
+# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.  Any Red Hat trademarks that are incorporated in the
+# source code or documentation are not subject to the GNU General Public
+# License and may only be used or replicated with the express permission of
+# Red Hat, Inc.
+#
+# Red Hat Author(s): Anne Mulhern <amulhern at redhat.com>
+
+import abc
+
+from six import add_metaclass
+
+from .. import util
+
+class Application(object):
+    """ An application. """
+
+    def __init__(self, method, name):
+        """ Initializes an instance of an application.
+
+            :param method: A method object
+            :type method: Method
+            :param str name: the name of the application
+        """
+        self._method = method
+        self.name = name
+
+    def __str__(self):
+        return self.name
+
+    # Results of these methods may change at runtime, depending on system
+    # state.
+
+    @property
+    def available(self):
+        """ Whether the resource is available.
+
+            :returns: True if the resource is available, otherwise False
+            :rtype: bool
+        """
+        return self._method.available(self)
+
+    @property
+    def path(self):
+        """ Absolute path of directory containing the executable.
+
+            :returns: Absolute path of directory containing executable.
+            :rtype: str or NoneType
+
+            Returns None if available is False.
+        """
+        return self._method.path(self)
+
+
+ at add_metaclass(abc.ABCMeta)
+class Method(object):
+    """ A collection of methods for a particular application task. """
+
+    @abc.abstractmethod
+    def available(self, application):
+        """ Returns True if the application is available.
+
+            :param application: any application
+            :type application: applications.application.Application
+
+            :returns: True if the application is available
+            :rtype: bool
+        """
+        raise NotImplementedError()
+
+    @abc.abstractmethod
+    def path(self, application):
+        """ Returns the absolute path of the application.
+
+            :param application: any application
+            :type application: applications.application.Application
+
+            :returns: the absolute path of the application
+            :rtype: str or NoneType
+
+            Returns None when available is False
+        """
+        raise NotImplementedError()
+
+class Path(Method):
+    """ Methods for when application is found in  PATH. """
+
+    def available(self, application):
+        """ Returns True if the name of the application is in the path.
+
+            :param application: any application
+            :type application: applications.application.Application
+
+            :returns: True if the name of the application is in the path
+            :rtype: bool
+        """
+        return bool(self.path(application))
+
+    def path(self, application):
+        """ Obtain absolute path of executable.
+
+            :param application: The application to locate.
+            :type application: applications.application.Application
+
+            :returns: path of executable
+            :rtype: str
+        """
+        return util.find_program_in_path(application.name)


-- 
To view this commit on github, visit https://github.com/rhinstaller/blivet/commit/b7c7b279d573b6c8b0e7b5d2e9de7a293cbc19df


More information about the anaconda-patches mailing list