def __init__(self, zip_file, data='', certinfo=None): self.zip_file = zip_file self.certinfo = certinfo if not data: data = zip_file.read('manifest.json') lexer = JsLexer() json_string = '' # Run through the JSON and remove all comments, then try to read # the manifest file. # Note that Firefox and the WebExtension spec only allow for # line comments (starting with `//`), not block comments (starting with # `/*`). We strip out both in AMO because the linter will flag the # block-level comments explicitly as an error (so the developer can # change them to line-level comments). # # But block level comments are not allowed. We just flag them elsewhere # (in the linter). for name, token in lexer.lex(data): if name not in ('blockcomment', 'linecomment'): json_string += token self.data = decode_json(json_string)
def __init__(self, path, data=''): self.path = path if not data: with open(path) as fobj: data = fobj.read() lexer = JsLexer() json_string = '' # Run through the JSON and remove all comments, then try to read # the manifest file. # Note that Firefox and the WebExtension spec only allow for # line comments (starting with `//`), not block comments (starting with # `/*`). We strip out both in AMO because the linter will flag the # block-level comments explicitly as an error (so the developer can # change them to line-level comments). # # But block level comments are not allowed. We just flag them elsewhere # (in the linter). for name, token in lexer.lex(data): if name not in ('blockcomment', 'linecomment'): json_string += token self.data = decode_json(json_string)
def extract_translations(file_obj): """Extract all translation messages from `file_obj`. :param locale: if not `None` the list will be restricted only to `locale`. """ xpi = get_filepath(file_obj) messages = {} try: with zipfile.ZipFile(xpi, 'r') as source: file_list = source.namelist() # Fetch all locales the add-on supports # see https://developer.chrome.com/extensions/i18n#overview-locales # for more details on the format. locales = { name.split('/')[1] for name in file_list if name.startswith('_locales/') and name.endswith('/messages.json') } for locale in locales: corrected_locale = find_language(locale) # Filter out languages we don't support. if not corrected_locale: continue fname = '_locales/{0}/messages.json'.format(locale) try: data = source.read(fname) messages[corrected_locale] = decode_json(data) except (ValueError, KeyError): # `ValueError` thrown by `decode_json` if the json is # invalid and `KeyError` thrown by `source.read` # usually means the file doesn't exist for some reason, # we fail silently continue except IOError: pass return messages
def extract_translations(file_obj): """Extract all translation messages from `file_obj`. :param locale: if not `None` the list will be restricted only to `locale`. """ xpi = get_filepath(file_obj) messages = {} try: with zipfile.ZipFile(xpi, 'r') as source: file_list = source.namelist() # Fetch all locales the add-on supports # see https://developer.chrome.com/extensions/i18n#overview-locales # for more details on the format. locales = { name.split('/')[1] for name in file_list if name.startswith('_locales/') and name.endswith('/messages.json')} for locale in locales: corrected_locale = find_language(locale) # Filter out languages we don't support. if not corrected_locale: continue fname = '_locales/{0}/messages.json'.format(locale) try: data = source.read(fname) messages[corrected_locale] = decode_json(data) except (ValueError, KeyError): # `ValueError` thrown by `decode_json` if the json is # invalid and `KeyError` thrown by `source.read` # usually means the file doesn't exist for some reason, # we fail silently continue except IOError: pass return messages