コード例 #1
0
ファイル: formatting.py プロジェクト: foutoucour/rez
 def get_field(self, field_name, args, kwargs):
     if self.expand == StringFormatType.error:
         return Formatter.get_field(self, field_name, args, kwargs)
     try:
         return Formatter.get_field(self, field_name, args, kwargs)
     except (AttributeError, KeyError, TypeError):
         reg = re.compile("[^\.\[]+")
         try:
             key = reg.match(field_name).group()
         except:
             key = field_name
         if self.expand == StringFormatType.empty:
             return ('', key)
         else:  # StringFormatType.unchanged
             return ("{%s}" % field_name, key)
コード例 #2
0
ファイル: _message.py プロジェクト: yaosing/fbchat
    def formatMentions(cls, text, *args, **kwargs):
        """Like `str.format`, but takes tuples with a thread id and text instead.

        Return a `Message` object, with the formatted string and relevant mentions.

        >>> Message.formatMentions("Hey {!r}! My name is {}", ("1234", "Peter"), ("4321", "Michael"))
        <Message (None): "Hey 'Peter'! My name is Michael", mentions=[<Mention 1234: offset=4 length=7>, <Mention 4321: offset=24 length=7>] emoji_size=None attachments=[]>

        >>> Message.formatMentions("Hey {p}! My name is {}", ("1234", "Michael"), p=("4321", "Peter"))
        <Message (None): 'Hey Peter! My name is Michael', mentions=[<Mention 4321: offset=4 length=5>, <Mention 1234: offset=22 length=7>] emoji_size=None attachments=[]>
        """
        result = ""
        mentions = list()
        offset = 0
        f = Formatter()
        field_names = [field_name[1] for field_name in f.parse(text)]
        automatic = "" in field_names
        i = 0

        for (literal_text, field_name, format_spec,
             conversion) in f.parse(text):
            offset += len(literal_text)
            result += literal_text

            if field_name is None:
                continue

            if field_name == "":
                field_name = str(i)
                i += 1
            elif automatic and field_name.isdigit():
                raise ValueError(
                    "cannot switch from automatic field numbering to manual field specification"
                )

            thread_id, name = f.get_field(field_name, args, kwargs)[0]

            if format_spec:
                name = f.format_field(name, format_spec)
            if conversion:
                name = f.convert_field(name, conversion)

            result += name
            mentions.append(
                Mention(thread_id=thread_id, offset=offset, length=len(name)))
            offset += len(name)

        message = cls(text=result, mentions=mentions)
        return message
コード例 #3
0
ファイル: _message.py プロジェクト: TheLastGimbus/fbchat
    def format_mentions(text, *args, **kwargs):
        """Like `str.format`, but takes tuples with a thread id and text instead.

        Return a tuple, with the formatted string and relevant mentions.

        >>> Message.format_mentions("Hey {!r}! My name is {}", ("1234", "Peter"), ("4321", "Michael"))
        ("Hey 'Peter'! My name is Michael", [Mention(thread_id=1234, offset=4, length=7), Mention(thread_id=4321, offset=24, length=7)])

        >>> Message.format_mentions("Hey {p}! My name is {}", ("1234", "Michael"), p=("4321", "Peter"))
        ('Hey Peter! My name is Michael', [Mention(thread_id=4321, offset=4, length=5), Mention(thread_id=1234, offset=22, length=7)])
        """
        result = ""
        mentions = list()
        offset = 0
        f = Formatter()
        field_names = [field_name[1] for field_name in f.parse(text)]
        automatic = "" in field_names
        i = 0

        for (literal_text, field_name, format_spec,
             conversion) in f.parse(text):
            offset += len(literal_text)
            result += literal_text

            if field_name is None:
                continue

            if field_name == "":
                field_name = str(i)
                i += 1
            elif automatic and field_name.isdigit():
                raise ValueError(
                    "cannot switch from automatic field numbering to manual field specification"
                )

            thread_id, name = f.get_field(field_name, args, kwargs)[0]

            if format_spec:
                name = f.format_field(name, format_spec)
            if conversion:
                name = f.convert_field(name, conversion)

            result += name
            mentions.append(
                Mention(thread_id=thread_id, offset=offset, length=len(name)))
            offset += len(name)

        return result, mentions
コード例 #4
0
ファイル: utils.py プロジェクト: hayd/pyfaker
 def get_field(self, field_name, *args, **kwargs):
     obj, used_key = Formatter.get_field(self, field_name, *args, **kwargs)
     return obj(), used_key
コード例 #5
0
 def get_field(self, field_name, args, kwargs):
     """
     Overidden API method that converts '.' usage to '[]' indexing.
     """
     field_name = self.dot_re.sub(r"[\1]", field_name)
     return Formatter.get_field(self, field_name, args, kwargs)
コード例 #6
0
 def get_field(self, field_name, *args, **kwargs):
     obj, used_key = Formatter.get_field(self, field_name, *args, **kwargs)
     return obj(), used_key