[PATCH 12/35] abrt-python: add support for dump dir access
Richard Marko
rmarko at redhat.com
Mon May 13 11:05:21 UTC 2013
Signed-off-by: Richard Marko <rmarko at redhat.com>
---
src/python-problem/problem/proxies.py | 67 +++++++++++++++++++++++++++++++++++
src/python-problem/tests/base.py | 1 +
2 files changed, 68 insertions(+)
diff --git a/src/python-problem/problem/proxies.py b/src/python-problem/problem/proxies.py
index 7abd07e..c90f5aa 100644
--- a/src/python-problem/problem/proxies.py
+++ b/src/python-problem/problem/proxies.py
@@ -1,4 +1,6 @@
+import os
import logging
+import report
import problem.exception
@@ -113,6 +115,71 @@ class SocketProxy(object):
raise NotImplementedError
def list(self, *args):
raise NotImplementedError
+ def list_all(self, *args):
+ return self.list(*args)
+
+class FsProxy(object):
+ def __init__(self, directory):
+ self.directory = directory
+
+ def create(self, problem_dict):
+ probd = report.problem_data()
+ for key, value in problem_dict.iteritems():
+ probd.add(key, value)
+
+ ddir = probd.create_dump_dir('/tmp/abrt/')
+ ret = ddir.name
+ ddir.close()
+ return ret
+
+ def _open_ddir(self, dump_dir):
+ ddir = report.dd_opendir(dump_dir)
+ if not ddir:
+ raise problem.exception.InvalidProblem(
+ 'Can\'t open directory: {0}'.format(dump_dir))
+
+ return ddir
+
+ def get_item(self, dump_dir, name):
+ ddir = self._open_ddir(dump_dir)
+
+ val = ddir.load_text(name,
+ report.DD_OPEN_READONLY |
+ report.DD_FAIL_QUIETLY_EACCES |
+ report.DD_FAIL_QUIETLY_ENOENT |
+ report.DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE)
+
+ ddir.close()
+ return val
+
+ def set_item(self, dump_dir, name, value):
+ ddir = self._open_ddir(dump_dir)
+ ddir.save_text(name, str(value))
+ ddir.close()
+
+ def del_item(self, dump_dir, name):
+ ddir = self._open_ddir(dump_dir)
+ ddir.delete_item(name)
+ ddir.close()
+
+ def delete(self, dump_dir):
+ ddir = report.dd_opendir(dump_dir)
+ if not ddir:
+ return not os.path.isdir(dump_dir)
+
+ ddir.delete()
+ return True
+
+ def list(self):
+ for dir_entry in os.listdir(self.directory):
+ dump_dir = os.path.join(self.directory, dir_entry)
+ ddir = report.dd_opendir(dump_dir)
+ if ddir:
+ ddir.close()
+ yield dump_dir
+
+ def list_all(self, *args):
+ return self.list(*args)
def get_proxy():
try:
diff --git a/src/python-problem/tests/base.py b/src/python-problem/tests/base.py
index 214a58a..ed5427a 100644
--- a/src/python-problem/tests/base.py
+++ b/src/python-problem/tests/base.py
@@ -8,6 +8,7 @@ class ProblematicTestCase(unittest.TestCase):
def setUp(self):
self.proxy = FakeProxy()
#self.proxy = problem.proxies.get_proxy()
+ #self.proxy = problem.proxies.FsProxy('/tmp/abrt/')
def create_problem(self):
prob = problem.Runtime(reason='Front fell off')
--
1.8.1.4
More information about the Crash-catcher
mailing list