Exemple #1
0
    def handle(self, *args, **options):
        """List installed checks."""
        ignores = []
        lines = []
        for check in sorted(CHECKS.values(), key=sorter):
            is_format = isinstance(check, BaseFormatCheck)
            if not is_format and lines:
                self.flush_lines(lines)
            # Output immediately
            self.stdout.write(f".. _{check.doc_id}:\n")
            if not lines:
                lines.append("\n")
            lines.append(str(check.name))
            if is_format:
                lines.append("*" * len(check.name))
            else:
                lines.append("~" * len(check.name))
            lines.append("\n")
            lines.append("\n".join(wrap(f"*{check.description}*", 79)))
            lines.append("\n")

            if not is_format:
                self.flush_lines(lines)

            ignores.append(f"``{check.ignore_string}``")
            ignores.append(f'    Skip the "{check.name}" quality check.')

        self.stdout.write("\n")
        self.stdout.writelines(ignores)
Exemple #2
0
class Migration(migrations.Migration):

    replaces = [("checks", "0001_initial"), ("checks", "0002_auto_20180416_1509")]

    initial = True

    dependencies = [
        ("lang", "0011_auto_20180215_1158"),
        ("trans", "0130_auto_20180416_1503"),
    ]

    operations = [
        migrations.CreateModel(
            name="Check",
            fields=[
                (
                    "id",
                    models.AutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("content_hash", models.BigIntegerField()),
                (
                    "check",
                    models.CharField(choices=CHECKS.get_choices(), max_length=50),
                ),
                ("ignore", models.BooleanField(db_index=True, default=False)),
                (
                    "language",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        to="lang.Language",
                    ),
                ),
                (
                    "project",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE, to="trans.Project"
                    ),
                ),
            ],
        ),
        migrations.AlterUniqueTogether(
            name="check",
            unique_together={("content_hash", "project", "language", "check")},
        ),
        migrations.AlterIndexTogether(
            name="check", index_together={("project", "language", "content_hash")}
        ),
    ]
Exemple #3
0
    def handle(self, *args, **options):
        """List installed checks."""
        ignores = []
        enables = []
        lines = []
        for check in sorted(CHECKS.values(), key=sorter):
            check_class = check.__class__
            is_format = isinstance(check, BaseFormatCheck)
            # Output immediately
            self.stdout.write(f".. _{check.doc_id}:\n")
            if not lines:
                lines.append("\n")
            name = escape(check.name)
            lines.append(name)
            if is_format:
                lines.append("*" * len(name))
            else:
                lines.append("~" * len(name))
            lines.append("\n")
            lines.append(f":Summary: {escape(check.description)}")
            if check.target:
                if check.ignore_untranslated:
                    lines.append(":Scope: translated strings")
                else:
                    lines.append(":Scope: all strings")
            if check.source:
                lines.append(":Scope: source strings")
            lines.append(
                f":Check class: ``{check_class.__module__}.{check_class.__qualname__}``"
            )
            if check.default_disabled:
                lines.append(f":Flag to enable: ``{check.enable_string}``")
            lines.append(f":Flag to ignore: ``{check.ignore_string}``")
            lines.append("\n")

            self.flush_lines(lines)

            ignores.append(f"``{check.ignore_string}``")
            ignores.append(
                f"    Skip the :ref:`{check.doc_id}` quality check.")
            if check.default_disabled:
                enables.append(f"``{check.enable_string}``")
                enables.append(
                    f"    Enable the :ref:`{check.doc_id}` quality check.")

        self.stdout.write("\n")
        self.stdout.writelines(enables)
        self.stdout.writelines(ignores)
Exemple #4
0
class Migration(migrations.Migration):

    replaces = [
        ("checks", "0001_squashed_0002_auto_20180416_1509"),
        ("checks", "0002_check_unit"),
        ("checks", "0003_auto_20191212_1441"),
    ]

    initial = True

    dependencies = [
        ("trans", "0001_squashed_0143_auto_20180609_1655"),
        ("lang", "0001_squashed_0011_auto_20180215_1158"),
        ("trans", "0052_auto_20191212_1403"),
        ("trans", "0054_auto_20191212_1441"),
    ]

    operations = [
        migrations.CreateModel(
            name="Check",
            fields=[
                (
                    "id",
                    models.AutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                (
                    "check",
                    models.CharField(
                        choices=CHECKS.get_choices(),
                        max_length=50,
                    ),
                ),
                ("ignore", models.BooleanField(db_index=True, default=False)),
                (
                    "unit",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        to="trans.Unit"),
                ),
            ],
            options={"unique_together": {("unit", "check")}},
        ),
    ]
