[entropy.output] make TextInterface methods classmethods

This makes possible to fix a circular dependency in the Entropy
Resources Lock management methods
This commit is contained in:
Fabio Erculiani
2013-12-05 21:36:30 +01:00
parent 391ed26f4f
commit 82b85704ce
4 changed files with 38 additions and 33 deletions

View File

@@ -12,7 +12,6 @@
import argparse
from entropy.i18n import _
from entropy.output import TextInterface
from solo.commands.descriptor import SoloCommandDescriptor
from solo.commands.command import SoloCommand

View File

@@ -909,7 +909,7 @@ class UrlFetcher(TextInterface):
if len(average) < 2:
average = " "+average
current_txt += " <-> "+average+"% "+bartext
TextInterface.output(self, current_txt, back = True)
TextInterface.output(current_txt, back = True)
def update(self):
"""
@@ -1131,7 +1131,7 @@ class MultipleUrlFetcher(TextInterface):
def __show_download_files_info(self):
count = 0
pl = self._url_path_list[:]
TextInterface.output(self,
TextInterface.output(
"%s: %s %s" % (
darkblue(_("Aggregated download")),
darkred(str(len(pl))),
@@ -1145,7 +1145,7 @@ class MultipleUrlFetcher(TextInterface):
count += 1
fname = os.path.basename(url)
uri = spliturl(url)[1]
TextInterface.output(self,
TextInterface.output(
"[%s] %s => %s" % (
darkblue(str(count)),
darkgreen(uri),
@@ -1299,7 +1299,7 @@ class MultipleUrlFetcher(TextInterface):
if len(myavg) < 2:
myavg = " "+myavg
current_txt += " <-> "+myavg+"% "+bartext+" "
TextInterface.output(self, current_txt, back = True)
TextInterface.output(current_txt, back = True)
self.__old_average = average

View File

@@ -687,7 +687,8 @@ class TextInterface(object):
with the user, channel is bi-directional.
"""
def output(self, text, header = "", footer = "", back = False,
@classmethod
def output(cls, text, header = "", footer = "", back = False,
importance = 0, level = "info", count = None, percent = False):
"""
@@ -745,7 +746,8 @@ class TextInterface(object):
myfunc(header+count_str+text+footer, back = back, flush = False)
_flush_stdouterr()
def ask_question(self, question, importance = 0, responses = None):
@classmethod
def ask_question(cls, question, importance = 0, responses = None):
"""
Questions asking function. It asks the user to answer the question given
@@ -803,7 +805,8 @@ class TextInterface(object):
xterm_title_reset()
_flush_stdouterr()
def input_box(self, title, input_parameters, cancel_button = True):
@classmethod
def input_box(cls, title, input_parameters, cancel_button = True):
"""
Generic input box (form) creator and data collector.
@@ -844,11 +847,11 @@ class TextInterface(object):
mydict = {}
counter = 1
option_text, option_list = option_data
self.output(option_text)
cls.output(option_text)
for item in option_list:
mydict[counter] = item
txt = "[%s] %s" % (darkgreen(str(counter)), blue(item),)
self.output(txt)
cls.output(txt)
counter += 1
while True:
try:
@@ -874,17 +877,17 @@ class TextInterface(object):
def list_editor(option_data, can_cancel, callback):
def selaction():
self.output('')
self.output(darkred(_("Please select an option")))
cls.output('')
cls.output(darkred(_("Please select an option")))
if can_cancel:
self.output(" ("+blue("-1")+") "+darkred(_("Discard all")))
self.output(" ("+blue("0")+") "+darkgreen(_("Confirm")))
self.output(" ("+blue("1")+") "+brown(_("Add item")))
self.output(" ("+blue("2")+") "+brown(_("Edit item")))
self.output(" ("+blue("3")+") "+darkblue(_("Remove item")))
self.output(" ("+blue("4")+") "+darkgreen(_("Show current list")))
cls.output(" ("+blue("-1")+") "+darkred(_("Discard all")))
cls.output(" ("+blue("0")+") "+darkgreen(_("Confirm")))
cls.output(" ("+blue("1")+") "+brown(_("Add item")))
cls.output(" ("+blue("2")+") "+brown(_("Edit item")))
cls.output(" ("+blue("3")+") "+darkblue(_("Remove item")))
cls.output(" ("+blue("4")+") "+darkgreen(_("Show current list")))
# wait user interaction
self.output('')
cls.output('')
try:
action = readtext(darkgreen(_("Your choice (type a number and press enter):"))+" ")
except UnicodeDecodeError:
@@ -898,18 +901,18 @@ class TextInterface(object):
valid_actions.insert(0, -1)
option_text, option_list = option_data
txt = "%s:" % (blue(option_text),)
self.output(txt)
cls.output(txt)
for item in option_list:
mydict[counter] = item
txt = "[%s] %s" % (darkgreen(str(counter)), blue(item),)
self.output(txt)
cls.output(txt)
counter += 1
def show_current_list():
for key in sorted(mydict):
txt = "[%s] %s" % (darkgreen(str(key)), blue(mydict[key]),)
self.output(txt)
cls.output(txt)
while True:
try:
@@ -918,10 +921,10 @@ class TextInterface(object):
show_current_list()
action = int(sel_action)
except (ValueError, TypeError,):
self.output(_("You don't have typed a number."), level = "warning")
cls.output(_("You don't have typed a number."), level = "warning")
continue
if action not in valid_actions:
self.output(_("Invalid action."), level = "warning")
cls.output(_("Invalid action."), level = "warning")
continue
if action == -1:
raise KeyboardInterrupt()
@@ -941,7 +944,7 @@ class TextInterface(object):
mydict[counter] = s_el
counter += 1
except (ValueError,):
self.output(_("Invalid string."), level = "warning")
cls.output(_("Invalid string."), level = "warning")
continue
break
show_current_list()
@@ -968,7 +971,7 @@ class TextInterface(object):
raise ValueError()
mydict[s_el] = new_s_val[:]
except (ValueError, TypeError,):
self.output(_("Invalid element."), level = "warning")
cls.output(_("Invalid element."), level = "warning")
continue
break
show_current_list()
@@ -986,7 +989,7 @@ class TextInterface(object):
raise ValueError()
del mydict[s_el]
except (ValueError, TypeError,):
self.output(_("Invalid element."), level = "warning")
cls.output(_("Invalid element."), level = "warning")
continue
break
show_current_list()
@@ -1007,7 +1010,7 @@ class TextInterface(object):
myresult = False
input_type, data = input_text
if input_type == "checkbox":
answer = self.ask_question(data)
answer = cls.ask_question(data)
if answer == _("Yes"):
myresult = True
elif input_type == "combo":
@@ -1034,7 +1037,8 @@ class TextInterface(object):
break
return results
def edit_file(self, file_path):
@classmethod
def edit_file(cls, file_path):
"""
Open a file editor on given file path (file_path).
@@ -1046,7 +1050,8 @@ class TextInterface(object):
editor = os.getenv("EDITOR", "/bin/nano")
return subprocess.call((editor, file_path)) == 0
def set_title(self, title):
@classmethod
def set_title(cls, title):
"""
Set application title.

View File

@@ -187,16 +187,17 @@ class Entropy(Client):
DaemonUrlFetcher.set_daemon(daemon)
DaemonMultipleUrlFetcher.set_daemon(daemon)
def output(self, text, header = "", footer = "", back = False,
@classmethod
def output(cls, text, header = "", footer = "", back = False,
importance = 0, level = "info", count = None,
percent = False, _raw=False):
if self._DAEMON is not None:
if cls._DAEMON is not None:
count_c = 0
count_t = 0
if count is not None:
count_c, count_t = count
GLib.idle_add(
self._DAEMON.output,
cls._DAEMON.output,
text, header, footer, back, importance,
level, count_c, count_t, percent, _raw)