Coverage for app/venv/lib/python3.14/site-packages/weblate/formats/models.py: 84%
30 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
5from appconf import AppConf
6from django.utils.functional import cached_property
8from weblate.utils.classloader import ClassLoader
10from .base import BaseExporter, TranslationFormat
13class ExporterLoader(ClassLoader):
14 def __init__(self) -> None:
15 super().__init__("WEBLATE_EXPORTERS", construct=False, base_class=BaseExporter)
17 def list_exporters(self, translation):
18 return [
19 {"name": x.name, "verbose": x.verbose}
20 for x in sorted(self.values(), key=lambda x: x.name)
21 if x.supports(translation)
22 ]
24 def list_exporters_filter(self, allowed):
25 return [
26 {"name": x.name, "verbose": x.verbose}
27 for x in sorted(self.values(), key=lambda x: x.name)
28 if x.name in allowed
29 ]
32EXPORTERS = ExporterLoader()
35class FileFormatLoader(ClassLoader):
36 def __init__(self) -> None:
37 super().__init__(
38 "WEBLATE_FORMATS", construct=False, base_class=TranslationFormat
39 )
40 self.errors = {}
42 @cached_property
43 def autoload(self):
44 return [
45 (autoload, fileformat)
46 for fileformat in self.data.values()
47 for autoload in fileformat.autoload
48 ]
50 def get_settings(self):
51 result = list(super().get_settings())
52 # TBX is required for glossaries
53 if "weblate.formats.ttkit.TBXFormat" not in result: 53 ↛ 54line 53 didn't jump to line 54 because the condition on line 53 was never true
54 result.append("weblate.formats.ttkit.TBXFormat")
55 return result
58FILE_FORMATS = FileFormatLoader()
61class FormatsConf(AppConf):
62 EXPORTERS = (
63 "weblate.formats.exporters.PoExporter",
64 "weblate.formats.exporters.PoXliffExporter",
65 "weblate.formats.exporters.XliffExporter",
66 "weblate.formats.exporters.TBXExporter",
67 "weblate.formats.exporters.TMXExporter",
68 "weblate.formats.exporters.MoExporter",
69 "weblate.formats.exporters.CSVExporter",
70 "weblate.formats.exporters.MultiCSVExporter",
71 "weblate.formats.exporters.XlsxExporter",
72 "weblate.formats.exporters.JSONExporter",
73 "weblate.formats.exporters.JSONNestedExporter",
74 "weblate.formats.exporters.AndroidResourceExporter",
75 "weblate.formats.exporters.StringsExporter",
76 )
78 FORMATS = (
79 "weblate.formats.ttkit.PoFormat",
80 "weblate.formats.ttkit.PoMonoFormat",
81 "weblate.formats.ttkit.TSFormat",
82 "weblate.formats.ttkit.XliffFormat",
83 "weblate.formats.ttkit.RichXliffFormat",
84 "weblate.formats.ttkit.PoXliffFormat",
85 "weblate.formats.ttkit.StringsFormat",
86 "weblate.formats.ttkit.StringsUtf8Format",
87 "weblate.formats.ttkit.PropertiesUtf8Format",
88 "weblate.formats.ttkit.PropertiesUtf16Format",
89 "weblate.formats.ttkit.PropertiesFormat",
90 "weblate.formats.ttkit.JoomlaFormat",
91 "weblate.formats.ttkit.GWTFormat",
92 "weblate.formats.ttkit.GWTISOFormat",
93 "weblate.formats.ttkit.PhpFormat",
94 "weblate.formats.ttkit.LaravelPhpFormat",
95 "weblate.formats.ttkit.RESXFormat",
96 "weblate.formats.ttkit.AndroidFormat",
97 "weblate.formats.ttkit.MOKOFormat",
98 "weblate.formats.ttkit.CMPFormat",
99 "weblate.formats.ttkit.JSONFormat",
100 "weblate.formats.ttkit.JSONNestedFormat",
101 "weblate.formats.ttkit.WebExtensionJSONFormat",
102 "weblate.formats.ttkit.I18NextFormat",
103 "weblate.formats.ttkit.CatkeysFormat",
104 "weblate.formats.ttkit.I18NextV4Format",
105 "weblate.formats.ttkit.GoI18JSONFormat",
106 "weblate.formats.ttkit.GoI18V2JSONFormat",
107 "weblate.formats.ttkit.GoTextFormat",
108 "weblate.formats.ttkit.ARBFormat",
109 "weblate.formats.ttkit.FormatJSFormat",
110 "weblate.formats.ttkit.CSVFormat",
111 "weblate.formats.ttkit.CSVUtf8Format",
112 "weblate.formats.ttkit.CSVSimpleFormat",
113 "weblate.formats.ttkit.CSVUtf8SimpleFormat",
114 "weblate.formats.ttkit.CSVSimpleFormatISO",
115 "weblate.formats.ttkit.YAMLFormat",
116 "weblate.formats.ttkit.RubyYAMLFormat",
117 "weblate.formats.ttkit.SubRipFormat",
118 "weblate.formats.ttkit.MicroDVDFormat",
119 "weblate.formats.ttkit.AdvSubStationAlphaFormat",
120 "weblate.formats.ttkit.SubStationAlphaFormat",
121 "weblate.formats.ttkit.DTDFormat",
122 "weblate.formats.ttkit.FlatXMLFormat",
123 "weblate.formats.ttkit.ResourceDictionaryFormat",
124 "weblate.formats.ttkit.INIFormat",
125 "weblate.formats.ttkit.InnoSetupINIFormat",
126 "weblate.formats.ttkit.PropertiesMi18nFormat",
127 "weblate.formats.external.XlsxFormat",
128 "weblate.formats.txt.AppStoreFormat",
129 "weblate.formats.convert.HTMLFormat",
130 "weblate.formats.convert.IDMLFormat",
131 "weblate.formats.convert.OpenDocumentFormat",
132 "weblate.formats.convert.PlainTextFormat",
133 "weblate.formats.convert.DokuWikiFormat",
134 "weblate.formats.convert.MarkdownFormat",
135 "weblate.formats.convert.MediaWikiFormat",
136 "weblate.formats.convert.WindowsRCFormat",
137 "weblate.formats.ttkit.XWikiPropertiesFormat",
138 "weblate.formats.ttkit.XWikiPagePropertiesFormat",
139 "weblate.formats.ttkit.XWikiFullPageFormat",
140 "weblate.formats.ttkit.TBXFormat",
141 "weblate.formats.ttkit.StringsdictFormat",
142 "weblate.formats.ttkit.FluentFormat",
143 "weblate.formats.multi.MultiCSVUtf8Format",
144 )
146 class Meta:
147 prefix = "WEBLATE"