--- /dev/null
+# Stubs for string\r
+\r
+# Based on http://docs.python.org/3.2/library/string.html\r
+\r
+from typing import Mapping, Sequence, Any, Optional, Union, List, Tuple, Iterable\r
+\r
+ascii_letters = ... # type: str\r
+ascii_lowercase = ... # type: str\r
+ascii_uppercase = ... # type: str\r
+digits = ... # type: str\r
+hexdigits = ... # type: str\r
+octdigits = ... # type: str\r
+punctuation = ... # type: str\r
+printable = ... # type: str\r
+whitespace = ... # type: str\r
+\r
+def capwords(s: str, sep: str = ...) -> str: ...\r
+\r
+class Template:\r
+ template = ... # type: str\r
+\r
+ def __init__(self, template: str) -> None: ...\r
+ def substitute(self, mapping: Mapping[str, str] = ..., **kwds: str) -> str: ...\r
+ def safe_substitute(self, mapping: Mapping[str, str] = ...,\r
+ **kwds: str) -> str: ...\r
+\r
+# TODO(MichalPokorny): This is probably badly and/or loosely typed.\r
+class Formatter:\r
+ def format(self, format_string: str, *args: Any, **kwargs: Any) -> str: ...\r
+ def vformat(self, format_string: str, args: Sequence[Any],\r
+ kwargs: Mapping[str, Any]) -> str: ...\r
+ def parse(self, format_string: str) -> Iterable[Tuple[str, Optional[str], Optional[str], Optional[str]]]: ...\r
+ def get_field(self, field_name: str, args: Sequence[Any],\r
+ kwargs: Mapping[str, Any]) -> Any: ...\r
+ def get_value(self, key: Union[int, str], args: Sequence[Any],\r
+ kwargs: Mapping[str, Any]) -> Any:\r
+ raise IndexError()\r
+ raise KeyError()\r
+ def check_unused_args(self, used_args: Sequence[Union[int, str]], args: Sequence[Any],\r
+ kwargs: Mapping[str, Any]) -> None: ...\r
+ def format_field(self, value: Any, format_spec: str) -> Any: ...\r
+ def convert_field(self, value: Any, conversion: str) -> Any: ...\r