aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sos/plugins/__init__.py14
-rw-r--r--sos/policies/__init__.py16
-rw-r--r--tests/plugin_tests.py10
3 files changed, 30 insertions, 10 deletions
diff --git a/sos/plugins/__init__.py b/sos/plugins/__init__.py
index fc3a4ed0..e288156e 100644
--- a/sos/plugins/__init__.py
+++ b/sos/plugins/__init__.py
@@ -23,6 +23,7 @@
# pylint: disable-msg = R0201
# pylint: disable-msg = W0611
# pylint: disable-msg = W0613
+from __future__ import with_statement
from sos.utilities import sosGetCommandOutput, import_module, grep, fileobj, tail
from sos import _sos as _
@@ -81,6 +82,13 @@ def regex_findall(regex, fname):
except AttributeError:
return []
+def mangle_command(command):
+ # FIXME: this can be improved
+ mangledname = re.sub(r"^/(usr/|)(bin|sbin)/", "", command)
+ mangledname = re.sub(r"[^\w\-\.\/]+", "_", mangledname)
+ mangledname = re.sub(r"/", ".", mangledname).strip(" ._-")[0:64]
+ return mangledname
+
class PluginException(Exception):
pass
@@ -424,11 +432,7 @@ class Plugin(object):
return grep(regexp, *fnames)
def mangleCommand(self, exe):
- # FIXME: this can be improved
- mangledname = re.sub(r"^/(usr/|)(bin|sbin)/", "", exe)
- mangledname = re.sub(r"[^\w\-\.\/]+", "_", mangledname)
- mangledname = re.sub(r"/", ".", mangledname).strip(" ._-")[0:64]
- return mangledname
+ return mangle_command(exe)
def makeCommandFilename(self, exe):
"""The internal function to build up a filename based on a command."""
diff --git a/sos/policies/__init__.py b/sos/policies/__init__.py
index 80a2ed40..32ecb0a0 100644
--- a/sos/policies/__init__.py
+++ b/sos/policies/__init__.py
@@ -1,3 +1,5 @@
+from __future__ import with_statement
+
import os
import re
import platform
@@ -129,14 +131,20 @@ No changes will be made to your system.
self.package_manager = PackageManager()
self._valid_subclasses = []
- @property
- def valid_subclasses(self):
+ def get_valid_subclasses(self):
return [IndependentPlugin] + self._valid_subclasses
- @valid_subclasses.setter
- def valid_subclasses(self, subclasses):
+ def set_valid_subclasses(self, subclasses):
self._valid_subclasses = subclasses
+ def del_valid_subclasses(self):
+ del self._valid_subclasses
+
+ valid_subclasses = property(get_valid_subclasses,
+ set_valid_subclasses,
+ del_valid_subclasses,
+ "list of subclasses that this policy can process")
+
def check(self):
"""
This function is responsible for determining if the underlying system
diff --git a/tests/plugin_tests.py b/tests/plugin_tests.py
index 87940b8e..a3055543 100644
--- a/tests/plugin_tests.py
+++ b/tests/plugin_tests.py
@@ -3,7 +3,7 @@ import os
import tempfile
from StringIO import StringIO
-from sos.plugins import Plugin, regex_findall, sosRelPath
+from sos.plugins import Plugin, regex_findall, sosRelPath, mangle_command
from sos.utilities import Archive
PATH = os.path.dirname(__file__)
@@ -126,6 +126,14 @@ class PluginToolTests(unittest.TestCase):
path2 = "foo/lib/boo"
self.assertEquals(sosRelPath(path1, path2), "foo/lib/boo")
+ def test_mangle_command(self):
+ self.assertEquals("foo", mangle_command("/usr/bin/foo"))
+ self.assertEquals("foo_-x", mangle_command("/usr/bin/foo -x"))
+ self.assertEquals("foo_--verbose", mangle_command("/usr/bin/foo --verbose"))
+ self.assertEquals("foo_.path.to.stuff", mangle_command("/usr/bin/foo /path/to/stuff"))
+ expected = "foo_.path.to.stuff.this.is.very.long.and.i.only.expect.part.of.it.maybe.this.is.enough.i.hope.so"[0:64]
+ self.assertEquals(expected, mangle_command("/usr/bin/foo /path/to/stuff/this/is/very/long/and/i/only/expect/part/of/it/maybe/this/is/enough/i/hope/so"))
+
class PluginTests(unittest.TestCase):