def load_configs(lintconfig, root, l10n_base): """Load l10n configuration files specified in the linter configuration.""" configs = [] env = {"l10n_base": l10n_base} for toml in lintconfig["l10n_configs"]: cfg = TOMLParser().parse( mozpath.join(root, toml), env=env, ignore_missing_includes=True ) cfg.set_locales([LOCALE], deep=True) configs.append(cfg) return configs
def handle( self, quiet=0, verbose=0, validate=False, merge=None, config_paths=[], l10n_base_dir=None, locales=[], defines=[], full=False, return_zero=False, clobber=False, json=None, ): """The instance part of the classmethod call. Using keyword arguments as that is what we need for mach commands in mozilla-central. """ # log as verbose or quiet as we want, warn by default logging_level = logging.WARNING - (verbose - quiet) * 10 logging.basicConfig() logging.getLogger().setLevel(logging_level) config_paths, l10n_base_dir, locales = self.extract_positionals( validate=validate, config_paths=config_paths, l10n_base_dir=l10n_base_dir, locales=locales, ) # when we compare disabled projects, we set our locales # on all subconfigs, so deep is True. locales_deep = full configs = [] config_env = { 'l10n_base': l10n_base_dir } for define in defines: var, _, value = define.partition('=') config_env[var] = value for config_path in config_paths: if config_path.endswith('.toml'): try: config = TOMLParser().parse(config_path, env=config_env) except ConfigNotFound as e: self.parser.exit('config file %s not found' % e.filename) if locales_deep: if not locales: # no explicit locales given, force all locales config.set_locales(config.all_locales, deep=True) else: config.set_locales(locales, deep=True) configs.append(config) else: app = EnumerateApp(config_path, l10n_base_dir) configs.append(app.asConfig()) try: observers = compareProjects( configs, locales, l10n_base_dir, quiet=quiet, merge_stage=merge, clobber_merge=clobber) except (OSError, IOError) as exc: print("FAIL: " + str(exc)) self.parser.exit(2) if json is None or json != '-': details = observers.serializeDetails() if details: print(details) if len(configs) > 1: if details: print('') print("Summaries for") for config_path in config_paths: print(" " + config_path) print(" and the union of these, counting each string once") print(observers.serializeSummaries()) if json is not None: data = [observer.toJSON() for observer in observers] stdout = json == '-' indent = 1 if stdout else None fh = sys.stdout if stdout else open(json, 'w') json_dump(data, fh, sort_keys=True, indent=indent) if stdout: fh.write('\n') fh.close() rv = 1 if not return_zero and observers.error else 0 return rv
def handle( self, quiet=0, verbose=0, validate=False, merge=None, config_paths=[], l10n_base_dir=None, locales=[], defines=[], full=False, return_zero=False, clobber=False, json=None, ): """The instance part of the classmethod call. Using keyword arguments as that is what we need for mach commands in mozilla-central. """ # log as verbose or quiet as we want, warn by default logging_level = logging.WARNING - (verbose - quiet) * 10 logging.basicConfig() logging.getLogger().setLevel(logging_level) config_paths, l10n_base_dir, locales = self.extract_positionals( validate=validate, config_paths=config_paths, l10n_base_dir=l10n_base_dir, locales=locales, ) # when we compare disabled projects, we set our locales # on all subconfigs, so deep is True. locales_deep = full configs = [] config_env = {'l10n_base': l10n_base_dir} for define in defines: var, _, value = define.partition('=') config_env[var] = value for config_path in config_paths: if config_path.endswith('.toml'): try: config = TOMLParser().parse(config_path, env=config_env) except ConfigNotFound as e: self.parser.exit('config file %s not found' % e.filename) if locales_deep: if not locales: # no explicit locales given, force all locales config.set_locales(config.all_locales, deep=True) else: config.set_locales(locales, deep=True) configs.append(config) else: app = EnumerateApp(config_path, l10n_base_dir) configs.append(app.asConfig()) try: observers = compareProjects(configs, locales, l10n_base_dir, quiet=quiet, merge_stage=merge, clobber_merge=clobber) except (OSError, IOError) as exc: print("FAIL: " + str(exc)) self.parser.exit(2) if json is None or json != '-': details = observers.serializeDetails() if details: print(details) if len(configs) > 1: if details: print('') print("Summaries for") for config_path in config_paths: print(" " + config_path) print(" and the union of these, counting each string once") print(observers.serializeSummaries()) if json is not None: data = [observer.toJSON() for observer in observers] stdout = json == '-' indent = 1 if stdout else None fh = sys.stdout if stdout else open(json, 'w') json_dump(data, fh, sort_keys=True, indent=indent) if stdout: fh.write('\n') fh.close() rv = 1 if not return_zero and observers.error else 0 return rv