All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@git.madduck.net.
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
3 result = type(message)("")
6 # Don't merge multiline (e.g. triple-quoted) strings.
9 """SELECT xxxxxxxxxxxxxxxxxxxx(xxx)"""
10 """ FROM xxxxxxxxxxxxxxxx WHERE xxxxxxxxxx AND xxx <> xxxxxxxxxxxxxx()""")
12 # There was a bug where tuples were being identified as long strings.
13 long_tuple = ('Apple', 'Berry', 'Cherry', 'Dill', 'Evergreen', 'Fig',
14 'Grape', 'Harry', 'Iglu', 'Jaguar')
16 stupid_format_method_bug = "Some really long string that just so happens to be the {} {} to force the 'format' method to hang over the line length boundary. This is pretty annoying.".format("perfect", "length")
20 os.system("This is a regression test. xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxxx.".format("xxxxxxxxxx", "xxxxxx", "xxxxxxxxxx"))
27 "xxx_xxxxxxxxxx(xxxxx={}, xxxx={}, xxxxx, xxxx_xxxx_xxxxxxxxxx={})".format(
28 xxxxx, xxxx, xxxx_xxxx_xxxxxxxxxx
40 "[{}]: xxx_xxxxxxxxxx(xxxxx={}, xxxx={}, xxxxx={}"
41 " xxxx_xxxx_xxxxxxxxxx={}, xxxx={})"
42 .format(xxxx._xxxxxxxxxxxxxx, xxxxx, xxxx, xxxx_xxxx_xxxxxxxxxx, xxxxxxx)
50 for (xxx_xxxx, _xxx_xxx, _xxx_xxxxx, xxx_xxxx) in xxxx:
52 assert ("x" in xxx) or (
54 ), "{0} xxxxxxx xx {1}, xxx {1} xx xxx xx xxxx xx xxx xxxx: xxx xxxx {2}".format(
55 xxx_xxxx, xxx, xxxxxx.xxxxxxx(xxx_xxx_xxxxx)
59 def disappearing_comment():
61 ( # xx -x xxxxxxx xx xxx xxxxxxx.
62 '{{xxx_xxxxxxxxxx_xxxxxxxx}} xxx xxxx'
66 if xxxxx.xx_xxxxxxxxxx
67 else ( # Disappearing Comment
68 "--xxxxxxx --xxxxxx=x --xxxxxx-xxxxx=xxxxxx"
69 " --xxxxxx-xxxx=xxxxxxxxxxx.xxx"
81 "@xxxxxx '{xxxx_xxx}\t' > {xxxxxx_xxxx}.xxxxxxx;"
82 "{xxxx_xxx} >> {xxxxxx_xxxx}.xxxxxxx 2>&1; xx=$$?;"
84 .format(xxxx_xxx=xxxx_xxxxxxx, xxxxxx_xxxx=xxxxxxx + "/" + xxxx_xxx_xxxx, x=xxx_xxxxx_xxxxx_xxx),
90 func_call_where_string_arg_has_method_call_and_bad_parens(
92 "A long string with {}. This string is so long that it is ridiculous. It can't fit on one line at alllll.".format("formatting")
96 func_call_where_string_arg_has_old_fmt_and_bad_parens(
98 "A long string with {}. This string is so long that it is ridiculous. It can't fit on one line at alllll." % "formatting"
102 func_call_where_string_arg_has_old_fmt_and_bad_parens(
104 "A long string with {}. This {} is so long that it is ridiculous. It can't fit on one line at alllll." % ("formatting", "string")
111 xxxx.xxxxxxx.xxxxx( ('xxxxxxxxxx xxxx xx xxxxxx(%x) xx %x xxxx xx xxx %x.xx'
115 + (' %.3f (%s) to %.3f (%s).\n'
117 xxxx.xxxxxxxxxxxxxx(xxxx.xxxxxxxxx),
119 xxxx.xxxxxxxxxxxxxx( xx)
127 "xx {xxxxxxxxxxx}/xxxxxxxxxxx.xxx xxxx.xxx && xxxxxx -x "
128 "\"xxxx xxxxxxx xxxxxx xxxx; xxxx xxxxxx_xxxxx xxxxxx xxxx; "
129 "xxxx.xxxx_xxxxxx(['xxxx.xxx'], xxxx.xxxxxxx().xxxxxxxxxx)\" "
139 "xx {xxxxxxxxxxx}/xxxxxxxxxxx.xxx xxxx.xxx && xxxxxx -x "
140 "xxxx, ('xxxxxxx xxxxxx xxxx, xxxx') xxxxxx_xxxxx xxxxxx xxxx; "
141 "xxxx.xxxx_xxxxxx(['xxxx.xxx'], xxxx.xxxxxxx().xxxxxxxxxx)\" "
147 xxxxxxx = { 'xx' : 'xxxx xxxxxxx xxxxxxxxx -x xxx -x /xxx/{0} -x xxx,xxx -xx {1} \
148 -xx {1} -xx xxx=xxx_xxxx,xxx_xx,xxx_xxx,xxx_xxxx,xxx_xx,xxx_xxx |\
149 xxxxxx -x xxxxxxxx -x xxxxxxxx -x',
150 'xx' : 'xxxx xxxxxxx xxxxxxxxx -x xxx -x /xxx/{0} -x xxx,xxx -xx {1} \
151 -xx {1} -xx xxx=xxx_xxxx_xxx_xxxx,xxx_xx_xxx_xxxx,xxx_xxxx_xxx_xxxx,\
152 xxx_xx_xxxx_xxxx,xxx_xxx_xxxx,xxx_xxx_xxxx xxxx=xxx | xxxxxx -x xxxxxxxx -x xxxxxxxx -x'
158 xxxxx_xxxxxxxxxxxx('xxx xxxxxx xxx xxxxxxxxx.xx xx xxxxxxxx. xxx xxxxxxxxxxxxx.xx xxxxxxx '
159 + 'xx xxxxxx xxxxxx xxxxxx xx xxxxxxx xxx xxx ${0} xx x xxxxxxxx xxxxx'.xxxxxx(xxxxxx_xxxxxx_xxx))
165 'xxxxxxxxxxxxxxx' : xxxxxx_xxxxx_xxxx,
166 # 'xxxxxxxxxxxxxxxxxxxxxxx'
167 # 'xxxxxxxxxxxxxxxxxxxxxx'
168 # 'xxxxxxxxxxxxxxxxxx'
169 # 'xxxxxxxxxxxxxxxxx'
170 'xxxxxxxxxx' : xxxxx_xxxxx,
174 def xxxx_xxx_xx_xxxxxxxxxx_xxxx_xxxxxxxxx(xxxx):
181 xxxxxx={'xxxxxx 1' : xxxxxx(xxxx='xxxxxx 1', xxxxxx=600.0)},
182 xxxxxxxx_xxxxxxx=0.0,
189 xxxxxx={'xxxxxx 1' : xxxxxx(xxxx='xxxxxx 1', xxxxxx=200.0)},
190 xxxxxxxx_xxxxxxx=0.0,
198 'xxxxx006': ['xxx-xxx xxxxx3xxxx1xx2xxxxxxxxxxxxxx0xx6xxxxxxxxxx2xxxxxx9xxxxxxxxxx0xxxxx1xxx2x/xx9xx6+x+xxxxxxxxxxxxxx4xxxxxxxxxxxxxxxxxxxxx43xxx2xx2x4x++xxx6xxxxxxxxx+xxxxx/xx9x+xxxxxxxxxxxxxx8x15xxxxxxxxxxxxxxxxx82xx/xxxxxxxxxxxxxx/x5xxxxxxxxxxxxxx6xxxxxx74x4/xxx4x+xxxxxxxxx2xxxxxxxx87xxxxx4xxxxxxxx3xx0xxxxx4xxx1xx9xx5xxxxxxx/xxxxx5xx6xx4xxxx1x/x2xxxxxxxxxxxx64xxxxxxx1x0xx5xxxxxxxxxxxxxx== xxxxx000 xxxxxxxxxx\n',
199 'xxx-xxx xxxxx3xxxx1xx2xxxxxxxxxxxxxx6xxxxxxxxxxxxxx9xxxxxxxxxxxxx3xxx9xxxxxxxxxxxxxxxx0xxxxxxxxxxxxxxxxx2xxxx2xxx6xxxxx/xx54xxxxxxxxx4xxx3xxxxxx9xx3xxxxx39xxxxxxxxx5xx91xxxx7xxxxxx8xxxxxxxxxxxxxxxx9xxx93xxxxxxxxxxxxxxxxx7xxx8xx8xx4/x1xxxxx1x3xxxxxxxxxxxxx3xxxxxx9xx4xx4x7xxxxxxxxxxxxx1xxxxxxxxx7xxxxxxxxxxxxxx4xx6xxxxxxxxx9xxx7xxxx2xxxxxxxxxxxxxxxxxxxxxx8xxxxxxxxxxxxxxxxxxxx6xx== xxxxx010 xxxxxxxxxx\n'],
200 'xxxxx016': ['xxx-xxx xxxxx3xxxx1xx2xxxxxxxxxxxxxx0xx6xxxxxxxxxx2xxxxxx9xxxxxxxxxx0xxxxx1xxx2x/xx9xx6+x+xxxxxxxxxxxxxx4xxxxxxxxxxxxxxxxxxxxx43xxx2xx2x4x++xxx6xxxxxxxxx+xxxxx/xx9x+xxxxxxxxxxxxxx8x15xxxxxxxxxxxxxxxxx82xx/xxxxxxxxxxxxxx/x5xxxxxxxxxxxxxx6xxxxxx74x4/xxx4x+xxxxxxxxx2xxxxxxxx87xxxxx4xxxxxxxx3xx0xxxxx4xxx1xx9xx5xxxxxxx/xxxxx5xx6xx4xxxx1x/x2xxxxxxxxxxxx64xxxxxxx1x0xx5xxxxxxxxxxxxxx== xxxxx000 xxxxxxxxxx\n',
201 'xxx-xxx xxxxx3xxxx1xx2xxxxxxxxxxxxxx6xxxxxxxxxxxxxx9xxxxxxxxxxxxx3xxx9xxxxxxxxxxxxxxxx0xxxxxxxxxxxxxxxxx2xxxx2xxx6xxxxx/xx54xxxxxxxxx4xxx3xxxxxx9xx3xxxxx39xxxxxxxxx5xx91xxxx7xxxxxx8xxxxxxxxxxxxxxxx9xxx93xxxxxxxxxxxxxxxxx7xxx8xx8xx4/x1xxxxx1x3xxxxxxxxxxxxx3xxxxxx9xx4xx4x7xxxxxxxxxxxxx1xxxxxxxxx7xxxxxxxxxxxxxx4xx6xxxxxxxxx9xxx7xxxx2xxxxxxxxxxxxxxxxxxxxxx8xxxxxxxxxxxxxxxxxxxx6xx== xxxxx010 xxxxxxxxxx\n']
206 'xxxx xxx xxxxxxxx_xxxx xx "xxxxxxxxxx".'
207 '\n xxx: xxxxxx xxxxxxxx_xxxx=xxxxxxxxxx'
208 ) # xxxx xxxxxxxxxx xxxx xx xxxx xx xxx xxxxxxxx xxxxxx xxxxx.
210 some_tuple = ("some string", "some string" " which should be joined")
212 some_commented_string = (
213 "This string is long but not so long that it needs hahahah toooooo be so greatttt" # This comment gets thrown to the top.
214 " {} that I just can't think of any more good words to say about it at"
215 " allllllllllll".format("ha") # comments here are fine
218 some_commented_string = (
219 "This string is long but not so long that it needs hahahah toooooo be so greatttt" # But these
220 " {} that I just can't think of any more good words to say about it at" # comments will stay
221 " allllllllllll".format("ha") # comments here are fine
224 lpar_and_rpar_have_comments = func_call( # LPAR Comment
225 "Long really ridiculous type of string that shouldn't really even exist at all. I mean commmme onnn!!!", # Comma Comment
229 f"sudo -E deluge-console info --detailed --sort-reverse=time_added "
230 f"{'' if ID is None else ID} | perl -nE 'print if /^{field}:/'"
233 cmd_fstring = f"sudo -E deluge-console info --detailed --sort-reverse=time_added {'' if ID is None else ID} | perl -nE 'print if /^{field}:/'"
235 cmd_fstring = f"sudo -E deluge-console info --detailed --sort-reverse=time_added {'{{}}' if ID is None else ID} | perl -nE 'print if /^{field}:/'"
237 cmd_fstring = f"sudo -E deluge-console info --detailed --sort-reverse=time_added {{'' if ID is None else ID}} | perl -nE 'print if /^{field}:/'"
239 fstring = f"This string really doesn't need to be an {{{{fstring}}}}, but this one most certainly, absolutely {does}."
242 f"We have to remember to escape {braces}."
251 f"This string ({string_leaf.value}) appears to be pointless (i.e. has"
256 user_regex = _lazy_re_compile(
257 r"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*\Z" # dot-atom
258 r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-\011\013\014\016-\177])*"\Z)', # quoted-string
262 user_regex = _lazy_re_compile(
263 "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # dot-atom
264 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', # quoted-string
269 user_regex = _lazy_re_compile(
270 "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # dot-atom
271 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', # quoted-string
278 if not hasattr(module, name):
280 "Could not find object %s in %s.\n"
281 "Please note that you cannot serialize things like inner "
282 "classes. Please move the object into the main module "
283 "body to use migrations.\n"
284 "For more information, see "
285 "https://docs.djangoproject.com/en/%s/topics/migrations/#serializing-values"
286 % (name, module_name, get_docs_version()))
291 if not hasattr(module, name):
293 "Could not find object %s in %s.\nPlease note that you cannot serialize things like inner classes. Please move the object into the main module body to use migrations.\nFor more information, see https://docs.djangoproject.com/en/%s/topics/migrations/#serializing-values"
294 % (name, module_name, get_docs_version()))
297 "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
298 "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
299 "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
300 "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
303 class Step(StepBase):
305 self.cmd = 'SR AAAA-CORRECT NAME IS {last_name} {first_name}{middle_name} {title}/P{passenger_association}'.format(
307 first_name=first_name,
308 middle_name=middle_name,
310 passenger_association=passenger_association,
313 xxxxxxx_xxxxxx_xxxxxxx = xxx(
317 '((x.aaaaaaaaa = "xxxxxx.xxxxxxxxxxxxxxxxxxxxx") || (x.xxxxxxxxx = "xxxxxxxxxxxx")) && '
318 # xxxxx xxxxxxxxxxxx xxxx xxx (xxxxxxxxxxxxxxxx) xx x xxxxxxxxx xx xxxxxx.
319 "(x.bbbbbbbbbbbb.xxx != "
320 '"xxx:xxx:xxx::cccccccccccc:xxxxxxx-xxxx/xxxxxxxxxxx/xxxxxxxxxxxxxxxxx") && '
326 if __name__ == "__main__":
327 for i in range(4, 8):
329 r"for pid in $(ps aux | grep paster | grep -v grep | grep '\-%d' | awk '{print $2}'); do kill $pid; done"
341 c_float(val[0][0] / val[0][1]).value
342 == c_float(value[0][0] / value[0][1]).value
343 ), "%s didn't roundtrip" % tag
345 class xxxxxxxxxxxxxxxxxxxxx(xxxx.xxxxxxxxxxxxx):
346 def xxxxxxx_xxxxxx(xxxx):
347 assert xxxxxxx_xxxx in [
348 x.xxxxx.xxxxxx.xxxxx.xxxxxx,
349 x.xxxxx.xxxxxx.xxxxx.xxxx,
350 ], ("xxxxxxxxxxx xxxxxxx xxxx (xxxxxx xxxx) %x xxx xxxxx" % xxxxxxx_xxxx)
354 ] = "test" # set some Thrift field to non-None in the struct aa bb cc dd ee
357 "asdf_hjkl_jkl": re.compile(
358 r"(?<!([0-9]\ ))(?<=(^|\ ))([A-Z]+(\ )?|[0-9](\ )|[a-z](\ )){4,7}([A-Z]|[0-9]|[a-z])($|\b)(?!(\ ?([0-9]\ )|(\.)))"
362 RE_TWO_BACKSLASHES = {
363 "asdf_hjkl_jkl": re.compile(
364 r"(?<!([0-9]\ ))(?<=(^|\ ))([A-Z]+(\ )?|[0-9](\ )|[a-z](\\ )){4,7}([A-Z]|[0-9]|[a-z])($|\b)(?!(\ ?([0-9]\ )|(\.)))"
368 RE_THREE_BACKSLASHES = {
369 "asdf_hjkl_jkl": re.compile(
370 r"(?<!([0-9]\ ))(?<=(^|\ ))([A-Z]+(\ )?|[0-9](\ )|[a-z](\\\ )){4,7}([A-Z]|[0-9]|[a-z])($|\b)(?!(\ ?([0-9]\ )|(\.)))"
374 # We do NOT split on f-string expressions.
375 print(f"Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam. {[f'{i}' for i in range(10)]}")
376 x = f"This is a long string which contains an f-expr that should not split {{{[i for i in range(5)]}}}."
378 # The parens should NOT be removed in this case.
380 "my very long string that should get formatted if I'm careful to make sure it goes"
381 " over 88 characters which it has now"
384 # The parens should NOT be removed in this case.
386 "my very long string that should get formatted if I'm careful to make sure it goes over 88 characters which"
390 # The parens should NOT be removed in this case.
392 "my very long string"
393 " that should get formatted"
394 " if I'm careful to make sure"
395 " it goes over 88 characters which"
400 def _legacy_listen_examples():
402 " \"listen for the '%(event_name)s' event\"\n"
403 "\n # ... (event logic logic logic) ...\n"
413 for candidate in CANDIDATES:
415 "**{candidate.object_type} {candidate.rev}**"
416 " - {candidate.description}\n"
421 f"{f'{humanize_number(pos)}.': <{pound_len+2}} "
422 f"{balance: <{bal_len + 5}} "
423 f"<<{author.display_name}>>\n"
426 assert str(suffix_arr) == (
427 "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', "
428 "'grykangaroo$', 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', "
429 "'o$', 'oo$', 'roo$', 'rykangaroo$', 'ykangaroo$']"
431 assert str(suffix_arr) != (
432 "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', "
433 "'grykangaroo$', 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', "
434 "'o$', 'oo$', 'roo$', 'rykangaroo$', 'ykangaroo$']"
436 assert str(suffix_arr) <= (
437 "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', "
438 "'grykangaroo$', 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', "
439 "'o$', 'oo$', 'roo$', 'rykangaroo$', 'ykangaroo$']"
441 assert str(suffix_arr) >= (
442 "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', "
443 "'grykangaroo$', 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', "
444 "'o$', 'oo$', 'roo$', 'rykangaroo$', 'ykangaroo$']"
446 assert str(suffix_arr) < (
447 "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', "
448 "'grykangaroo$', 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', "
449 "'o$', 'oo$', 'roo$', 'rykangaroo$', 'ykangaroo$']"
451 assert str(suffix_arr) > (
452 "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', "
453 "'grykangaroo$', 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', "
454 "'o$', 'oo$', 'roo$', 'rykangaroo$', 'ykangaroo$']"
456 assert str(suffix_arr) in "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', 'grykangaroo$', 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', 'o$', 'oo$', 'roo$', 'rykangaroo$', 'ykangaroo$']"
457 assert str(suffix_arr) not in "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', 'grykangaroo$', 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', 'o$', 'oo$', 'roo$', 'rykangaroo$', 'ykangaroo$']"
459 f"1. Go to Google Developers Console and log in with your Google account."
460 "(https://console.developers.google.com/)"
461 "2. You should be prompted to create a new project (name does not matter)."
462 "3. Click on Enable APIs and Services at the top."
463 "4. In the list of APIs choose or search for YouTube Data API v3 and "
464 "click on it. Choose Enable."
465 "5. Click on Credentials on the left navigation bar."
466 "6. Click on Create Credential at the top."
467 '7. At the top click the link for "API key".'
468 "8. No application restrictions are needed. Click Create at the bottom."
469 "9. You now have a key to add to `{prefix}set api youtube api_key`"
472 f"1. Go to Google Developers Console and log in with your Google account."
473 "(https://console.developers.google.com/)"
474 "2. You should be prompted to create a new project (name does not matter)."
475 f"3. Click on Enable APIs and Services at the top."
476 "4. In the list of APIs choose or search for YouTube Data API v3 and "
477 "click on it. Choose Enable."
478 f"5. Click on Credentials on the left navigation bar."
479 "6. Click on Create Credential at the top."
480 '7. At the top click the link for "API key".'
481 "8. No application restrictions are needed. Click Create at the bottom."
482 "9. You now have a key to add to `{prefix}set api youtube api_key`"
485 f"1. Go to Google Developers Console and log in with your Google account."
486 "(https://console.developers.google.com/)"
487 "2. You should be prompted to create a new project (name does not matter)."
488 f"3. Click on Enable APIs and Services at the top."
489 "4. In the list of APIs choose or search for YouTube Data API v3 and "
490 "click on it. Choose Enable."
491 f"5. Click on Credentials on the left navigation bar."
492 "6. Click on Create Credential at the top."
493 '7. At the top click the link for "API key".'
494 "8. No application restrictions are needed. Click Create at the bottom."
495 f"9. You now have a key to add to `{prefix}set api youtube api_key`"
498 # It shouldn't matter if the string prefixes are capitalized.
500 F"{F'{humanize_number(pos)}.': <{pound_len+2}} "
501 F"{balance: <{bal_len + 5}} "
502 F"<<{author.display_name}>>\n"
506 F"We have to remember to escape {braces}."
511 welcome_to_programming = R"hello," R" world!"
513 fstring = F"f-strings definitely make things more {difficult} than they need to be for {{black}}. But boy they sure are handy. The problem is that some lines will need to have the 'f' whereas others do not. This {line}, for example, needs one."
515 x = F"This is a long string which contains an f-expr that should not split {{{[i for i in range(5)]}}}."
518 "\N{BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR}\N{VARIATION SELECTOR-16}"
521 xxxxxx_xxx_xxxx_xx_xxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxxxx_xxxx_xxxx_xxxxx = xxxx.xxxxxx.xxxxxxxxx.xxxxxxxxxxxxxxxxxxxx(
523 "x3_xxxxxxxx": "xxx3_xxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxxxx_xxxxxxxx_xxxxxx_xxxxxxx",
533 result = type(message)("")
536 # Don't merge multiline (e.g. triple-quoted) strings.
539 """SELECT xxxxxxxxxxxxxxxxxxxx(xxx)"""
540 """ FROM xxxxxxxxxxxxxxxx WHERE xxxxxxxxxx AND xxx <> xxxxxxxxxxxxxx()"""
544 # There was a bug where tuples were being identified as long strings.
558 stupid_format_method_bug = (
559 "Some really long string that just so happens to be the {} {} to force the 'format'"
560 " method to hang over the line length boundary. This is pretty annoying.".format(
569 "This is a regression test. xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx"
570 " xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx"
571 " xxxx.".format("xxxxxxxxxx", "xxxxxx", "xxxxxxxxxx")
579 "xxx_xxxxxxxxxx(xxxxx={}, xxxx={}, xxxxx, xxxx_xxxx_xxxxxxxxxx={})"
580 .format(xxxxx, xxxx, xxxx_xxxx_xxxxxxxxxx),
591 "[{}]: xxx_xxxxxxxxxx(xxxxx={}, xxxx={}, xxxxx={}"
592 " xxxx_xxxx_xxxxxxxxxx={}, xxxx={})".format(
593 xxxx._xxxxxxxxxxxxxx, xxxxx, xxxx, xxxx_xxxx_xxxxxxxxxx, xxxxxxx
602 for (xxx_xxxx, _xxx_xxx, _xxx_xxxxx, xxx_xxxx) in xxxx:
604 assert ("x" in xxx) or (xxx in xxx_xxx_xxxxx), (
605 "{0} xxxxxxx xx {1}, xxx {1} xx xxx xx xxxx xx xxx xxxx: xxx xxxx {2}"
606 .format(xxx_xxxx, xxx, xxxxxx.xxxxxxx(xxx_xxx_xxxxx))
611 def disappearing_comment():
613 ( # xx -x xxxxxxx xx xxx xxxxxxx.
614 "{{xxx_xxxxxxxxxx_xxxxxxxx}} xxx xxxx {} {{xxxx}} >&2".format(
616 if xxxxx.xx_xxxxxxxxxx
617 else ( # Disappearing Comment
618 "--xxxxxxx --xxxxxx=x --xxxxxx-xxxxx=xxxxxx"
619 " --xxxxxx-xxxx=xxxxxxxxxxx.xxx"
633 "@xxxxxx '{xxxx_xxx}\t' > {xxxxxx_xxxx}.xxxxxxx;"
634 "{xxxx_xxx} >> {xxxxxx_xxxx}.xxxxxxx 2>&1; xx=$$?;"
636 xxxx_xxx=xxxx_xxxxxxx,
637 xxxxxx_xxxx=xxxxxxx + "/" + xxxx_xxx_xxxx,
638 x=xxx_xxxxx_xxxxx_xxx,
646 func_call_where_string_arg_has_method_call_and_bad_parens(
647 "A long string with {}. This string is so long that it is ridiculous. It can't fit"
648 " on one line at alllll.".format("formatting"),
651 func_call_where_string_arg_has_old_fmt_and_bad_parens(
652 "A long string with {}. This string is so long that it is ridiculous. It can't fit"
653 " on one line at alllll." % "formatting",
656 func_call_where_string_arg_has_old_fmt_and_bad_parens(
657 "A long string with {}. This {} is so long that it is ridiculous. It can't fit on"
658 " one line at alllll." % ("formatting", "string"),
666 "xxxxxxxxxx xxxx xx xxxxxx(%x) xx %x xxxx xx xxx %x.xx"
667 % (len(self) + 1, xxxx.xxxxxxxxxx, xxxx.xxxxxxxxxx)
668 + " %.3f (%s) to %.3f (%s).\n"
671 xxxx.xxxxxxxxxxxxxx(xxxx.xxxxxxxxx),
673 xxxx.xxxxxxxxxxxxxx(xx),
682 "xx {xxxxxxxxxxx}/xxxxxxxxxxx.xxx xxxx.xxx && xxxxxx -x "
683 '"xxxx xxxxxxx xxxxxx xxxx; xxxx xxxxxx_xxxxx xxxxxx xxxx; '
684 "xxxx.xxxx_xxxxxx(['xxxx.xxx'], xxxx.xxxxxxx().xxxxxxxxxx)\" ",
693 "xx {xxxxxxxxxxx}/xxxxxxxxxxx.xxx xxxx.xxx && xxxxxx -x "
694 "xxxx, ('xxxxxxx xxxxxx xxxx, xxxx') xxxxxx_xxxxx xxxxxx xxxx; "
695 "xxxx.xxxx_xxxxxx(['xxxx.xxx'], xxxx.xxxxxxx().xxxxxxxxxx)\" ",
703 "xxxx xxxxxxx xxxxxxxxx -x xxx -x /xxx/{0} -x xxx,xxx -xx {1} -xx {1} -xx"
704 " xxx=xxx_xxxx,xxx_xx,xxx_xxx,xxx_xxxx,xxx_xx,xxx_xxx | xxxxxx -x xxxxxxxx -x"
708 "xxxx xxxxxxx xxxxxxxxx -x xxx -x /xxx/{0} -x xxx,xxx -xx {1} -xx {1} -xx"
709 " xxx=xxx_xxxx_xxx_xxxx,xxx_xx_xxx_xxxx,xxx_xxxx_xxx_xxxx,xxx_xx_xxxx_xxxx,xxx_xxx_xxxx,xxx_xxx_xxxx"
710 " xxxx=xxx | xxxxxx -x xxxxxxxx -x xxxxxxxx -x"
719 "xxx xxxxxx xxx xxxxxxxxx.xx xx xxxxxxxx. xxx xxxxxxxxxxxxx.xx"
721 + "xx xxxxxx xxxxxx xxxxxx xx xxxxxxx xxx xxx ${0} xx x xxxxxxxx xxxxx"
722 .xxxxxx(xxxxxx_xxxxxx_xxx)
730 "xxxxxxxxxxxxxxx": xxxxxx_xxxxx_xxxx,
731 # 'xxxxxxxxxxxxxxxxxxxxxxx'
732 # 'xxxxxxxxxxxxxxxxxxxxxx'
733 # 'xxxxxxxxxxxxxxxxxx'
734 # 'xxxxxxxxxxxxxxxxx'
735 "xxxxxxxxxx": xxxxx_xxxxx,
740 def xxxx_xxx_xx_xxxxxxxxxx_xxxx_xxxxxxxxx(xxxx):
747 xxxxxx={"xxxxxx 1": xxxxxx(xxxx="xxxxxx 1", xxxxxx=600.0)},
748 xxxxxxxx_xxxxxxx=0.0,
755 xxxxxx={"xxxxxx 1": xxxxxx(xxxx="xxxxxx 1", xxxxxx=200.0)},
756 xxxxxxxx_xxxxxxx=0.0,
767 " xxxxx3xxxx1xx2xxxxxxxxxxxxxx0xx6xxxxxxxxxx2xxxxxx9xxxxxxxxxx0xxxxx1xxx2x/xx9xx6+x+xxxxxxxxxxxxxx4xxxxxxxxxxxxxxxxxxxxx43xxx2xx2x4x++xxx6xxxxxxxxx+xxxxx/xx9x+xxxxxxxxxxxxxx8x15xxxxxxxxxxxxxxxxx82xx/xxxxxxxxxxxxxx/x5xxxxxxxxxxxxxx6xxxxxx74x4/xxx4x+xxxxxxxxx2xxxxxxxx87xxxxx4xxxxxxxx3xx0xxxxx4xxx1xx9xx5xxxxxxx/xxxxx5xx6xx4xxxx1x/x2xxxxxxxxxxxx64xxxxxxx1x0xx5xxxxxxxxxxxxxx=="
768 " xxxxx000 xxxxxxxxxx\n",
770 " xxxxx3xxxx1xx2xxxxxxxxxxxxxx6xxxxxxxxxxxxxx9xxxxxxxxxxxxx3xxx9xxxxxxxxxxxxxxxx0xxxxxxxxxxxxxxxxx2xxxx2xxx6xxxxx/xx54xxxxxxxxx4xxx3xxxxxx9xx3xxxxx39xxxxxxxxx5xx91xxxx7xxxxxx8xxxxxxxxxxxxxxxx9xxx93xxxxxxxxxxxxxxxxx7xxx8xx8xx4/x1xxxxx1x3xxxxxxxxxxxxx3xxxxxx9xx4xx4x7xxxxxxxxxxxxx1xxxxxxxxx7xxxxxxxxxxxxxx4xx6xxxxxxxxx9xxx7xxxx2xxxxxxxxxxxxxxxxxxxxxx8xxxxxxxxxxxxxxxxxxxx6xx=="
771 " xxxxx010 xxxxxxxxxx\n",
775 " xxxxx3xxxx1xx2xxxxxxxxxxxxxx0xx6xxxxxxxxxx2xxxxxx9xxxxxxxxxx0xxxxx1xxx2x/xx9xx6+x+xxxxxxxxxxxxxx4xxxxxxxxxxxxxxxxxxxxx43xxx2xx2x4x++xxx6xxxxxxxxx+xxxxx/xx9x+xxxxxxxxxxxxxx8x15xxxxxxxxxxxxxxxxx82xx/xxxxxxxxxxxxxx/x5xxxxxxxxxxxxxx6xxxxxx74x4/xxx4x+xxxxxxxxx2xxxxxxxx87xxxxx4xxxxxxxx3xx0xxxxx4xxx1xx9xx5xxxxxxx/xxxxx5xx6xx4xxxx1x/x2xxxxxxxxxxxx64xxxxxxx1x0xx5xxxxxxxxxxxxxx=="
776 " xxxxx000 xxxxxxxxxx\n",
778 " xxxxx3xxxx1xx2xxxxxxxxxxxxxx6xxxxxxxxxxxxxx9xxxxxxxxxxxxx3xxx9xxxxxxxxxxxxxxxx0xxxxxxxxxxxxxxxxx2xxxx2xxx6xxxxx/xx54xxxxxxxxx4xxx3xxxxxx9xx3xxxxx39xxxxxxxxx5xx91xxxx7xxxxxx8xxxxxxxxxxxxxxxx9xxx93xxxxxxxxxxxxxxxxx7xxx8xx8xx4/x1xxxxx1x3xxxxxxxxxxxxx3xxxxxx9xx4xx4x7xxxxxxxxxxxxx1xxxxxxxxx7xxxxxxxxxxxxxx4xx6xxxxxxxxx9xxx7xxxx2xxxxxxxxxxxxxxxxxxxxxx8xxxxxxxxxxxxxxxxxxxx6xx=="
779 " xxxxx010 xxxxxxxxxx\n",
785 xxx_xxx = ( # xxxx xxxxxxxxxx xxxx xx xxxx xx xxx xxxxxxxx xxxxxx xxxxx.
786 'xxxx xxx xxxxxxxx_xxxx xx "xxxxxxxxxx".\n xxx: xxxxxx xxxxxxxx_xxxx=xxxxxxxxxx'
790 some_tuple = ("some string", "some string which should be joined")
792 some_commented_string = ( # This comment gets thrown to the top.
793 "This string is long but not so long that it needs hahahah toooooo be so greatttt"
794 " {} that I just can't think of any more good words to say about it at"
795 " allllllllllll".format("ha") # comments here are fine
798 some_commented_string = (
799 "This string is long but not so long that it needs hahahah toooooo be so greatttt" # But these
800 " {} that I just can't think of any more good words to say about it at" # comments will stay
801 " allllllllllll".format("ha") # comments here are fine
804 lpar_and_rpar_have_comments = func_call( # LPAR Comment
805 "Long really ridiculous type of string that shouldn't really even exist at all. I"
806 " mean commmme onnn!!!", # Comma Comment
810 "sudo -E deluge-console info --detailed --sort-reverse=time_added "
811 f"{'' if ID is None else ID} | perl -nE 'print if /^{field}:/'"
815 "sudo -E deluge-console info --detailed --sort-reverse=time_added"
816 f" {'' if ID is None else ID} | perl -nE 'print if /^{field}:/'"
820 "sudo -E deluge-console info --detailed --sort-reverse=time_added"
821 f" {'{{}}' if ID is None else ID} | perl -nE 'print if /^{field}:/'"
825 "sudo -E deluge-console info --detailed --sort-reverse=time_added {'' if ID is"
826 f" None else ID}} | perl -nE 'print if /^{field}:/'"
830 "This string really doesn't need to be an {{fstring}}, but this one most"
831 f" certainly, absolutely {does}."
834 fstring = f"We have to remember to escape {braces}. Like {{these}}. But not {this}."
841 f"This string ({string_leaf.value}) appears to be pointless (i.e. has"
847 user_regex = _lazy_re_compile(
848 r"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*\Z" # dot-atom
849 r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-\011\013\014\016-\177])*"\Z)', # quoted-string
855 user_regex = _lazy_re_compile(
856 "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # dot-atom
857 "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", # quoted-string
863 user_regex = _lazy_re_compile(
864 "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # dot-atom
865 "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", # quoted-string
873 if not hasattr(module, name):
875 "Could not find object %s in %s.\n"
876 "Please note that you cannot serialize things like inner "
877 "classes. Please move the object into the main module "
878 "body to use migrations.\n"
879 "For more information, see "
880 "https://docs.djangoproject.com/en/%s/topics/migrations/#serializing-values"
881 % (name, module_name, get_docs_version())
888 if not hasattr(module, name):
890 "Could not find object %s in %s.\nPlease note that you cannot"
891 " serialize things like inner classes. Please move the object into"
892 " the main module body to use migrations.\nFor more information,"
893 " see https://docs.djangoproject.com/en/%s/topics/migrations/#serializing-values"
894 % (name, module_name, get_docs_version())
899 "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
900 "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
901 "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
902 "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
906 class Step(StepBase):
909 "SR AAAA-CORRECT NAME IS {last_name} {first_name}{middle_name}"
910 " {title}/P{passenger_association}".format(
912 first_name=first_name,
913 middle_name=middle_name,
915 passenger_association=passenger_association,
920 xxxxxxx_xxxxxx_xxxxxxx = xxx(
924 '((x.aaaaaaaaa = "xxxxxx.xxxxxxxxxxxxxxxxxxxxx") || (x.xxxxxxxxx ='
925 ' "xxxxxxxxxxxx")) && '
926 # xxxxx xxxxxxxxxxxx xxxx xxx (xxxxxxxxxxxxxxxx) xx x xxxxxxxxx xx xxxxxx.
927 "(x.bbbbbbbbbbbb.xxx != "
928 '"xxx:xxx:xxx::cccccccccccc:xxxxxxx-xxxx/xxxxxxxxxxx/xxxxxxxxxxxxxxxxx") && '
934 if __name__ == "__main__":
935 for i in range(4, 8):
937 r"for pid in $(ps aux | grep paster | grep -v grep | grep '\-%d' | awk"
938 r" '{print $2}'); do kill $pid; done" % (i)
950 c_float(val[0][0] / val[0][1]).value
951 == c_float(value[0][0] / value[0][1]).value
952 ), "%s didn't roundtrip" % tag
955 class xxxxxxxxxxxxxxxxxxxxx(xxxx.xxxxxxxxxxxxx):
956 def xxxxxxx_xxxxxx(xxxx):
957 assert xxxxxxx_xxxx in [
958 x.xxxxx.xxxxxx.xxxxx.xxxxxx,
959 x.xxxxx.xxxxxx.xxxxx.xxxx,
961 "xxxxxxxxxxx xxxxxxx xxxx (xxxxxx xxxx) %x xxx xxxxx" % xxxxxxx_xxxx
967 ] = "test" # set some Thrift field to non-None in the struct aa bb cc dd ee
970 "asdf_hjkl_jkl": re.compile(
971 r"(?<!([0-9]\ ))(?<=(^|\ ))([A-Z]+(\ )?|[0-9](\ )|[a-z](\ )){4,7}([A-Z]|[0-9]|[a-z])($|\b)(?!(\ ?([0-9]\ )|(\.)))"
975 RE_TWO_BACKSLASHES = {
976 "asdf_hjkl_jkl": re.compile(
977 r"(?<!([0-9]\ ))(?<=(^|\ ))([A-Z]+(\ )?|[0-9](\ )|[a-z](\\"
978 r" )){4,7}([A-Z]|[0-9]|[a-z])($|\b)(?!(\ ?([0-9]\ )|(\.)))"
982 RE_THREE_BACKSLASHES = {
983 "asdf_hjkl_jkl": re.compile(
984 r"(?<!([0-9]\ ))(?<=(^|\ ))([A-Z]+(\ )?|[0-9](\ )|[a-z](\\\ )){4,7}([A-Z]|[0-9]|[a-z])($|\b)(?!(\ ?([0-9]\ )|(\.)))"
988 # We do NOT split on f-string expressions.
990 "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam."
991 f" {[f'{i}' for i in range(10)]}"
994 "This is a long string which contains an f-expr that should not split"
995 f" {{{[i for i in range(5)]}}}."
998 # The parens should NOT be removed in this case.
1000 "my very long string that should get formatted if I'm careful to make sure it goes"
1001 " over 88 characters which it has now"
1004 # The parens should NOT be removed in this case.
1006 "my very long string that should get formatted if I'm careful to make sure it goes"
1007 " over 88 characters which it has now"
1010 # The parens should NOT be removed in this case.
1012 "my very long string"
1013 " that should get formatted"
1014 " if I'm careful to make sure"
1015 " it goes over 88 characters which"
1020 def _legacy_listen_examples():
1022 " \"listen for the '%(event_name)s' event\"\n"
1023 "\n # ... (event logic logic logic) ...\n"
1031 async def foo(self):
1033 for candidate in CANDIDATES:
1035 "**{candidate.object_type} {candidate.rev}**"
1036 " - {candidate.description}\n"
1041 f"{f'{humanize_number(pos)}.': <{pound_len+2}} "
1042 f"{balance: <{bal_len + 5}} "
1043 f"<<{author.display_name}>>\n"
1048 == "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', "
1049 "'grykangaroo$', 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', "
1050 "'o$', 'oo$', 'roo$', 'rykangaroo$', 'ykangaroo$']"
1054 != "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', "
1055 "'grykangaroo$', 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', "
1056 "'o$', 'oo$', 'roo$', 'rykangaroo$', 'ykangaroo$']"
1060 <= "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', "
1061 "'grykangaroo$', 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', "
1062 "'o$', 'oo$', 'roo$', 'rykangaroo$', 'ykangaroo$']"
1066 >= "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', "
1067 "'grykangaroo$', 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', "
1068 "'o$', 'oo$', 'roo$', 'rykangaroo$', 'ykangaroo$']"
1072 < "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', "
1073 "'grykangaroo$', 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', "
1074 "'o$', 'oo$', 'roo$', 'rykangaroo$', 'ykangaroo$']"
1078 > "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', "
1079 "'grykangaroo$', 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', "
1080 "'o$', 'oo$', 'roo$', 'rykangaroo$', 'ykangaroo$']"
1084 in "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', 'grykangaroo$',"
1085 " 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', 'o$', 'oo$', 'roo$', 'rykangaroo$',"
1090 not in "['$', 'angaroo$', 'angrykangaroo$', 'aroo$', 'garoo$', 'grykangaroo$',"
1091 " 'kangaroo$', 'ngaroo$', 'ngrykangaroo$', 'o$', 'oo$', 'roo$',"
1092 " 'rykangaroo$', 'ykangaroo$']"
1095 f"1. Go to Google Developers Console and log in with your Google account."
1096 f"(https://console.developers.google.com/)"
1097 f"2. You should be prompted to create a new project (name does not matter)."
1098 f"3. Click on Enable APIs and Services at the top."
1099 f"4. In the list of APIs choose or search for YouTube Data API v3 and "
1100 f"click on it. Choose Enable."
1101 f"5. Click on Credentials on the left navigation bar."
1102 f"6. Click on Create Credential at the top."
1103 f'7. At the top click the link for "API key".'
1104 f"8. No application restrictions are needed. Click Create at the bottom."
1105 f"9. You now have a key to add to `{{prefix}}set api youtube api_key`"
1108 f"1. Go to Google Developers Console and log in with your Google account."
1109 f"(https://console.developers.google.com/)"
1110 f"2. You should be prompted to create a new project (name does not matter)."
1111 f"3. Click on Enable APIs and Services at the top."
1112 f"4. In the list of APIs choose or search for YouTube Data API v3 and "
1113 f"click on it. Choose Enable."
1114 f"5. Click on Credentials on the left navigation bar."
1115 f"6. Click on Create Credential at the top."
1116 f'7. At the top click the link for "API key".'
1117 f"8. No application restrictions are needed. Click Create at the bottom."
1118 f"9. You now have a key to add to `{{prefix}}set api youtube api_key`"
1121 "1. Go to Google Developers Console and log in with your Google account."
1122 "(https://console.developers.google.com/)"
1123 "2. You should be prompted to create a new project (name does not matter)."
1124 "3. Click on Enable APIs and Services at the top."
1125 "4. In the list of APIs choose or search for YouTube Data API v3 and "
1126 "click on it. Choose Enable."
1127 "5. Click on Credentials on the left navigation bar."
1128 "6. Click on Create Credential at the top."
1129 '7. At the top click the link for "API key".'
1130 "8. No application restrictions are needed. Click Create at the bottom."
1131 f"9. You now have a key to add to `{prefix}set api youtube api_key`"
1134 # It shouldn't matter if the string prefixes are capitalized.
1136 f"{F'{humanize_number(pos)}.': <{pound_len+2}} "
1137 f"{balance: <{bal_len + 5}} "
1138 f"<<{author.display_name}>>\n"
1141 fstring = f"We have to remember to escape {braces}. Like {{these}}. But not {this}."
1143 welcome_to_programming = R"hello," R" world!"
1146 f"f-strings definitely make things more {difficult} than they need to be for"
1147 " {black}. But boy they sure are handy. The problem is that some lines will need"
1148 f" to have the 'f' whereas others do not. This {line}, for example, needs one."
1152 "This is a long string which contains an f-expr that should not split"
1153 f" {{{[i for i in range(5)]}}}."
1157 "\N{BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR}\N{VARIATION SELECTOR-16}"
1160 xxxxxx_xxx_xxxx_xx_xxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxxxx_xxxx_xxxx_xxxxx = xxxx.xxxxxx.xxxxxxxxx.xxxxxxxxxxxxxxxxxxxx(
1163 "xxx3_xxxxx_xxxxxxxx_xxxxxxxx_xxxxxxxxxx_xxxxxxxx_xxxxxx_xxxxxxx"