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 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
#!/usr/bin/python3
"""
Put into Public Domain, by Nicolas Sebrecht.
Manage the feedbacks of the testers for the release notes.
"""
from os import system
import argparse
from helpers import CACHEDIR, EDITOR, Testers, User, Git
class App():
def __init__(self):
self.args = None
self.testers = Testers()
self.feedbacks = None
def _getTestersByFeedback(self):
if self.feedbacks is not None:
return self.feedbacks
feedbackOk = []
feedbackNo = []
for tester in self.testers.get():
if tester.getFeedback() is True:
feedbackOk.append(tester)
else:
feedbackNo.append(tester)
for array in [feedbackOk, feedbackNo]:
array.sort(key=lambda t: t.getName())
self.feedbacks = feedbackOk + feedbackNo
def parseArgs(self):
parser = argparse.ArgumentParser(description='Manage the feedbacks.')
parser.add_argument('--add', '-a', dest='add_tester',
help='Add tester')
parser.add_argument('--delete', '-d', dest='delete_tester',
type=int,
help='Delete tester NUMBER')
parser.add_argument('--list', '-l', dest='list_all_testers',
action='store_true',
help='List the testers')
parser.add_argument('--switchFeedback', '-s', dest='switch_feedback',
action='store_true',
help='Switch the feedback of a tester')
self.args = parser.parse_args()
def run(self):
if self.args.list_all_testers is True:
self.listTesters()
if self.args.switch_feedback is True:
self.switchFeedback()
elif self.args.add_tester:
self.addTester(self.args.add_tester)
elif type(self.args.delete_tester) == int:
self.deleteTester(self.args.delete_tester)
def addTester(self, strTester):
try:
splitted = strTester.split('<')
name = splitted[0].strip()
email = "<{}".format(splitted[1]).strip()
except Exception as e:
print(e)
print("expected format is: 'Firstname Lastname <email>'")
exit(2)
self.testers.add(name, email)
self.testers.write()
def deleteTester(self, number):
self.listTesters()
removed = self.feedbacks.pop(number)
self.testers.remove(removed)
print("New list:")
self.feedbacks = None
self.listTesters()
print(("Removed: {}".format(removed)))
ans = User.request("Save on disk? (s/Q)").lower()
if ans in ['s']:
self.testers.write()
def listTesters(self):
self._getTestersByFeedback()
count = 0
for tester in self.feedbacks:
feedback = "ok"
if tester.getFeedback() is not True:
feedback = "no"
print(("{:02d} - {} {}: {}".format(
count, tester.getName(), tester.getEmail(), feedback
)
))
count += 1
def switchFeedback(self):
self._getTestersByFeedback()
msg = "Switch tester: [<number>/s/q]"
self.listTesters()
number = User.request(msg)
while number.lower() not in ['s', 'save', 'q', 'quit']:
if number == '':
continue
try:
number = int(number)
self.feedbacks[number].switchFeedback()
except (ValueError, IndexError) as e:
print(e)
exit(1)
finally:
self.listTesters()
number = User.request(msg)
if number in ['s', 'save']:
self.testers.write()
self.listTesters()
def reset(self):
self.testers.reset()
self.testers.write()
# def updateMailaliases(self):
if __name__ == '__main__':
Git.chdirToRepositoryTopLevel()
app = App()
app.parseArgs()
app.run()
|