def execute(self, ext, factory, **kwargs): def translate(msgid, domain=None, mapping=None, context=None, target_language=None, default=None): if default is None: default = str(msgid) if isinstance(msgid, Message): default = "Message" if mapping: default = re.sub(r"\${([a-z_]+)}", r"%(\1)s", default) % mapping if target_language is None: return default if domain is None: with_domain = "" else: with_domain = " with domain '%s'" % domain stripped = default.rstrip("\n ") return "%s ('%s' translation into '%s'%s)%s" % ( stripped, msgid, target_language, with_domain, default[len(stripped) :], ) for input_path, output_path, language in self.find_files(ext): # Make friendly title so we can locate the generated # source when debugging self.shortDescription = lambda: input_path # Very implicitly enable implicit translation based on # a string included in the input path: implicit_i18n = "implicit-i18n" in input_path implicit_i18n_attrs = ("alt", "title") if implicit_i18n else () template = factory( input_path, keep_source=True, strict=False, implicit_i18n_translate=implicit_i18n, implicit_i18n_attributes=implicit_i18n_attrs, ) params = kwargs.copy() params.update({"translate": translate, "target_language": language}) template.cook_check() try: got = template.render(**params) except: import traceback e = traceback.format_exc() self.fail( "%s\n\n Example source:\n\n%s" % ( e, "\n".join( [ "%#03.d%s" % (lineno + 1, line and " " + line or "") for (lineno, line) in enumerate(template.source.split("\n")) ] ), ) ) if isinstance(got, byte_string): got = got.decode("utf-8") from doctest import OutputChecker checker = OutputChecker() if not os.path.exists(output_path): output = template.body else: with open(output_path, "rb") as f: output = f.read() from chameleon.utils import read_xml_encoding from chameleon.utils import detect_encoding if template.content_type == "text/xml": encoding = read_xml_encoding(output) or template.default_encoding else: content_type, encoding = detect_encoding(output, template.default_encoding) want = output.decode(encoding) if checker.check_output(want, got, 0) is False: from doctest import Example example = Example(input_path, want) diff = checker.output_difference(example, got, 0) self.fail("(%s) - \n%s\n\nCode:\n%s" % (input_path, diff.rstrip("\n"), template.source.encode("utf-8")))
def execute(self, ext, factory, **kwargs): def translate(msgid, domain=None, mapping=None, context=None, target_language=None, default=None): if default is None: default = str(msgid) if isinstance(msgid, Message): default = "Message" if mapping: default = re.sub(r'\${([a-z_]+)}', r'%(\1)s', default) % \ mapping if target_language is None: return default if domain is None: with_domain = "" else: with_domain = " with domain '%s'" % domain if context is None: with_context = "" else: with_context = ", context '%s'" % context stripped = default.rstrip('\n ') return "%s ('%s' translation into '%s'%s%s)%s" % ( stripped, msgid, target_language, with_domain, with_context, default[len(stripped):]) for input_path, output_path, language in self.find_files(ext): # Make friendly title so we can locate the generated # source when debugging self.shortDescription = lambda: input_path # When input path contains the string 'implicit-i18n', we # enable "implicit translation". implicit_i18n = 'implicit-i18n' in input_path implicit_i18n_attrs = ("alt", "title") if implicit_i18n else () enable_data_attributes = 'data-attributes' in input_path template = factory( input_path, keep_source=True, strict=False, implicit_i18n_translate=implicit_i18n, implicit_i18n_attributes=implicit_i18n_attrs, enable_data_attributes=enable_data_attributes, ) params = kwargs.copy() params.update({ 'translate': translate, 'target_language': language, }) template.cook_check() try: got = template.render(**params) except: import traceback e = traceback.format_exc() self.fail("%s\n\n Example source:\n\n%s" % (e, "\n".join([ "%#03.d%s" % (lineno + 1, line and " " + line or "") for (lineno, line) in enumerate(template.source.split('\n')) ]))) if isinstance(got, byte_string): got = got.decode('utf-8') from doctest import OutputChecker checker = OutputChecker() if not os.path.exists(output_path): output = template.body else: with open(output_path, 'rb') as f: output = f.read() from chameleon.utils import read_xml_encoding from chameleon.utils import detect_encoding if template.content_type == 'text/xml': encoding = read_xml_encoding(output) or \ template.default_encoding else: content_type, encoding = detect_encoding( output, template.default_encoding) # Newline normalization across platforms want = '\n'.join(output.decode(encoding).splitlines()) got = '\n'.join(got.splitlines()) if checker.check_output(want, got, 0) is False: from doctest import Example example = Example(input_path, want) diff = checker.output_difference(example, got, 0) self.fail("(%s) - \n%s\n\nCode:\n%s" % (input_path, diff.rstrip('\n'), template.source.encode('utf-8')))
def execute(self, ext, factory, **kwargs): def translate(msgid, domain=None, mapping=None, context=None, target_language=None, default=None): if default is None: default = str(msgid) if isinstance(msgid, Message): default = "Message" if mapping: default = re.sub(r'\${([a-z_]+)}', r'%(\1)s', default) % \ mapping if target_language is None: return default if domain is None: with_domain = "" else: with_domain = " with domain '%s'" % domain if context is None: with_context = "" else: with_context = ", context '%s'" % context stripped = default.rstrip('\n ') return "%s ('%s' translation into '%s'%s%s)%s" % ( stripped, msgid, target_language, with_domain, with_context, default[len(stripped):] ) for input_path, output_path, language in self.find_files(ext): # Make friendly title so we can locate the generated # source when debugging self.shortDescription = lambda: input_path # When input path contains the string 'implicit-i18n', we # enable "implicit translation". implicit_i18n = 'implicit-i18n' in input_path implicit_i18n_attrs = ("alt", "title") if implicit_i18n else () enable_data_attributes = 'data-attributes' in input_path template = factory( input_path, keep_source=True, strict=False, implicit_i18n_translate=implicit_i18n, implicit_i18n_attributes=implicit_i18n_attrs, enable_data_attributes=enable_data_attributes, ) params = kwargs.copy() params.update({ 'translate': translate, 'target_language': language, }) template.cook_check() try: got = template.render(**params) except: import traceback e = traceback.format_exc() self.fail("%s\n\n Example source:\n\n%s" % (e, "\n".join( ["%#03.d%s" % (lineno + 1, line and " " + line or "") for (lineno, line) in enumerate(template.source.split( '\n'))]))) if isinstance(got, byte_string): got = got.decode('utf-8') from doctest import OutputChecker checker = OutputChecker() if not os.path.exists(output_path): output = template.body else: with open(output_path, 'rb') as f: output = f.read() from chameleon.utils import read_xml_encoding from chameleon.utils import detect_encoding if template.content_type == 'text/xml': encoding = read_xml_encoding(output) or \ template.default_encoding else: content_type, encoding = detect_encoding( output, template.default_encoding) # Newline normalization across platforms want = '\n'.join(output.decode(encoding).splitlines()) got = '\n'.join(got.splitlines()) if checker.check_output(want, got, 0) is False: from doctest import Example example = Example(input_path, want) diff = checker.output_difference( example, got, 0) self.fail("(%s) - \n%s\n\nCode:\n%s" % ( input_path, diff.rstrip('\n'), template.source.encode('utf-8')))