Exemple #5
0
    def handle(self, *args, **options):
        """List installed checks."""
        lines = []
        for check in sorted(CHECKS.values(), key=sorter):
            is_format = isinstance(check, BaseFormatCheck)
            if not is_format and lines:
                self.flush_lines(lines)
            # Output immediatelly
            self.stdout.write(".. _{}:\n".format(check.doc_id))
            if not lines:
                lines.append("\n")
            lines.append(str(check.name))
            if is_format:
                lines.append("*" * len(check.name))
            else:
                lines.append("~" * len(check.name))
            lines.append("\n")
            lines.append("\n".join(wrap("*{}*".format(check.description), 79)))
            lines.append("\n")

            if not is_format:
                self.flush_lines(lines)
Exemple #6
0
 def prefetch_checks(self):
     """Prefetch check stats."""
     allchecks = {check.url_id for check in CHECKS.values()}
     stats = (self._object.unit_set.filter(
         check__dismissed=False).values("check__check").annotate(
             strings=Count("pk"),
             words=Sum("num_words"),
             chars=Sum(Length("source"))))
     for stat in stats:
         check = stat["check__check"]
         # Filtering here is way more effective than in SQL
         if check is None:
             continue
         check = "check:{}".format(check)
         self.store(check, stat["strings"])
         self.store(check + "_words", stat["words"])
         self.store(check + "_chars", stat["chars"])
         allchecks.discard(check)
     for check in allchecks:
         self.store(check, 0)
         self.store(check + "_words", 0)
         self.store(check + "_chars", 0)
Exemple #7
0
from django.core.exceptions import ValidationError
from django.utils.translation import gettext as _
from django.utils.translation import gettext_lazy

from weblate.checks.models import CHECKS
from weblate.checks.parser import (
    SYNTAXCHARS,
    FlagsParser,
    multi_value_flag,
    single_value_flag,
)
from weblate.fonts.utils import get_font_weight

PLAIN_FLAGS = {
    v.enable_string: v.name
    for k, v in CHECKS.items() if v.default_disabled and not v.param_type
}
TYPED_FLAGS = {
    v.enable_string: v.name
    for k, v in CHECKS.items() if v.param_type
}
TYPED_FLAGS_ARGS = {
    v.enable_string: v.param_type
    for k, v in CHECKS.items() if v.param_type
}

PLAIN_FLAGS["rst-text"] = gettext_lazy("RST text")
PLAIN_FLAGS["md-text"] = gettext_lazy("Markdown text")
PLAIN_FLAGS["xml-text"] = gettext_lazy("XML text")
PLAIN_FLAGS["dos-eol"] = gettext_lazy("DOS line endings")
PLAIN_FLAGS["url"] = gettext_lazy("URL")
Exemple #8
0
from django.core.exceptions import ValidationError
from django.utils.translation import gettext as _
from django.utils.translation import gettext_lazy

from weblate.checks.models import CHECKS
from weblate.checks.parser import (
    SYNTAXCHARS,
    FlagsParser,
    multi_value_flag,
    single_value_flag,
)
from weblate.fonts.utils import get_font_weight

PLAIN_FLAGS = {
    v.enable_string: v.name
    for k, v in CHECKS.items()
    if v.default_disabled and not v.param_type
}
TYPED_FLAGS = {v.enable_string: v.name for k, v in CHECKS.items() if v.param_type}
TYPED_FLAGS_ARGS = {
    v.enable_string: v.param_type for k, v in CHECKS.items() if v.param_type
}

PLAIN_FLAGS["rst-text"] = gettext_lazy("RST text")
PLAIN_FLAGS["md-text"] = gettext_lazy("Markdown text")
PLAIN_FLAGS["xml-text"] = gettext_lazy("XML text")
PLAIN_FLAGS["dos-eol"] = gettext_lazy("DOS line endings")
PLAIN_FLAGS["url"] = gettext_lazy("URL")
PLAIN_FLAGS["auto-java-messageformat"] = gettext_lazy(
    "Automatically detect Java MessageFormat"
)