diagnostics: Lazy format all diagnostic test strings properly

Helps: #1938.

Fixed application of available translations in daemon.py and apache,
diagnostics, networks, firewall and users modules.

diagnostics:
- __init__.py: return the app name along its results.
- diagnostics.html: display the app name instead of its id.
- diagnostics_results.html:
  - mark for translation,
  - apply class to results <td> HTML tag.

main.css: center-align the results.

Locale files excluded. Will be regenerated automatically and translations to be
done via Weblate.

original testing (rebased later):
- Yapf applied.
- Flake8 without errors or warnings for changed files.
- (Unit) tests run without errors.

Signed-off-by: Fioddor Superconcentrado <fioddor@gmail.com>
[sunil: Translate 'None' app name]
[sunil: Don't translate tests strings second time in template]
[sunil: Tweak the center rule]
[sunil: Don't split a translation string]
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
This commit is contained in:
Fioddor Superconcentrado 2020-10-13 21:34:17 +02:00 committed by Sunil Mohan Adapa
parent f1f84a2509
commit 633f54b75c
No known key found for this signature in database
GPG Key ID: 43EA1CFF0AA7C5F2
9 changed files with 62 additions and 40 deletions

View File

@ -7,7 +7,8 @@ import socket
import subprocess
import psutil
from django.utils.translation import ugettext as _
from django.utils.text import format_lazy
from django.utils.translation import ugettext as _, ugettext_lazy
from plinth import action_utils, actions, app
@ -82,10 +83,12 @@ class Daemon(app.LeaderComponent):
def _diagnose_unit_is_running(self):
"""Check if a daemon is running."""
message = _('Service {service_name} is running').format(
service_name=self.unit)
result = 'passed' if self.is_running() else 'failed'
return [message, result]
template = ugettext_lazy('Service {service_name} is running')
testname = format_lazy(template, service_name=self.unit)
return [testname, result]
def app_is_running(app_):
@ -108,13 +111,15 @@ def diagnose_port_listening(port, kind='tcp', listen_address=None):
result = _check_port(port, kind, listen_address)
if listen_address:
test = _('Listening on {kind} port {listen_address}:{port}') \
.format(kind=kind, listen_address=listen_address, port=port)
template = ugettext_lazy(
'Listening on {kind} port {listen_address}:{port}')
testname = format_lazy(template, kind=kind,
listen_address=listen_address, port=port)
else:
test = _('Listening on {kind} port {port}') \
.format(kind=kind, port=port)
template = ugettext_lazy('Listening on {kind} port {port}')
testname = format_lazy(template, kind=kind, port=port)
return [test, 'passed' if result else 'failed']
return [testname, 'passed' if result else 'failed']
def _check_port(port, kind='tcp', listen_address=None):

View File

@ -6,13 +6,15 @@ App component for other apps to use Apache configuration functionality.
import re
import subprocess
from django.utils.translation import ugettext as _
from django.utils.text import format_lazy
from django.utils.translation import ugettext_lazy
from plinth import action_utils, actions, app
class Webserver(app.LeaderComponent):
"""Component to enable/disable Apache configuration."""
def __init__(self, component_id, web_name, kind='config', urls=None):
"""Initialize the web server component.
@ -71,6 +73,7 @@ class Webserver(app.LeaderComponent):
class Uwsgi(app.LeaderComponent):
"""Component to enable/disable uWSGI configuration."""
def __init__(self, component_id, uwsgi_name):
"""Initialize the uWSGI component.
@ -116,12 +119,13 @@ def diagnose_url(url, kind=None, env=None, check_certificate=True,
wrapper, expected_output)
if kind:
return [
_('Access URL {url} on tcp{kind}').format(url=url, kind=kind),
result
]
template = ugettext_lazy('Access URL {url} on tcp{kind}')
testname = format_lazy(template, url=url, kind=kind)
else:
template = ugettext_lazy('Access URL {url}')
testname = format_lazy(template, url=url)
return [_('Access URL {url}').format(url=url), result]
return [testname, result]
def diagnose_url_on_all(url, **kwargs):

View File

@ -129,7 +129,11 @@ def run_on_all_enabled_modules():
current_results['apps'] = apps
for current_index, (app_id, app) in enumerate(apps):
current_results['results'][app_id] = app.diagnose()
app_name = app.info.name or _('None')
current_results['results'][app_id] = {
'name': app_name,
'results': app.diagnose()
}
current_results['progress_percentage'] = \
int((current_index + 1) * 100 / len(apps))

View File

@ -37,11 +37,15 @@
{{ results.error }}
</div>
{% else %}
{% for app_id, app_results in results.results.items %}
<h4>{% blocktrans %}App: {{ app_id }}{% endblocktrans %}</h4>
{% for app_id, app_data in results.results.items %}
<h4>
{% blocktrans with app_name=app_data.name %}
App: {{app_name}}
{% endblocktrans %}
</h4>
{% if app_results %}
{% include "diagnostics_results.html" with results=app_results %}
{% if app_data.results %}
{% include "diagnostics_results.html" with results=app_data.results %}
{% else %}
<p><span class="fa fa-hourglass-o"></span></p>
{% endif %}

View File

@ -15,7 +15,7 @@
{% for test, result in results %}
<tr>
<td>{{ test }}</td>
<td>
<td class="diagnostics-result">
{% if result == 'passed' %}
<span class="label label-success">{% trans result %}</span>
{% elif result == 'failed' %}

View File

@ -6,6 +6,7 @@ App component for other apps to use firewall functionality.
import logging
import re
from django.utils.text import format_lazy
from django.utils.translation import ugettext_lazy as _
from plinth import app
@ -129,24 +130,24 @@ class Firewall(app.FollowerComponent):
# Internal zone
result = 'passed' if port in internal_ports else 'failed'
message = _(
'Port {name} ({details}) available for internal networks'
).format(name=port, details=details)
results.append([message, result])
template = _(
'Port {name} ({details}) available for internal networks')
testname = format_lazy(template, name=port, details=details)
results.append([testname, result])
# External zone
if self.is_external:
result = 'passed' if port in external_ports else 'failed'
message = _(
'Port {name} ({details}) available for external networks'
).format(name=port, details=details)
template = _(
'Port {name} ({details}) available for external networks')
testname = format_lazy(template, name=port, details=details)
else:
result = 'passed' if port not in external_ports else 'failed'
message = _(
template = _(
'Port {name} ({details}) unavailable for external networks'
).format(name=port, details=details)
results.append([message, result])
)
testname = format_lazy(template, name=port, details=details)
results.append([testname, result])
return results

View File

@ -6,6 +6,7 @@ FreedomBox app to interface with network-manager.
import subprocess
from logging import Logger
from django.utils.text import format_lazy
from django.utils.translation import ugettext_lazy as _
from plinth import actions
@ -175,4 +176,7 @@ def _diagnose_dnssec(kind='4'):
except subprocess.CalledProcessError:
pass
return [_('Using DNSSEC on IPv{kind}').format(kind=kind), result]
template = _('Using DNSSEC on IPv{kind}')
testname = format_lazy(template, kind=kind)
return [testname, result]

View File

@ -6,13 +6,12 @@ FreedomBox app to manage users.
import grp
import subprocess
from django.utils.translation import ugettext_lazy as _
from plinth import actions
from plinth import app as app_module
from plinth import cfg, menu
from plinth.daemon import Daemon
from plinth.utils import format_lazy
from django.utils.text import format_lazy
from django.utils.translation import ugettext_lazy as _, ugettext_lazy
from .components import UsersAndGroups
@ -111,10 +110,10 @@ def _diagnose_ldap_entry(search_item):
except subprocess.CalledProcessError:
pass
return [
_('Check LDAP entry "{search_item}"').format(search_item=search_item),
result
]
template = ugettext_lazy('Check LDAP entry "{search_item}"')
testname = format_lazy(template, search_item=search_item)
return [testname, result]
def create_group(group):

View File

@ -177,6 +177,7 @@ body {
.diagnostics-results .diagnostics-result {
width: 60px;
text-align: center;
}
/* Sticky footer styles