|
5 | 5 | """
|
6 | 6 | from __future__ import (print_function, unicode_literals, division,
|
7 | 7 | absolute_import)
|
8 |
| -from builtins import next, str |
| 8 | +from builtins import next, bytes, str |
9 | 9 |
|
10 | 10 | import os
|
11 | 11 | import sys
|
@@ -192,15 +192,57 @@ def package_check(pkg_name,
|
192 | 192 |
|
193 | 193 |
|
194 | 194 | def str2bool(v):
|
| 195 | + """ |
| 196 | + Convert strings (and bytearrays) to boolean values |
| 197 | +
|
| 198 | + >>> all([str2bool(v) for v in (True, "yes", "true", |
| 199 | + ... "y", "t", "Yes", "True", "1", "on", "On")]) |
| 200 | + True |
| 201 | + >>> all([str2bool(v.encode('utf-8')) |
| 202 | + ... for v in ("yes", "true", "y", "t", "1", "Yes", "on", "On")]) |
| 203 | + True |
| 204 | + >>> any([str2bool(v) for v in (False, "no", "false", "n", "f", |
| 205 | + ... "False", "0", "off", "Off")]) |
| 206 | + False |
| 207 | + >>> any([str2bool(v.encode('utf-8')) |
| 208 | + ... for v in ("no", "false", "n", "f", "0", "off", "Off")]) |
| 209 | + False |
| 210 | + >>> str2bool(None) # doctest: +ELLIPSIS |
| 211 | + Traceback (most recent call last): |
| 212 | + ... |
| 213 | + ValueError: ... |
| 214 | + >>> str2bool('/some/path') # doctest: +ELLIPSIS |
| 215 | + Traceback (most recent call last): |
| 216 | + ... |
| 217 | + ValueError: ... |
| 218 | + >>> str2bool('Agg') # doctest: +ELLIPSIS |
| 219 | + Traceback (most recent call last): |
| 220 | + ... |
| 221 | + ValueError: ... |
| 222 | + >>> str2bool('INFO') # doctest: +ELLIPSIS |
| 223 | + Traceback (most recent call last): |
| 224 | + ... |
| 225 | + ValueError: ... |
| 226 | + >>> str2bool('/some/bytes/path'.encode('utf-8')) # doctest: +ELLIPSIS |
| 227 | + Traceback (most recent call last): |
| 228 | + ... |
| 229 | + ValueError: ... |
| 230 | +
|
| 231 | + """ |
195 | 232 | if isinstance(v, bool):
|
196 | 233 | return v
|
197 |
| - lower = v.lower() |
198 |
| - if lower in ("yes", "true", "t", "1"): |
199 |
| - return True |
200 |
| - elif lower in ("no", "false", "n", "f", "0"): |
201 |
| - return False |
202 |
| - else: |
203 |
| - raise ValueError("%s cannot be converted to bool" % v) |
| 234 | + |
| 235 | + if isinstance(v, bytes): |
| 236 | + v = v.decode('utf-8') |
| 237 | + |
| 238 | + if isinstance(v, str): |
| 239 | + lower = v.lower() |
| 240 | + if lower in ("yes", "true", "y", "t", "1", "on"): |
| 241 | + return True |
| 242 | + elif lower in ("no", "false", "n", "f", "0", "off"): |
| 243 | + return False |
| 244 | + |
| 245 | + raise ValueError("%r cannot be converted to bool" % v) |
204 | 246 |
|
205 | 247 |
|
206 | 248 | def flatten(S):
|
|
0 commit comments