store_post_load, translation_post_add, unit_pre_create, vcs_post_commit, vcs_post_push, vcs_post_update, vcs_pre_commit, vcs_pre_push, vcs_pre_update, ) from weblate.utils.classloader import ClassLoader from weblate.utils.decorators import disable_for_loaddata from weblate.utils.fields import JSONField # Initialize addons registry ADDONS = ClassLoader("WEBLATE_ADDONS", False) class AddonQuerySet(models.QuerySet): def filter_component(self, component): return self.prefetch_related("event_set").filter( (Q(component=component) & Q(project_scope=False)) | (Q(component__project=component.project) & Q(project_scope=True)) | (Q(component__linked_component=component) & Q(repo_scope=True)) | (Q(component=component.linked_component) & Q(repo_scope=True))) def filter_event(self, component, event): if component.addons_cache is None: component.addons_cache = defaultdict(list) for addon in self.filter_component(component): for installed in addon.event_set.all():
vcs_post_push, vcs_post_update, vcs_pre_commit, vcs_post_commit, translation_post_add, unit_pre_create, store_post_load, vcs_pre_update, vcs_pre_push, ) from weblate.utils.classloader import ClassLoader from weblate.utils.decorators import disable_for_loaddata from weblate.utils.fields import JSONField # Initialize addons registry ADDONS = ClassLoader('WEBLATE_ADDONS', False) class AddonQuerySet(models.QuerySet): def filter_component(self, component): return self.filter( (Q(component=component) & Q(project_scope=False)) | (Q(component__project=component.project) & Q(project_scope=True)) | (Q(component__linked_component=component) & Q(repo_scope=True))) def filter_event(self, component, event): if event not in component.addons_cache: component.addons_cache[event] = self.filter_component( component).filter(event__event=event) return component.addons_cache[event]
# -*- coding: utf-8 -*- # # Copyright © 2012 - 2017 Michal Čihař <*****@*****.**> # # This file is part of Weblate <https://weblate.org/> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. # from weblate.utils.classloader import ClassLoader # Initialize checks list MACHINE_TRANSLATION_SERVICES = ClassLoader('MACHINE_TRANSLATION_SERVICES')
if unit is None: return [] highlights = [] for check in CHECKS: if not CHECKS[check].target: continue highlights += CHECKS[check].check_highlight(source, unit) # Sort by order in string highlights.sort(key=lambda x: x[0]) # Remove overlapping ones for hl_idx in range(0, len(highlights)): if hl_idx >= len(highlights): break elref = highlights[hl_idx] for hl_idx_next in range(hl_idx + 1, len(highlights)): if hl_idx_next >= len(highlights): break eltest = highlights[hl_idx_next] if eltest[0] >= elref[0] and eltest[0] < elref[1]: highlights.pop(hl_idx_next) elif eltest[0] > elref[1]: break return highlights # Initialize checks list CHECKS = ClassLoader('CHECK_LIST')
def test_none(self): loader = ClassLoader("TEST_SERVICES", construct=False) loader.load_data() self.assertEqual(len(list(loader.keys())), 0)
def test_invalid(self): loader = ClassLoader("TEST_SERVICES", construct=False) with self.assertRaisesRegex( ImproperlyConfigured, "Setting TEST_SERVICES must be list or tuple!"): loader.load_data()
# # Copyright © 2012–2022 Michal Čihař <*****@*****.**> # # This file is part of Weblate <https://weblate.org/> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. # from weblate.utils.classloader import ClassLoader # Initialize checks list MACHINE_TRANSLATION_SERVICES = ClassLoader("MT_SERVICES")
# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. # """Import all the autofixes defined in settings. Note, unlike checks, using a sortable data object so fixes are applied in desired order. """ from weblate.utils.classloader import ClassLoader AUTOFIXES = ClassLoader("AUTOFIX_LIST") def fix_target(target, unit): """Apply each autofix to the target translation.""" if target == []: return target, [] fixups = [] for _unused, fix in AUTOFIXES.items(): target, fixed = fix.fix_target(target, unit) if fixed: fixups.append(fix.name) return target, fixups
# This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # ''' Import all the autofixes defined in settings. Note, unlike checks, using a sortable data object so fixes are applied in desired order. ''' from weblate.utils.classloader import ClassLoader AUTOFIXES = ClassLoader('AUTOFIX_LIST') def fix_target(target, unit): ''' Apply each autofix to the target translation. ''' if target == []: return target, [] fixups = [] for dummy, fix in AUTOFIXES.items(): target, fixed = fix.fix_target(target, unit) if fixed: fixups.append(fix.name) return target, fixups