mirror of
https://github.com/YunoHost/moulinette.git
synced 2024-09-03 20:06:31 +02:00
[enh] add a msignal.file_display capability for cli
This commit is contained in:
parent
201b033606
commit
1622cb1fdc
2 changed files with 39 additions and 1 deletions
|
@ -307,7 +307,7 @@ class MoulinetteSignals(object):
|
||||||
# Signals definitions
|
# Signals definitions
|
||||||
|
|
||||||
"""The list of available signals"""
|
"""The list of available signals"""
|
||||||
signals = {"authenticate", "prompt", "display"}
|
signals = {"authenticate", "prompt", "display", "file_display"}
|
||||||
|
|
||||||
def authenticate(self, authenticator):
|
def authenticate(self, authenticator):
|
||||||
"""Process the authentication
|
"""Process the authentication
|
||||||
|
@ -368,6 +368,19 @@ class MoulinetteSignals(object):
|
||||||
except NotImplementedError:
|
except NotImplementedError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def file_display(self, file_path):
|
||||||
|
"""Display a message
|
||||||
|
|
||||||
|
Display the content of a file at file_path.
|
||||||
|
|
||||||
|
Keyword arguments:
|
||||||
|
- file_path -- The path to the file
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
self._file_display(file_path)
|
||||||
|
except NotImplementedError:
|
||||||
|
pass
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _notimplemented(*args, **kwargs):
|
def _notimplemented(*args, **kwargs):
|
||||||
raise NotImplementedError("this signal is not handled")
|
raise NotImplementedError("this signal is not handled")
|
||||||
|
|
|
@ -5,6 +5,7 @@ import sys
|
||||||
import getpass
|
import getpass
|
||||||
import locale
|
import locale
|
||||||
import logging
|
import logging
|
||||||
|
import subprocess
|
||||||
from argparse import SUPPRESS
|
from argparse import SUPPRESS
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
from datetime import date, datetime
|
from datetime import date, datetime
|
||||||
|
@ -443,6 +444,7 @@ class Interface(BaseInterface):
|
||||||
if os.isatty(1):
|
if os.isatty(1):
|
||||||
msignals.set_handler("authenticate", self._do_authenticate)
|
msignals.set_handler("authenticate", self._do_authenticate)
|
||||||
msignals.set_handler("prompt", self._do_prompt)
|
msignals.set_handler("prompt", self._do_prompt)
|
||||||
|
msignals.set_handler("file_display", self._do_file_display)
|
||||||
|
|
||||||
self.actionsmap = ActionsMap(
|
self.actionsmap = ActionsMap(
|
||||||
ActionsMapParser(top_parser=top_parser),
|
ActionsMapParser(top_parser=top_parser),
|
||||||
|
@ -550,3 +552,26 @@ class Interface(BaseInterface):
|
||||||
print("{} {}".format(colorize(m18n.g("error"), "red"), message))
|
print("{} {}".format(colorize(m18n.g("error"), "red"), message))
|
||||||
else:
|
else:
|
||||||
print(message)
|
print(message)
|
||||||
|
|
||||||
|
def _do_file_display(self, file_path):
|
||||||
|
"""Display the content of a file
|
||||||
|
|
||||||
|
Handle the core.MoulinetteSignals.file_display signal.
|
||||||
|
|
||||||
|
"""
|
||||||
|
# in python 3 we'll be able to uses shutil.get_terminal_size
|
||||||
|
rows, _ = subprocess.check_output("stty size", shell=True).strip().split(" ")
|
||||||
|
file_length = (
|
||||||
|
subprocess.check_output("wc -l %s" % file_path, shell=True)
|
||||||
|
.strip()
|
||||||
|
.split(" ")[0]
|
||||||
|
)
|
||||||
|
|
||||||
|
rows = int(rows)
|
||||||
|
file_length = int(file_length)
|
||||||
|
|
||||||
|
# 80% of file_length, we assume that above is too uncounfortable
|
||||||
|
if (file_length * 0.8) > rows:
|
||||||
|
os.system("less %s" % file_path)
|
||||||
|
else:
|
||||||
|
print(open(file_path).read())
|
||||||
|
|
Loading…
Add table
Reference in a new issue