##// END OF EJS Templates
typing: add type hints related to message output in mercurial/ui.py...
Matt Harbison -
r50690:f1e820cd default
parent child Browse files
Show More
@@ -20,7 +20,12 b' import sys'
20 import traceback
20 import traceback
21
21
22 from typing import (
22 from typing import (
23 Dict,
24 List,
23 Optional,
25 Optional,
26 Tuple,
27 Union,
28 cast,
24 )
29 )
25
30
26 from .i18n import _
31 from .i18n import _
@@ -52,6 +57,12 b' from .utils import ('
52 urlutil,
57 urlutil,
53 )
58 )
54
59
60 # The **opts args of the various write() methods can be basically anything, but
61 # there's no way to express it as "anything but str". So type it to be the
62 # handful of known types that are used.
63 _MsgOpts = Union[bytes, bool, List["_PromptChoice"]]
64 _PromptChoice = Tuple[bytes, bytes]
65
55 urlreq = util.urlreq
66 urlreq = util.urlreq
56
67
57 # for use with str.translate(None, _keepalnum), to keep just alphanumerics
68 # for use with str.translate(None, _keepalnum), to keep just alphanumerics
@@ -1204,7 +1215,7 b' class ui:'
1204 # Windows color printing is special, see ``write``.
1215 # Windows color printing is special, see ``write``.
1205 return self._colormode != b'win32'
1216 return self._colormode != b'win32'
1206
1217
1207 def write(self, *args, **opts):
1218 def write(self, *args: bytes, **opts: _MsgOpts) -> None:
1208 """write args to output
1219 """write args to output
1209
1220
1210 By default, this method simply writes to the buffer or stdout.
1221 By default, this method simply writes to the buffer or stdout.
@@ -1262,10 +1273,10 b' class ui:'
1262 util.timer() - starttime
1273 util.timer() - starttime
1263 ) * 1000
1274 ) * 1000
1264
1275
1265 def write_err(self, *args, **opts):
1276 def write_err(self, *args: bytes, **opts: _MsgOpts) -> None:
1266 self._write(self._ferr, *args, **opts)
1277 self._write(self._ferr, *args, **opts)
1267
1278
1268 def _write(self, dest, *args, **opts):
1279 def _write(self, dest, *args: bytes, **opts: _MsgOpts) -> None:
1269 # update write() as well if you touch this code
1280 # update write() as well if you touch this code
1270 if self._isbuffered(dest):
1281 if self._isbuffered(dest):
1271 label = opts.get('label', b'')
1282 label = opts.get('label', b'')
@@ -1276,7 +1287,7 b' class ui:'
1276 else:
1287 else:
1277 self._writenobuf(dest, *args, **opts)
1288 self._writenobuf(dest, *args, **opts)
1278
1289
1279 def _writenobuf(self, dest, *args, **opts):
1290 def _writenobuf(self, dest, *args: bytes, **opts: _MsgOpts) -> None:
1280 # update write() as well if you touch this code
1291 # update write() as well if you touch this code
1281 if not opts.get('keepprogressbar', False):
1292 if not opts.get('keepprogressbar', False):
1282 self._progclear()
1293 self._progclear()
@@ -1318,7 +1329,7 b' class ui:'
1318 util.timer() - starttime
1329 util.timer() - starttime
1319 ) * 1000
1330 ) * 1000
1320
1331
1321 def _writemsg(self, dest, *args, **opts):
1332 def _writemsg(self, dest, *args: bytes, **opts: _MsgOpts) -> None:
1322 timestamp = self.showtimestamp and opts.get('type') in {
1333 timestamp = self.showtimestamp and opts.get('type') in {
1323 b'debug',
1334 b'debug',
1324 b'error',
1335 b'error',
@@ -1335,10 +1346,10 b' class ui:'
1335 if timestamp:
1346 if timestamp:
1336 dest.flush()
1347 dest.flush()
1337
1348
1338 def _writemsgnobuf(self, dest, *args, **opts):
1349 def _writemsgnobuf(self, dest, *args: bytes, **opts: _MsgOpts) -> None:
1339 _writemsgwith(self._writenobuf, dest, *args, **opts)
1350 _writemsgwith(self._writenobuf, dest, *args, **opts)
1340
1351
1341 def flush(self):
1352 def flush(self) -> None:
1342 # opencode timeblockedsection because this is a critical path
1353 # opencode timeblockedsection because this is a critical path
1343 starttime = util.timer()
1354 starttime = util.timer()
1344 try:
1355 try:
@@ -1697,7 +1708,11 b' class ui:'
1697
1708
1698 return i
1709 return i
1699
1710
1700 def _readline(self, prompt=b' ', promptopts=None):
1711 def _readline(
1712 self,
1713 prompt: bytes = b' ',
1714 promptopts: Optional[Dict[str, _MsgOpts]] = None,
1715 ) -> bytes:
1701 # Replacing stdin/stdout temporarily is a hard problem on Python 3
1716 # Replacing stdin/stdout temporarily is a hard problem on Python 3
1702 # because they have to be text streams with *no buffering*. Instead,
1717 # because they have to be text streams with *no buffering*. Instead,
1703 # we use rawinput() only if call_readline() will be invoked by
1718 # we use rawinput() only if call_readline() will be invoked by
@@ -1779,7 +1794,7 b' class ui:'
1779 raise error.ResponseExpected()
1794 raise error.ResponseExpected()
1780
1795
1781 @staticmethod
1796 @staticmethod
1782 def extractchoices(prompt):
1797 def extractchoices(prompt: bytes) -> Tuple[bytes, List[_PromptChoice]]:
1783 """Extract prompt message and list of choices from specified prompt.
1798 """Extract prompt message and list of choices from specified prompt.
1784
1799
1785 This returns tuple "(message, choices)", and "choices" is the
1800 This returns tuple "(message, choices)", and "choices" is the
@@ -1811,7 +1826,7 b' class ui:'
1811
1826
1812 return (msg, [choicetuple(s) for s in choices])
1827 return (msg, [choicetuple(s) for s in choices])
1813
1828
1814 def promptchoice(self, prompt, default=0):
1829 def promptchoice(self, prompt: bytes, default: int = 0) -> int:
1815 """Prompt user with a message, read response, and ensure it matches
1830 """Prompt user with a message, read response, and ensure it matches
1816 one of the provided choices. The prompt is formatted as follows:
1831 one of the provided choices. The prompt is formatted as follows:
1817
1832
@@ -1831,7 +1846,9 b' class ui:'
1831 # TODO: shouldn't it be a warning?
1846 # TODO: shouldn't it be a warning?
1832 self._writemsg(self._fmsgout, _(b"unrecognized response\n"))
1847 self._writemsg(self._fmsgout, _(b"unrecognized response\n"))
1833
1848
1834 def getpass(self, prompt=None, default=None):
1849 def getpass(
1850 self, prompt: Optional[bytes] = None, default: Optional[bytes] = None
1851 ) -> Optional[bytes]:
1835 if not self.interactive():
1852 if not self.interactive():
1836 return default
1853 return default
1837 try:
1854 try:
@@ -1854,7 +1871,7 b' class ui:'
1854 except EOFError:
1871 except EOFError:
1855 raise error.ResponseExpected()
1872 raise error.ResponseExpected()
1856
1873
1857 def status(self, *msg, **opts):
1874 def status(self, *msg: bytes, **opts: _MsgOpts) -> None:
1858 """write status message to output (if ui.quiet is False)
1875 """write status message to output (if ui.quiet is False)
1859
1876
1860 This adds an output label of "ui.status".
1877 This adds an output label of "ui.status".
@@ -1862,21 +1879,21 b' class ui:'
1862 if not self.quiet:
1879 if not self.quiet:
1863 self._writemsg(self._fmsgout, type=b'status', *msg, **opts)
1880 self._writemsg(self._fmsgout, type=b'status', *msg, **opts)
1864
1881
1865 def warn(self, *msg, **opts):
1882 def warn(self, *msg: bytes, **opts: _MsgOpts) -> None:
1866 """write warning message to output (stderr)
1883 """write warning message to output (stderr)
1867
1884
1868 This adds an output label of "ui.warning".
1885 This adds an output label of "ui.warning".
1869 """
1886 """
1870 self._writemsg(self._fmsgerr, type=b'warning', *msg, **opts)
1887 self._writemsg(self._fmsgerr, type=b'warning', *msg, **opts)
1871
1888
1872 def error(self, *msg, **opts):
1889 def error(self, *msg: bytes, **opts: _MsgOpts) -> None:
1873 """write error message to output (stderr)
1890 """write error message to output (stderr)
1874
1891
1875 This adds an output label of "ui.error".
1892 This adds an output label of "ui.error".
1876 """
1893 """
1877 self._writemsg(self._fmsgerr, type=b'error', *msg, **opts)
1894 self._writemsg(self._fmsgerr, type=b'error', *msg, **opts)
1878
1895
1879 def note(self, *msg, **opts):
1896 def note(self, *msg: bytes, **opts: _MsgOpts) -> None:
1880 """write note to output (if ui.verbose is True)
1897 """write note to output (if ui.verbose is True)
1881
1898
1882 This adds an output label of "ui.note".
1899 This adds an output label of "ui.note".
@@ -1884,7 +1901,7 b' class ui:'
1884 if self.verbose:
1901 if self.verbose:
1885 self._writemsg(self._fmsgout, type=b'note', *msg, **opts)
1902 self._writemsg(self._fmsgout, type=b'note', *msg, **opts)
1886
1903
1887 def debug(self, *msg, **opts):
1904 def debug(self, *msg: bytes, **opts: _MsgOpts) -> None:
1888 """write debug message to output (if ui.debugflag is True)
1905 """write debug message to output (if ui.debugflag is True)
1889
1906
1890 This adds an output label of "ui.debug".
1907 This adds an output label of "ui.debug".
@@ -2148,7 +2165,7 b' class ui:'
2148 finally:
2165 finally:
2149 self._loggers = registeredloggers
2166 self._loggers = registeredloggers
2150
2167
2151 def label(self, msg, label):
2168 def label(self, msg: bytes, label: bytes) -> bytes:
2152 """style msg based on supplied label
2169 """style msg based on supplied label
2153
2170
2154 If some color mode is enabled, this will add the necessary control
2171 If some color mode is enabled, this will add the necessary control
@@ -2162,7 +2179,9 b' class ui:'
2162 return color.colorlabel(self, msg, label)
2179 return color.colorlabel(self, msg, label)
2163 return msg
2180 return msg
2164
2181
2165 def develwarn(self, msg, stacklevel=1, config=None):
2182 def develwarn(
2183 self, msg: bytes, stacklevel: int = 1, config: Optional[bytes] = None
2184 ) -> None:
2166 """issue a developer warning message
2185 """issue a developer warning message
2167
2186
2168 Use 'stacklevel' to report the offender some layers further up in the
2187 Use 'stacklevel' to report the offender some layers further up in the
@@ -2194,7 +2213,9 b' class ui:'
2194 del curframe
2213 del curframe
2195 del calframe
2214 del calframe
2196
2215
2197 def deprecwarn(self, msg, version, stacklevel=2):
2216 def deprecwarn(
2217 self, msg: bytes, version: bytes, stacklevel: int = 2
2218 ) -> None:
2198 """issue a deprecation warning
2219 """issue a deprecation warning
2199
2220
2200 - msg: message explaining what is deprecated and how to upgrade,
2221 - msg: message explaining what is deprecated and how to upgrade,
@@ -2287,7 +2308,7 b' def _selectmsgdests(ui):'
2287 raise error.Abort(b'invalid ui.message-output destination: %s' % name)
2308 raise error.Abort(b'invalid ui.message-output destination: %s' % name)
2288
2309
2289
2310
2290 def _writemsgwith(write, dest, *args, **opts):
2311 def _writemsgwith(write, dest, *args: bytes, **opts: _MsgOpts) -> None:
2291 """Write ui message with the given ui._write*() function
2312 """Write ui message with the given ui._write*() function
2292
2313
2293 The specified message type is translated to 'ui.<type>' label if the dest
2314 The specified message type is translated to 'ui.<type>' label if the dest
General Comments 0
You need to be logged in to leave comments. Login now