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

1# Copyright © Michal Čihař <michal@weblate.org> 

2# 

3# SPDX-License-Identifier: GPL-3.0-or-later 

4 

5from appconf import AppConf 

6from django.utils.functional import cached_property 

7 

8from weblate.utils.classloader import ClassLoader 

9 

10from .base import BaseExporter, TranslationFormat 

11 

12 

13class ExporterLoader(ClassLoader): 

14 def __init__(self) -> None: 

15 super().__init__("WEBLATE_EXPORTERS", construct=False, base_class=BaseExporter) 

16 

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 ] 

23 

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 ] 

30 

31 

32EXPORTERS = ExporterLoader() 

33 

34 

35class FileFormatLoader(ClassLoader): 

36 def __init__(self) -> None: 

37 super().__init__( 

38 "WEBLATE_FORMATS", construct=False, base_class=TranslationFormat 

39 ) 

40 self.errors = {} 

41 

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 ] 

49 

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 

56 

57 

58FILE_FORMATS = FileFormatLoader() 

59 

60 

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 ) 

77 

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 ) 

145 

146 class Meta: 

147 prefix = "WEBLATE"