Coverage for app/venv/lib/python3.14/site-packages/weblate/trans/management/commands/import_demo.py: 0%
34 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 07:15 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 07:15 +0000
1# Copyright © Michal Čihař <michal@weblate.org>
2#
3# SPDX-License-Identifier: GPL-3.0-or-later
4from __future__ import annotations
6from time import sleep
7from typing import TYPE_CHECKING
9from django.test.utils import override_settings
11from weblate.addons.discovery import DiscoveryAddon
12from weblate.trans.models import Component, Project
13from weblate.trans.tasks import actual_project_removal
14from weblate.utils.management.base import BaseCommand
16if TYPE_CHECKING:
17 from django.core.management.base import CommandParser
20class Command(BaseCommand):
21 """Command for creating demo project."""
23 help = "imports demo project and components"
25 def add_arguments(self, parser: CommandParser) -> None:
26 super().add_arguments(parser)
27 parser.add_argument(
28 "--additional", type=int, default=0, help="number of additional components"
29 )
30 parser.add_argument(
31 "--delete",
32 action="store_true",
33 help="Update existing add-ons configuration",
34 )
36 def handle(self, *args, **options) -> None:
37 with override_settings(CELERY_TASK_ALWAYS_EAGER=True):
38 if options["delete"]:
39 try:
40 project = Project.objects.get(slug="demo")
41 except Project.DoesNotExist:
42 pass
43 else:
44 # Remove without creating a backup
45 actual_project_removal(project.pk, None)
46 # Create project
47 project = Project.objects.create(
48 name="Demo", slug="demo", web="https://demo.weblate.org/"
49 )
51 # Create main component
52 component = Component.objects.create(
53 name="Gettext",
54 slug="gettext",
55 project=project,
56 vcs="git",
57 repo="https://github.com/WeblateOrg/demo.git",
58 repoweb=(
59 "https://github.com/WeblateOrg/weblate/"
60 "blob/{{branch}}/{{filename}}#L{{line}}"
61 ),
62 filemask="weblate/langdata/locale/*/LC_MESSAGES/django.po",
63 new_base="weblate/langdata/locale/django.pot",
64 file_format="po",
65 license="GPL-3.0-or-later",
66 )
67 while component.in_progress():
68 self.stdout.write(
69 f"Importing base component: {component.get_progress()[0]}%"
70 )
71 sleep(1)
72 component.clean()
74 # Install discovery
75 DiscoveryAddon.create(
76 component=component,
77 configuration={
78 "file_format": "po",
79 "match": (
80 r"weblate/locale/(?P<language>[^/]*)/"
81 r"LC_MESSAGES/(?P<component>[^/]*)\.po"
82 ),
83 "name_template": "Discovered: {{ component|title }}",
84 "language_regex": "^[^.]+$",
85 "base_file_template": "",
86 "remove": True,
87 },
88 )
90 # Manually add Android
91 Component.objects.create(
92 name="Android",
93 slug="android",
94 project=project,
95 vcs="git",
96 repo=component.get_repo_link_url(),
97 filemask="app/src/main/res/values-*/strings.xml",
98 template="app/src/main/res/values/strings.xml",
99 file_format="aresource",
100 license="GPL-3.0-or-later",
101 )
103 for i in range(options["additional"]):
104 Component.objects.create(
105 name=f"Additional {i}",
106 slug=f"additional-{i}",
107 project=project,
108 vcs="git",
109 repo=component.get_repo_link_url(),
110 filemask="weblate/langdata/locale/*/LC_MESSAGES/django.po",
111 new_base="weblate/langdata/locale/django.pot",
112 file_format="po",
113 license="GPL-3.0-or-later",
114 )