def extract(method, fileobj, keywords=KEYWORDS, comment_tags=COMMENT_TAGS, options=None, strip_comment_tags=False): ''' Extracted from @see: babel.messages.extract in order to get also the function name and additional messages. Extract messages from the given file-like object using the specified extraction method. This function returns a list of tuples of the form: ``(funcname, lineno, messages, comments)`` @see: babel.messages.extract.extract ''' func = None if ':' in method or '.' in method: if ':' not in method: lastdot = method.rfind('.') module, attrname = method[:lastdot], method[lastdot + 1:] else: module, attrname = method.split(':', 1) func = getattr(__import__(module, {}, {}, [attrname]), attrname) else: func = METHOD_EXTRACTOR.get(method) if func is None: raise ValueError('Unknown extraction method %r' % method) results = func(fileobj, list(keywords.keys()), comment_tags, options=options or {}) for lineno, funcname, messages, comments in results: if funcname: spec = keywords[funcname] or (1, ) else: spec = (1, ) if not isinstance(messages, (list, tuple)): messages = [messages] if not messages: continue # Validate the messages against the keyword's specification msgs = [] invalid = False # last_index is 1 based like the keyword spec last_index = len(messages) for index in spec: if last_index < index: # Not enough arguments invalid = True break message = messages[index - 1] if message is None: invalid = True break msgs.append(message) if invalid: continue first_msg_index = spec[0] - 1 if not messages[first_msg_index]: # An empty string msgid isn't valid, emit a warning where = '%s:%i' % (hasattr(fileobj, 'name') and fileobj.name or '(unknown)', lineno) log.error(empty_msgid_warning % where) continue messages = tuple(msgs) if len(messages) == 1: messages = messages[0] if strip_comment_tags: _strip_comment_tags(comments, comment_tags) yield funcname, lineno, messages, comments
def strip_comment_tags(comments, comment_tags): _strip_comment_tags(comments, comment_tags) return comments
def extract(method, fileobj, keywords=KEYWORDS, comment_tags=COMMENT_TAGS, options=None, strip_comment_tags=False): """ Extracted from @see: babel.messages.extract in order to get also the function name and additional messages. Extract messages from the given file-like object using the specified extraction method. This function returns a list of tuples of the form: ``(funcname, lineno, messages, comments)`` @see: babel.messages.extract.extract """ func = None if ":" in method or "." in method: if ":" not in method: lastdot = method.rfind(".") module, attrname = method[:lastdot], method[lastdot + 1 :] else: module, attrname = method.split(":", 1) func = getattr(__import__(module, {}, {}, [attrname]), attrname) else: func = METHOD_EXTRACTOR.get(method) if func is None: raise ValueError("Unknown extraction method %r" % method) results = func(fileobj, list(keywords.keys()), comment_tags, options=options or {}) for lineno, funcname, messages, comments in results: if funcname: spec = keywords[funcname] or (1,) else: spec = (1,) if not isinstance(messages, (list, tuple)): messages = [messages] if not messages: continue # Validate the messages against the keyword's specification msgs = [] invalid = False # last_index is 1 based like the keyword spec last_index = len(messages) for index in spec: if last_index < index: # Not enough arguments invalid = True break message = messages[index - 1] if message is None: invalid = True break msgs.append(message) if invalid: continue first_msg_index = spec[0] - 1 if not messages[first_msg_index]: # An empty string msgid isn't valid, emit a warning where = "%s:%i" % (hasattr(fileobj, "name") and fileobj.name or "(unknown)", lineno) log.error(empty_msgid_warning % where) continue messages = tuple(msgs) if len(messages) == 1: messages = messages[0] if strip_comment_tags: _strip_comment_tags(comments, comment_tags) yield funcname, lineno, messages, comments
def strip_comment_tags(comments, comment_tags): _strip_comment_tags(comments, comment_tags) return comments