1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
#!/usr/bin/env python
# RaidGuessFS, a FUSE pseudo-filesystem to guess RAID parameters of a damaged device
# Copyright (C) 2015 Ludovic Pouzenc <ludovic@pouzenc.fr>
#
# This file is part of RaidGuessFS.
#
# RaidGuessFS is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# RaidGuessFS is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty 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 RaidGuessFS. If not, see <http://www.gnu.org/licenses/>
import multiprocessing, logging
import mydisks
def do_find_files(d,state):
state['TODO'] = 'Not yet implemented'
def do_find_bootsect(d,state):
state['TODO'] = 'Not yet implemented'
class MyTasks():
"""Auxiliary class, managing long or background tasks"""
TASK_NAMES = [ 'find_bootsect', 'find_files' ]
def __init__(self, mydisks):
self.tasks = []
self.d = mydisks
self.find_files_pathlist = []
m = multiprocessing.Manager()
self.find_bootsect_state = m.dict()
self.find_bootsect_process = None
self.find_files_state = m.dict()
self.find_files_process = None
def get_find_files_pathlist(self):
return self.find_files_pathlist
def get_find_files_pathlist_str(self):
return '\n'.join(self.find_files_pathlist)
def task_start(self, task_name):
if task_name == 'find_files':
self.find_files_process = multiprocessing.Process(
target = do_find_files,
args = (self.d, self.find_files_state)
)
self.find_files_process.start()
elif task_name == 'find_bootsect':
self.find_bootsect_process = multiprocessing.Process(
target = do_find_bootsect,
args = (self.d, self.find_bootsect_state)
)
self.find_bootsect_process.start()
else:
raise ValueError('Valid task names are : %s'%','.join(MyTasks.TASK_NAMES))
def task_kill(self, task_name):
if task_name == 'find_bootsect':
if self.find_bootsect_process != None and self.find_bootsect_process.is_alive():
self.find_bootsect_process.terminate()
elif task_name == 'find_files':
if self.find_files_process != None and self.find_files_process.is_alive():
self.find_files_process.terminate()
else:
raise ValueError('Valid task names are : %s'%','.join(MyTasks.TASK_NAMES))
def set_find_files_pathlist(self, new_find_files_pathlist):
self.find_files_pathlist = new_find_files_pathlist
def read_find_bootsect(self):
if self.find_bootsect_process == None:
return 'This task has never been started\n'
else:
return 'TODO\n%s\n'%self.find_bootsect_state
def read_find_files(self):
if self.find_files_process == None:
return 'This task has never been started\n'
else:
return 'TODO\n%s\n'%self.find_files_state
|