Загрузить файлы в «venv/Lib/site-packages/pip/_vendor/rich»
This commit is contained in:
482
venv/Lib/site-packages/pip/_vendor/rich/_spinners.py
Normal file
482
venv/Lib/site-packages/pip/_vendor/rich/_spinners.py
Normal file
@@ -0,0 +1,482 @@
|
||||
"""
|
||||
Spinners are from:
|
||||
* cli-spinners:
|
||||
MIT License
|
||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
|
||||
FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
"""
|
||||
|
||||
SPINNERS = {
|
||||
"dots": {
|
||||
"interval": 80,
|
||||
"frames": "⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏",
|
||||
},
|
||||
"dots2": {"interval": 80, "frames": "⣾⣽⣻⢿⡿⣟⣯⣷"},
|
||||
"dots3": {
|
||||
"interval": 80,
|
||||
"frames": "⠋⠙⠚⠞⠖⠦⠴⠲⠳⠓",
|
||||
},
|
||||
"dots4": {
|
||||
"interval": 80,
|
||||
"frames": "⠄⠆⠇⠋⠙⠸⠰⠠⠰⠸⠙⠋⠇⠆",
|
||||
},
|
||||
"dots5": {
|
||||
"interval": 80,
|
||||
"frames": "⠋⠙⠚⠒⠂⠂⠒⠲⠴⠦⠖⠒⠐⠐⠒⠓⠋",
|
||||
},
|
||||
"dots6": {
|
||||
"interval": 80,
|
||||
"frames": "⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⠴⠲⠒⠂⠂⠒⠚⠙⠉⠁",
|
||||
},
|
||||
"dots7": {
|
||||
"interval": 80,
|
||||
"frames": "⠈⠉⠋⠓⠒⠐⠐⠒⠖⠦⠤⠠⠠⠤⠦⠖⠒⠐⠐⠒⠓⠋⠉⠈",
|
||||
},
|
||||
"dots8": {
|
||||
"interval": 80,
|
||||
"frames": "⠁⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⠠⠠⠤⠦⠖⠒⠐⠐⠒⠓⠋⠉⠈⠈",
|
||||
},
|
||||
"dots9": {"interval": 80, "frames": "⢹⢺⢼⣸⣇⡧⡗⡏"},
|
||||
"dots10": {"interval": 80, "frames": "⢄⢂⢁⡁⡈⡐⡠"},
|
||||
"dots11": {"interval": 100, "frames": "⠁⠂⠄⡀⢀⠠⠐⠈"},
|
||||
"dots12": {
|
||||
"interval": 80,
|
||||
"frames": [
|
||||
"⢀⠀",
|
||||
"⡀⠀",
|
||||
"⠄⠀",
|
||||
"⢂⠀",
|
||||
"⡂⠀",
|
||||
"⠅⠀",
|
||||
"⢃⠀",
|
||||
"⡃⠀",
|
||||
"⠍⠀",
|
||||
"⢋⠀",
|
||||
"⡋⠀",
|
||||
"⠍⠁",
|
||||
"⢋⠁",
|
||||
"⡋⠁",
|
||||
"⠍⠉",
|
||||
"⠋⠉",
|
||||
"⠋⠉",
|
||||
"⠉⠙",
|
||||
"⠉⠙",
|
||||
"⠉⠩",
|
||||
"⠈⢙",
|
||||
"⠈⡙",
|
||||
"⢈⠩",
|
||||
"⡀⢙",
|
||||
"⠄⡙",
|
||||
"⢂⠩",
|
||||
"⡂⢘",
|
||||
"⠅⡘",
|
||||
"⢃⠨",
|
||||
"⡃⢐",
|
||||
"⠍⡐",
|
||||
"⢋⠠",
|
||||
"⡋⢀",
|
||||
"⠍⡁",
|
||||
"⢋⠁",
|
||||
"⡋⠁",
|
||||
"⠍⠉",
|
||||
"⠋⠉",
|
||||
"⠋⠉",
|
||||
"⠉⠙",
|
||||
"⠉⠙",
|
||||
"⠉⠩",
|
||||
"⠈⢙",
|
||||
"⠈⡙",
|
||||
"⠈⠩",
|
||||
"⠀⢙",
|
||||
"⠀⡙",
|
||||
"⠀⠩",
|
||||
"⠀⢘",
|
||||
"⠀⡘",
|
||||
"⠀⠨",
|
||||
"⠀⢐",
|
||||
"⠀⡐",
|
||||
"⠀⠠",
|
||||
"⠀⢀",
|
||||
"⠀⡀",
|
||||
],
|
||||
},
|
||||
"dots8Bit": {
|
||||
"interval": 80,
|
||||
"frames": "⠀⠁⠂⠃⠄⠅⠆⠇⡀⡁⡂⡃⡄⡅⡆⡇⠈⠉⠊⠋⠌⠍⠎⠏⡈⡉⡊⡋⡌⡍⡎⡏⠐⠑⠒⠓⠔⠕⠖⠗⡐⡑⡒⡓⡔⡕⡖⡗⠘⠙⠚⠛⠜⠝⠞⠟⡘⡙"
|
||||
"⡚⡛⡜⡝⡞⡟⠠⠡⠢⠣⠤⠥⠦⠧⡠⡡⡢⡣⡤⡥⡦⡧⠨⠩⠪⠫⠬⠭⠮⠯⡨⡩⡪⡫⡬⡭⡮⡯⠰⠱⠲⠳⠴⠵⠶⠷⡰⡱⡲⡳⡴⡵⡶⡷⠸⠹⠺⠻"
|
||||
"⠼⠽⠾⠿⡸⡹⡺⡻⡼⡽⡾⡿⢀⢁⢂⢃⢄⢅⢆⢇⣀⣁⣂⣃⣄⣅⣆⣇⢈⢉⢊⢋⢌⢍⢎⢏⣈⣉⣊⣋⣌⣍⣎⣏⢐⢑⢒⢓⢔⢕⢖⢗⣐⣑⣒⣓⣔⣕"
|
||||
"⣖⣗⢘⢙⢚⢛⢜⢝⢞⢟⣘⣙⣚⣛⣜⣝⣞⣟⢠⢡⢢⢣⢤⢥⢦⢧⣠⣡⣢⣣⣤⣥⣦⣧⢨⢩⢪⢫⢬⢭⢮⢯⣨⣩⣪⣫⣬⣭⣮⣯⢰⢱⢲⢳⢴⢵⢶⢷"
|
||||
"⣰⣱⣲⣳⣴⣵⣶⣷⢸⢹⢺⢻⢼⢽⢾⢿⣸⣹⣺⣻⣼⣽⣾⣿",
|
||||
},
|
||||
"line": {"interval": 130, "frames": ["-", "\\", "|", "/"]},
|
||||
"line2": {"interval": 100, "frames": "⠂-–—–-"},
|
||||
"pipe": {"interval": 100, "frames": "┤┘┴└├┌┬┐"},
|
||||
"simpleDots": {"interval": 400, "frames": [". ", ".. ", "...", " "]},
|
||||
"simpleDotsScrolling": {
|
||||
"interval": 200,
|
||||
"frames": [". ", ".. ", "...", " ..", " .", " "],
|
||||
},
|
||||
"star": {"interval": 70, "frames": "✶✸✹✺✹✷"},
|
||||
"star2": {"interval": 80, "frames": "+x*"},
|
||||
"flip": {
|
||||
"interval": 70,
|
||||
"frames": "___-``'´-___",
|
||||
},
|
||||
"hamburger": {"interval": 100, "frames": "☱☲☴"},
|
||||
"growVertical": {
|
||||
"interval": 120,
|
||||
"frames": "▁▃▄▅▆▇▆▅▄▃",
|
||||
},
|
||||
"growHorizontal": {
|
||||
"interval": 120,
|
||||
"frames": "▏▎▍▌▋▊▉▊▋▌▍▎",
|
||||
},
|
||||
"balloon": {"interval": 140, "frames": " .oO@* "},
|
||||
"balloon2": {"interval": 120, "frames": ".oO°Oo."},
|
||||
"noise": {"interval": 100, "frames": "▓▒░"},
|
||||
"bounce": {"interval": 120, "frames": "⠁⠂⠄⠂"},
|
||||
"boxBounce": {"interval": 120, "frames": "▖▘▝▗"},
|
||||
"boxBounce2": {"interval": 100, "frames": "▌▀▐▄"},
|
||||
"triangle": {"interval": 50, "frames": "◢◣◤◥"},
|
||||
"arc": {"interval": 100, "frames": "◜◠◝◞◡◟"},
|
||||
"circle": {"interval": 120, "frames": "◡⊙◠"},
|
||||
"squareCorners": {"interval": 180, "frames": "◰◳◲◱"},
|
||||
"circleQuarters": {"interval": 120, "frames": "◴◷◶◵"},
|
||||
"circleHalves": {"interval": 50, "frames": "◐◓◑◒"},
|
||||
"squish": {"interval": 100, "frames": "╫╪"},
|
||||
"toggle": {"interval": 250, "frames": "⊶⊷"},
|
||||
"toggle2": {"interval": 80, "frames": "▫▪"},
|
||||
"toggle3": {"interval": 120, "frames": "□■"},
|
||||
"toggle4": {"interval": 100, "frames": "■□▪▫"},
|
||||
"toggle5": {"interval": 100, "frames": "▮▯"},
|
||||
"toggle6": {"interval": 300, "frames": "ဝ၀"},
|
||||
"toggle7": {"interval": 80, "frames": "⦾⦿"},
|
||||
"toggle8": {"interval": 100, "frames": "◍◌"},
|
||||
"toggle9": {"interval": 100, "frames": "◉◎"},
|
||||
"toggle10": {"interval": 100, "frames": "㊂㊀㊁"},
|
||||
"toggle11": {"interval": 50, "frames": "⧇⧆"},
|
||||
"toggle12": {"interval": 120, "frames": "☗☖"},
|
||||
"toggle13": {"interval": 80, "frames": "=*-"},
|
||||
"arrow": {"interval": 100, "frames": "←↖↑↗→↘↓↙"},
|
||||
"arrow2": {
|
||||
"interval": 80,
|
||||
"frames": ["⬆️ ", "↗️ ", "➡️ ", "↘️ ", "⬇️ ", "↙️ ", "⬅️ ", "↖️ "],
|
||||
},
|
||||
"arrow3": {
|
||||
"interval": 120,
|
||||
"frames": ["▹▹▹▹▹", "▸▹▹▹▹", "▹▸▹▹▹", "▹▹▸▹▹", "▹▹▹▸▹", "▹▹▹▹▸"],
|
||||
},
|
||||
"bouncingBar": {
|
||||
"interval": 80,
|
||||
"frames": [
|
||||
"[ ]",
|
||||
"[= ]",
|
||||
"[== ]",
|
||||
"[=== ]",
|
||||
"[ ===]",
|
||||
"[ ==]",
|
||||
"[ =]",
|
||||
"[ ]",
|
||||
"[ =]",
|
||||
"[ ==]",
|
||||
"[ ===]",
|
||||
"[====]",
|
||||
"[=== ]",
|
||||
"[== ]",
|
||||
"[= ]",
|
||||
],
|
||||
},
|
||||
"bouncingBall": {
|
||||
"interval": 80,
|
||||
"frames": [
|
||||
"( ● )",
|
||||
"( ● )",
|
||||
"( ● )",
|
||||
"( ● )",
|
||||
"( ●)",
|
||||
"( ● )",
|
||||
"( ● )",
|
||||
"( ● )",
|
||||
"( ● )",
|
||||
"(● )",
|
||||
],
|
||||
},
|
||||
"smiley": {"interval": 200, "frames": ["😄 ", "😝 "]},
|
||||
"monkey": {"interval": 300, "frames": ["🙈 ", "🙈 ", "🙉 ", "🙊 "]},
|
||||
"hearts": {"interval": 100, "frames": ["💛 ", "💙 ", "💜 ", "💚 ", "❤️ "]},
|
||||
"clock": {
|
||||
"interval": 100,
|
||||
"frames": [
|
||||
"🕛 ",
|
||||
"🕐 ",
|
||||
"🕑 ",
|
||||
"🕒 ",
|
||||
"🕓 ",
|
||||
"🕔 ",
|
||||
"🕕 ",
|
||||
"🕖 ",
|
||||
"🕗 ",
|
||||
"🕘 ",
|
||||
"🕙 ",
|
||||
"🕚 ",
|
||||
],
|
||||
},
|
||||
"earth": {"interval": 180, "frames": ["🌍 ", "🌎 ", "🌏 "]},
|
||||
"material": {
|
||||
"interval": 17,
|
||||
"frames": [
|
||||
"█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
|
||||
"██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
|
||||
"███▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
|
||||
"████▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
|
||||
"██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
|
||||
"██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
|
||||
"███████▁▁▁▁▁▁▁▁▁▁▁▁▁",
|
||||
"████████▁▁▁▁▁▁▁▁▁▁▁▁",
|
||||
"█████████▁▁▁▁▁▁▁▁▁▁▁",
|
||||
"█████████▁▁▁▁▁▁▁▁▁▁▁",
|
||||
"██████████▁▁▁▁▁▁▁▁▁▁",
|
||||
"███████████▁▁▁▁▁▁▁▁▁",
|
||||
"█████████████▁▁▁▁▁▁▁",
|
||||
"██████████████▁▁▁▁▁▁",
|
||||
"██████████████▁▁▁▁▁▁",
|
||||
"▁██████████████▁▁▁▁▁",
|
||||
"▁██████████████▁▁▁▁▁",
|
||||
"▁██████████████▁▁▁▁▁",
|
||||
"▁▁██████████████▁▁▁▁",
|
||||
"▁▁▁██████████████▁▁▁",
|
||||
"▁▁▁▁█████████████▁▁▁",
|
||||
"▁▁▁▁██████████████▁▁",
|
||||
"▁▁▁▁██████████████▁▁",
|
||||
"▁▁▁▁▁██████████████▁",
|
||||
"▁▁▁▁▁██████████████▁",
|
||||
"▁▁▁▁▁██████████████▁",
|
||||
"▁▁▁▁▁▁██████████████",
|
||||
"▁▁▁▁▁▁██████████████",
|
||||
"▁▁▁▁▁▁▁█████████████",
|
||||
"▁▁▁▁▁▁▁█████████████",
|
||||
"▁▁▁▁▁▁▁▁████████████",
|
||||
"▁▁▁▁▁▁▁▁████████████",
|
||||
"▁▁▁▁▁▁▁▁▁███████████",
|
||||
"▁▁▁▁▁▁▁▁▁███████████",
|
||||
"▁▁▁▁▁▁▁▁▁▁██████████",
|
||||
"▁▁▁▁▁▁▁▁▁▁██████████",
|
||||
"▁▁▁▁▁▁▁▁▁▁▁▁████████",
|
||||
"▁▁▁▁▁▁▁▁▁▁▁▁▁███████",
|
||||
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁██████",
|
||||
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████",
|
||||
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████",
|
||||
"█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████",
|
||||
"██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███",
|
||||
"██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███",
|
||||
"███▁▁▁▁▁▁▁▁▁▁▁▁▁▁███",
|
||||
"████▁▁▁▁▁▁▁▁▁▁▁▁▁▁██",
|
||||
"█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█",
|
||||
"█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█",
|
||||
"██████▁▁▁▁▁▁▁▁▁▁▁▁▁█",
|
||||
"████████▁▁▁▁▁▁▁▁▁▁▁▁",
|
||||
"█████████▁▁▁▁▁▁▁▁▁▁▁",
|
||||
"█████████▁▁▁▁▁▁▁▁▁▁▁",
|
||||
"█████████▁▁▁▁▁▁▁▁▁▁▁",
|
||||
"█████████▁▁▁▁▁▁▁▁▁▁▁",
|
||||
"███████████▁▁▁▁▁▁▁▁▁",
|
||||
"████████████▁▁▁▁▁▁▁▁",
|
||||
"████████████▁▁▁▁▁▁▁▁",
|
||||
"██████████████▁▁▁▁▁▁",
|
||||
"██████████████▁▁▁▁▁▁",
|
||||
"▁██████████████▁▁▁▁▁",
|
||||
"▁██████████████▁▁▁▁▁",
|
||||
"▁▁▁█████████████▁▁▁▁",
|
||||
"▁▁▁▁▁████████████▁▁▁",
|
||||
"▁▁▁▁▁████████████▁▁▁",
|
||||
"▁▁▁▁▁▁███████████▁▁▁",
|
||||
"▁▁▁▁▁▁▁▁█████████▁▁▁",
|
||||
"▁▁▁▁▁▁▁▁█████████▁▁▁",
|
||||
"▁▁▁▁▁▁▁▁▁█████████▁▁",
|
||||
"▁▁▁▁▁▁▁▁▁█████████▁▁",
|
||||
"▁▁▁▁▁▁▁▁▁▁█████████▁",
|
||||
"▁▁▁▁▁▁▁▁▁▁▁████████▁",
|
||||
"▁▁▁▁▁▁▁▁▁▁▁████████▁",
|
||||
"▁▁▁▁▁▁▁▁▁▁▁▁███████▁",
|
||||
"▁▁▁▁▁▁▁▁▁▁▁▁███████▁",
|
||||
"▁▁▁▁▁▁▁▁▁▁▁▁▁███████",
|
||||
"▁▁▁▁▁▁▁▁▁▁▁▁▁███████",
|
||||
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████",
|
||||
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████",
|
||||
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████",
|
||||
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████",
|
||||
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███",
|
||||
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███",
|
||||
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██",
|
||||
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██",
|
||||
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██",
|
||||
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█",
|
||||
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█",
|
||||
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█",
|
||||
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
|
||||
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
|
||||
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
|
||||
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
|
||||
],
|
||||
},
|
||||
"moon": {
|
||||
"interval": 80,
|
||||
"frames": ["🌑 ", "🌒 ", "🌓 ", "🌔 ", "🌕 ", "🌖 ", "🌗 ", "🌘 "],
|
||||
},
|
||||
"runner": {"interval": 140, "frames": ["🚶 ", "🏃 "]},
|
||||
"pong": {
|
||||
"interval": 80,
|
||||
"frames": [
|
||||
"▐⠂ ▌",
|
||||
"▐⠈ ▌",
|
||||
"▐ ⠂ ▌",
|
||||
"▐ ⠠ ▌",
|
||||
"▐ ⡀ ▌",
|
||||
"▐ ⠠ ▌",
|
||||
"▐ ⠂ ▌",
|
||||
"▐ ⠈ ▌",
|
||||
"▐ ⠂ ▌",
|
||||
"▐ ⠠ ▌",
|
||||
"▐ ⡀ ▌",
|
||||
"▐ ⠠ ▌",
|
||||
"▐ ⠂ ▌",
|
||||
"▐ ⠈ ▌",
|
||||
"▐ ⠂▌",
|
||||
"▐ ⠠▌",
|
||||
"▐ ⡀▌",
|
||||
"▐ ⠠ ▌",
|
||||
"▐ ⠂ ▌",
|
||||
"▐ ⠈ ▌",
|
||||
"▐ ⠂ ▌",
|
||||
"▐ ⠠ ▌",
|
||||
"▐ ⡀ ▌",
|
||||
"▐ ⠠ ▌",
|
||||
"▐ ⠂ ▌",
|
||||
"▐ ⠈ ▌",
|
||||
"▐ ⠂ ▌",
|
||||
"▐ ⠠ ▌",
|
||||
"▐ ⡀ ▌",
|
||||
"▐⠠ ▌",
|
||||
],
|
||||
},
|
||||
"shark": {
|
||||
"interval": 120,
|
||||
"frames": [
|
||||
"▐|\\____________▌",
|
||||
"▐_|\\___________▌",
|
||||
"▐__|\\__________▌",
|
||||
"▐___|\\_________▌",
|
||||
"▐____|\\________▌",
|
||||
"▐_____|\\_______▌",
|
||||
"▐______|\\______▌",
|
||||
"▐_______|\\_____▌",
|
||||
"▐________|\\____▌",
|
||||
"▐_________|\\___▌",
|
||||
"▐__________|\\__▌",
|
||||
"▐___________|\\_▌",
|
||||
"▐____________|\\▌",
|
||||
"▐____________/|▌",
|
||||
"▐___________/|_▌",
|
||||
"▐__________/|__▌",
|
||||
"▐_________/|___▌",
|
||||
"▐________/|____▌",
|
||||
"▐_______/|_____▌",
|
||||
"▐______/|______▌",
|
||||
"▐_____/|_______▌",
|
||||
"▐____/|________▌",
|
||||
"▐___/|_________▌",
|
||||
"▐__/|__________▌",
|
||||
"▐_/|___________▌",
|
||||
"▐/|____________▌",
|
||||
],
|
||||
},
|
||||
"dqpb": {"interval": 100, "frames": "dqpb"},
|
||||
"weather": {
|
||||
"interval": 100,
|
||||
"frames": [
|
||||
"☀️ ",
|
||||
"☀️ ",
|
||||
"☀️ ",
|
||||
"🌤 ",
|
||||
"⛅️ ",
|
||||
"🌥 ",
|
||||
"☁️ ",
|
||||
"🌧 ",
|
||||
"🌨 ",
|
||||
"🌧 ",
|
||||
"🌨 ",
|
||||
"🌧 ",
|
||||
"🌨 ",
|
||||
"⛈ ",
|
||||
"🌨 ",
|
||||
"🌧 ",
|
||||
"🌨 ",
|
||||
"☁️ ",
|
||||
"🌥 ",
|
||||
"⛅️ ",
|
||||
"🌤 ",
|
||||
"☀️ ",
|
||||
"☀️ ",
|
||||
],
|
||||
},
|
||||
"christmas": {"interval": 400, "frames": "🌲🎄"},
|
||||
"grenade": {
|
||||
"interval": 80,
|
||||
"frames": [
|
||||
"، ",
|
||||
"′ ",
|
||||
" ´ ",
|
||||
" ‾ ",
|
||||
" ⸌",
|
||||
" ⸊",
|
||||
" |",
|
||||
" ⁎",
|
||||
" ⁕",
|
||||
" ෴ ",
|
||||
" ⁓",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
],
|
||||
},
|
||||
"point": {"interval": 125, "frames": ["∙∙∙", "●∙∙", "∙●∙", "∙∙●", "∙∙∙"]},
|
||||
"layer": {"interval": 150, "frames": "-=≡"},
|
||||
"betaWave": {
|
||||
"interval": 80,
|
||||
"frames": [
|
||||
"ρββββββ",
|
||||
"βρβββββ",
|
||||
"ββρββββ",
|
||||
"βββρβββ",
|
||||
"ββββρββ",
|
||||
"βββββρβ",
|
||||
"ββββββρ",
|
||||
],
|
||||
},
|
||||
"aesthetic": {
|
||||
"interval": 80,
|
||||
"frames": [
|
||||
"▰▱▱▱▱▱▱",
|
||||
"▰▰▱▱▱▱▱",
|
||||
"▰▰▰▱▱▱▱",
|
||||
"▰▰▰▰▱▱▱",
|
||||
"▰▰▰▰▰▱▱",
|
||||
"▰▰▰▰▰▰▱",
|
||||
"▰▰▰▰▰▰▰",
|
||||
"▰▱▱▱▱▱▱",
|
||||
],
|
||||
},
|
||||
}
|
||||
16
venv/Lib/site-packages/pip/_vendor/rich/_stack.py
Normal file
16
venv/Lib/site-packages/pip/_vendor/rich/_stack.py
Normal file
@@ -0,0 +1,16 @@
|
||||
from typing import List, TypeVar
|
||||
|
||||
T = TypeVar("T")
|
||||
|
||||
|
||||
class Stack(List[T]):
|
||||
"""A small shim over builtin list."""
|
||||
|
||||
@property
|
||||
def top(self) -> T:
|
||||
"""Get top of stack."""
|
||||
return self[-1]
|
||||
|
||||
def push(self, item: T) -> None:
|
||||
"""Push an item on to the stack (append in stack nomenclature)."""
|
||||
self.append(item)
|
||||
19
venv/Lib/site-packages/pip/_vendor/rich/_timer.py
Normal file
19
venv/Lib/site-packages/pip/_vendor/rich/_timer.py
Normal file
@@ -0,0 +1,19 @@
|
||||
"""
|
||||
Timer context manager, only used in debug.
|
||||
|
||||
"""
|
||||
|
||||
from time import time
|
||||
|
||||
import contextlib
|
||||
from typing import Generator
|
||||
|
||||
|
||||
@contextlib.contextmanager
|
||||
def timer(subject: str = "time") -> Generator[None, None, None]:
|
||||
"""print the elapsed time. (only used in debugging)"""
|
||||
start = time()
|
||||
yield
|
||||
elapsed = time() - start
|
||||
elapsed_ms = elapsed * 1000
|
||||
print(f"{subject} elapsed {elapsed_ms:.1f}ms")
|
||||
661
venv/Lib/site-packages/pip/_vendor/rich/_win32_console.py
Normal file
661
venv/Lib/site-packages/pip/_vendor/rich/_win32_console.py
Normal file
@@ -0,0 +1,661 @@
|
||||
"""Light wrapper around the Win32 Console API - this module should only be imported on Windows
|
||||
|
||||
The API that this module wraps is documented at https://docs.microsoft.com/en-us/windows/console/console-functions
|
||||
"""
|
||||
|
||||
import ctypes
|
||||
import sys
|
||||
from typing import Any
|
||||
|
||||
windll: Any = None
|
||||
if sys.platform == "win32":
|
||||
windll = ctypes.LibraryLoader(ctypes.WinDLL)
|
||||
else:
|
||||
raise ImportError(f"{__name__} can only be imported on Windows")
|
||||
|
||||
import time
|
||||
from ctypes import Structure, byref, wintypes
|
||||
from typing import IO, NamedTuple, Type, cast
|
||||
|
||||
from pip._vendor.rich.color import ColorSystem
|
||||
from pip._vendor.rich.style import Style
|
||||
|
||||
STDOUT = -11
|
||||
ENABLE_VIRTUAL_TERMINAL_PROCESSING = 4
|
||||
|
||||
COORD = wintypes._COORD
|
||||
|
||||
|
||||
class LegacyWindowsError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class WindowsCoordinates(NamedTuple):
|
||||
"""Coordinates in the Windows Console API are (y, x), not (x, y).
|
||||
This class is intended to prevent that confusion.
|
||||
Rows and columns are indexed from 0.
|
||||
This class can be used in place of wintypes._COORD in arguments and argtypes.
|
||||
"""
|
||||
|
||||
row: int
|
||||
col: int
|
||||
|
||||
@classmethod
|
||||
def from_param(cls, value: "WindowsCoordinates") -> COORD:
|
||||
"""Converts a WindowsCoordinates into a wintypes _COORD structure.
|
||||
This classmethod is internally called by ctypes to perform the conversion.
|
||||
|
||||
Args:
|
||||
value (WindowsCoordinates): The input coordinates to convert.
|
||||
|
||||
Returns:
|
||||
wintypes._COORD: The converted coordinates struct.
|
||||
"""
|
||||
return COORD(value.col, value.row)
|
||||
|
||||
|
||||
class CONSOLE_SCREEN_BUFFER_INFO(Structure):
|
||||
_fields_ = [
|
||||
("dwSize", COORD),
|
||||
("dwCursorPosition", COORD),
|
||||
("wAttributes", wintypes.WORD),
|
||||
("srWindow", wintypes.SMALL_RECT),
|
||||
("dwMaximumWindowSize", COORD),
|
||||
]
|
||||
|
||||
|
||||
class CONSOLE_CURSOR_INFO(ctypes.Structure):
|
||||
_fields_ = [("dwSize", wintypes.DWORD), ("bVisible", wintypes.BOOL)]
|
||||
|
||||
|
||||
_GetStdHandle = windll.kernel32.GetStdHandle
|
||||
_GetStdHandle.argtypes = [
|
||||
wintypes.DWORD,
|
||||
]
|
||||
_GetStdHandle.restype = wintypes.HANDLE
|
||||
|
||||
|
||||
def GetStdHandle(handle: int = STDOUT) -> wintypes.HANDLE:
|
||||
"""Retrieves a handle to the specified standard device (standard input, standard output, or standard error).
|
||||
|
||||
Args:
|
||||
handle (int): Integer identifier for the handle. Defaults to -11 (stdout).
|
||||
|
||||
Returns:
|
||||
wintypes.HANDLE: The handle
|
||||
"""
|
||||
return cast(wintypes.HANDLE, _GetStdHandle(handle))
|
||||
|
||||
|
||||
_GetConsoleMode = windll.kernel32.GetConsoleMode
|
||||
_GetConsoleMode.argtypes = [wintypes.HANDLE, wintypes.LPDWORD]
|
||||
_GetConsoleMode.restype = wintypes.BOOL
|
||||
|
||||
|
||||
def GetConsoleMode(std_handle: wintypes.HANDLE) -> int:
|
||||
"""Retrieves the current input mode of a console's input buffer
|
||||
or the current output mode of a console screen buffer.
|
||||
|
||||
Args:
|
||||
std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer.
|
||||
|
||||
Raises:
|
||||
LegacyWindowsError: If any error occurs while calling the Windows console API.
|
||||
|
||||
Returns:
|
||||
int: Value representing the current console mode as documented at
|
||||
https://docs.microsoft.com/en-us/windows/console/getconsolemode#parameters
|
||||
"""
|
||||
|
||||
console_mode = wintypes.DWORD()
|
||||
success = bool(_GetConsoleMode(std_handle, console_mode))
|
||||
if not success:
|
||||
raise LegacyWindowsError("Unable to get legacy Windows Console Mode")
|
||||
return console_mode.value
|
||||
|
||||
|
||||
_FillConsoleOutputCharacterW = windll.kernel32.FillConsoleOutputCharacterW
|
||||
_FillConsoleOutputCharacterW.argtypes = [
|
||||
wintypes.HANDLE,
|
||||
ctypes.c_char,
|
||||
wintypes.DWORD,
|
||||
cast(Type[COORD], WindowsCoordinates),
|
||||
ctypes.POINTER(wintypes.DWORD),
|
||||
]
|
||||
_FillConsoleOutputCharacterW.restype = wintypes.BOOL
|
||||
|
||||
|
||||
def FillConsoleOutputCharacter(
|
||||
std_handle: wintypes.HANDLE,
|
||||
char: str,
|
||||
length: int,
|
||||
start: WindowsCoordinates,
|
||||
) -> int:
|
||||
"""Writes a character to the console screen buffer a specified number of times, beginning at the specified coordinates.
|
||||
|
||||
Args:
|
||||
std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer.
|
||||
char (str): The character to write. Must be a string of length 1.
|
||||
length (int): The number of times to write the character.
|
||||
start (WindowsCoordinates): The coordinates to start writing at.
|
||||
|
||||
Returns:
|
||||
int: The number of characters written.
|
||||
"""
|
||||
character = ctypes.c_char(char.encode())
|
||||
num_characters = wintypes.DWORD(length)
|
||||
num_written = wintypes.DWORD(0)
|
||||
_FillConsoleOutputCharacterW(
|
||||
std_handle,
|
||||
character,
|
||||
num_characters,
|
||||
start,
|
||||
byref(num_written),
|
||||
)
|
||||
return num_written.value
|
||||
|
||||
|
||||
_FillConsoleOutputAttribute = windll.kernel32.FillConsoleOutputAttribute
|
||||
_FillConsoleOutputAttribute.argtypes = [
|
||||
wintypes.HANDLE,
|
||||
wintypes.WORD,
|
||||
wintypes.DWORD,
|
||||
cast(Type[COORD], WindowsCoordinates),
|
||||
ctypes.POINTER(wintypes.DWORD),
|
||||
]
|
||||
_FillConsoleOutputAttribute.restype = wintypes.BOOL
|
||||
|
||||
|
||||
def FillConsoleOutputAttribute(
|
||||
std_handle: wintypes.HANDLE,
|
||||
attributes: int,
|
||||
length: int,
|
||||
start: WindowsCoordinates,
|
||||
) -> int:
|
||||
"""Sets the character attributes for a specified number of character cells,
|
||||
beginning at the specified coordinates in a screen buffer.
|
||||
|
||||
Args:
|
||||
std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer.
|
||||
attributes (int): Integer value representing the foreground and background colours of the cells.
|
||||
length (int): The number of cells to set the output attribute of.
|
||||
start (WindowsCoordinates): The coordinates of the first cell whose attributes are to be set.
|
||||
|
||||
Returns:
|
||||
int: The number of cells whose attributes were actually set.
|
||||
"""
|
||||
num_cells = wintypes.DWORD(length)
|
||||
style_attrs = wintypes.WORD(attributes)
|
||||
num_written = wintypes.DWORD(0)
|
||||
_FillConsoleOutputAttribute(
|
||||
std_handle, style_attrs, num_cells, start, byref(num_written)
|
||||
)
|
||||
return num_written.value
|
||||
|
||||
|
||||
_SetConsoleTextAttribute = windll.kernel32.SetConsoleTextAttribute
|
||||
_SetConsoleTextAttribute.argtypes = [
|
||||
wintypes.HANDLE,
|
||||
wintypes.WORD,
|
||||
]
|
||||
_SetConsoleTextAttribute.restype = wintypes.BOOL
|
||||
|
||||
|
||||
def SetConsoleTextAttribute(
|
||||
std_handle: wintypes.HANDLE, attributes: wintypes.WORD
|
||||
) -> bool:
|
||||
"""Set the colour attributes for all text written after this function is called.
|
||||
|
||||
Args:
|
||||
std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer.
|
||||
attributes (int): Integer value representing the foreground and background colours.
|
||||
|
||||
|
||||
Returns:
|
||||
bool: True if the attribute was set successfully, otherwise False.
|
||||
"""
|
||||
return bool(_SetConsoleTextAttribute(std_handle, attributes))
|
||||
|
||||
|
||||
_GetConsoleScreenBufferInfo = windll.kernel32.GetConsoleScreenBufferInfo
|
||||
_GetConsoleScreenBufferInfo.argtypes = [
|
||||
wintypes.HANDLE,
|
||||
ctypes.POINTER(CONSOLE_SCREEN_BUFFER_INFO),
|
||||
]
|
||||
_GetConsoleScreenBufferInfo.restype = wintypes.BOOL
|
||||
|
||||
|
||||
def GetConsoleScreenBufferInfo(
|
||||
std_handle: wintypes.HANDLE,
|
||||
) -> CONSOLE_SCREEN_BUFFER_INFO:
|
||||
"""Retrieves information about the specified console screen buffer.
|
||||
|
||||
Args:
|
||||
std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer.
|
||||
|
||||
Returns:
|
||||
CONSOLE_SCREEN_BUFFER_INFO: A CONSOLE_SCREEN_BUFFER_INFO ctype struct contain information about
|
||||
screen size, cursor position, colour attributes, and more."""
|
||||
console_screen_buffer_info = CONSOLE_SCREEN_BUFFER_INFO()
|
||||
_GetConsoleScreenBufferInfo(std_handle, byref(console_screen_buffer_info))
|
||||
return console_screen_buffer_info
|
||||
|
||||
|
||||
_SetConsoleCursorPosition = windll.kernel32.SetConsoleCursorPosition
|
||||
_SetConsoleCursorPosition.argtypes = [
|
||||
wintypes.HANDLE,
|
||||
cast(Type[COORD], WindowsCoordinates),
|
||||
]
|
||||
_SetConsoleCursorPosition.restype = wintypes.BOOL
|
||||
|
||||
|
||||
def SetConsoleCursorPosition(
|
||||
std_handle: wintypes.HANDLE, coords: WindowsCoordinates
|
||||
) -> bool:
|
||||
"""Set the position of the cursor in the console screen
|
||||
|
||||
Args:
|
||||
std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer.
|
||||
coords (WindowsCoordinates): The coordinates to move the cursor to.
|
||||
|
||||
Returns:
|
||||
bool: True if the function succeeds, otherwise False.
|
||||
"""
|
||||
return bool(_SetConsoleCursorPosition(std_handle, coords))
|
||||
|
||||
|
||||
_GetConsoleCursorInfo = windll.kernel32.GetConsoleCursorInfo
|
||||
_GetConsoleCursorInfo.argtypes = [
|
||||
wintypes.HANDLE,
|
||||
ctypes.POINTER(CONSOLE_CURSOR_INFO),
|
||||
]
|
||||
_GetConsoleCursorInfo.restype = wintypes.BOOL
|
||||
|
||||
|
||||
def GetConsoleCursorInfo(
|
||||
std_handle: wintypes.HANDLE, cursor_info: CONSOLE_CURSOR_INFO
|
||||
) -> bool:
|
||||
"""Get the cursor info - used to get cursor visibility and width
|
||||
|
||||
Args:
|
||||
std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer.
|
||||
cursor_info (CONSOLE_CURSOR_INFO): CONSOLE_CURSOR_INFO ctype struct that receives information
|
||||
about the console's cursor.
|
||||
|
||||
Returns:
|
||||
bool: True if the function succeeds, otherwise False.
|
||||
"""
|
||||
return bool(_GetConsoleCursorInfo(std_handle, byref(cursor_info)))
|
||||
|
||||
|
||||
_SetConsoleCursorInfo = windll.kernel32.SetConsoleCursorInfo
|
||||
_SetConsoleCursorInfo.argtypes = [
|
||||
wintypes.HANDLE,
|
||||
ctypes.POINTER(CONSOLE_CURSOR_INFO),
|
||||
]
|
||||
_SetConsoleCursorInfo.restype = wintypes.BOOL
|
||||
|
||||
|
||||
def SetConsoleCursorInfo(
|
||||
std_handle: wintypes.HANDLE, cursor_info: CONSOLE_CURSOR_INFO
|
||||
) -> bool:
|
||||
"""Set the cursor info - used for adjusting cursor visibility and width
|
||||
|
||||
Args:
|
||||
std_handle (wintypes.HANDLE): A handle to the console input buffer or the console screen buffer.
|
||||
cursor_info (CONSOLE_CURSOR_INFO): CONSOLE_CURSOR_INFO ctype struct containing the new cursor info.
|
||||
|
||||
Returns:
|
||||
bool: True if the function succeeds, otherwise False.
|
||||
"""
|
||||
return bool(_SetConsoleCursorInfo(std_handle, byref(cursor_info)))
|
||||
|
||||
|
||||
_SetConsoleTitle = windll.kernel32.SetConsoleTitleW
|
||||
_SetConsoleTitle.argtypes = [wintypes.LPCWSTR]
|
||||
_SetConsoleTitle.restype = wintypes.BOOL
|
||||
|
||||
|
||||
def SetConsoleTitle(title: str) -> bool:
|
||||
"""Sets the title of the current console window
|
||||
|
||||
Args:
|
||||
title (str): The new title of the console window.
|
||||
|
||||
Returns:
|
||||
bool: True if the function succeeds, otherwise False.
|
||||
"""
|
||||
return bool(_SetConsoleTitle(title))
|
||||
|
||||
|
||||
class LegacyWindowsTerm:
|
||||
"""This class allows interaction with the legacy Windows Console API. It should only be used in the context
|
||||
of environments where virtual terminal processing is not available. However, if it is used in a Windows environment,
|
||||
the entire API should work.
|
||||
|
||||
Args:
|
||||
file (IO[str]): The file which the Windows Console API HANDLE is retrieved from, defaults to sys.stdout.
|
||||
"""
|
||||
|
||||
BRIGHT_BIT = 8
|
||||
|
||||
# Indices are ANSI color numbers, values are the corresponding Windows Console API color numbers
|
||||
ANSI_TO_WINDOWS = [
|
||||
0, # black The Windows colours are defined in wincon.h as follows:
|
||||
4, # red define FOREGROUND_BLUE 0x0001 -- 0000 0001
|
||||
2, # green define FOREGROUND_GREEN 0x0002 -- 0000 0010
|
||||
6, # yellow define FOREGROUND_RED 0x0004 -- 0000 0100
|
||||
1, # blue define FOREGROUND_INTENSITY 0x0008 -- 0000 1000
|
||||
5, # magenta define BACKGROUND_BLUE 0x0010 -- 0001 0000
|
||||
3, # cyan define BACKGROUND_GREEN 0x0020 -- 0010 0000
|
||||
7, # white define BACKGROUND_RED 0x0040 -- 0100 0000
|
||||
8, # bright black (grey) define BACKGROUND_INTENSITY 0x0080 -- 1000 0000
|
||||
12, # bright red
|
||||
10, # bright green
|
||||
14, # bright yellow
|
||||
9, # bright blue
|
||||
13, # bright magenta
|
||||
11, # bright cyan
|
||||
15, # bright white
|
||||
]
|
||||
|
||||
def __init__(self, file: "IO[str]") -> None:
|
||||
handle = GetStdHandle(STDOUT)
|
||||
self._handle = handle
|
||||
default_text = GetConsoleScreenBufferInfo(handle).wAttributes
|
||||
self._default_text = default_text
|
||||
|
||||
self._default_fore = default_text & 7
|
||||
self._default_back = (default_text >> 4) & 7
|
||||
self._default_attrs = self._default_fore | (self._default_back << 4)
|
||||
|
||||
self._file = file
|
||||
self.write = file.write
|
||||
self.flush = file.flush
|
||||
|
||||
@property
|
||||
def cursor_position(self) -> WindowsCoordinates:
|
||||
"""Returns the current position of the cursor (0-based)
|
||||
|
||||
Returns:
|
||||
WindowsCoordinates: The current cursor position.
|
||||
"""
|
||||
coord: COORD = GetConsoleScreenBufferInfo(self._handle).dwCursorPosition
|
||||
return WindowsCoordinates(row=coord.Y, col=coord.X)
|
||||
|
||||
@property
|
||||
def screen_size(self) -> WindowsCoordinates:
|
||||
"""Returns the current size of the console screen buffer, in character columns and rows
|
||||
|
||||
Returns:
|
||||
WindowsCoordinates: The width and height of the screen as WindowsCoordinates.
|
||||
"""
|
||||
screen_size: COORD = GetConsoleScreenBufferInfo(self._handle).dwSize
|
||||
return WindowsCoordinates(row=screen_size.Y, col=screen_size.X)
|
||||
|
||||
def write_text(self, text: str) -> None:
|
||||
"""Write text directly to the terminal without any modification of styles
|
||||
|
||||
Args:
|
||||
text (str): The text to write to the console
|
||||
"""
|
||||
self.write(text)
|
||||
self.flush()
|
||||
|
||||
def write_styled(self, text: str, style: Style) -> None:
|
||||
"""Write styled text to the terminal.
|
||||
|
||||
Args:
|
||||
text (str): The text to write
|
||||
style (Style): The style of the text
|
||||
"""
|
||||
color = style.color
|
||||
bgcolor = style.bgcolor
|
||||
if style.reverse:
|
||||
color, bgcolor = bgcolor, color
|
||||
|
||||
if color:
|
||||
fore = color.downgrade(ColorSystem.WINDOWS).number
|
||||
fore = fore if fore is not None else 7 # Default to ANSI 7: White
|
||||
if style.bold:
|
||||
fore = fore | self.BRIGHT_BIT
|
||||
if style.dim:
|
||||
fore = fore & ~self.BRIGHT_BIT
|
||||
fore = self.ANSI_TO_WINDOWS[fore]
|
||||
else:
|
||||
fore = self._default_fore
|
||||
|
||||
if bgcolor:
|
||||
back = bgcolor.downgrade(ColorSystem.WINDOWS).number
|
||||
back = back if back is not None else 0 # Default to ANSI 0: Black
|
||||
back = self.ANSI_TO_WINDOWS[back]
|
||||
else:
|
||||
back = self._default_back
|
||||
|
||||
assert fore is not None
|
||||
assert back is not None
|
||||
|
||||
SetConsoleTextAttribute(
|
||||
self._handle, attributes=ctypes.c_ushort(fore | (back << 4))
|
||||
)
|
||||
self.write_text(text)
|
||||
SetConsoleTextAttribute(self._handle, attributes=self._default_text)
|
||||
|
||||
def move_cursor_to(self, new_position: WindowsCoordinates) -> None:
|
||||
"""Set the position of the cursor
|
||||
|
||||
Args:
|
||||
new_position (WindowsCoordinates): The WindowsCoordinates representing the new position of the cursor.
|
||||
"""
|
||||
if new_position.col < 0 or new_position.row < 0:
|
||||
return
|
||||
SetConsoleCursorPosition(self._handle, coords=new_position)
|
||||
|
||||
def erase_line(self) -> None:
|
||||
"""Erase all content on the line the cursor is currently located at"""
|
||||
screen_size = self.screen_size
|
||||
cursor_position = self.cursor_position
|
||||
cells_to_erase = screen_size.col
|
||||
start_coordinates = WindowsCoordinates(row=cursor_position.row, col=0)
|
||||
FillConsoleOutputCharacter(
|
||||
self._handle, " ", length=cells_to_erase, start=start_coordinates
|
||||
)
|
||||
FillConsoleOutputAttribute(
|
||||
self._handle,
|
||||
self._default_attrs,
|
||||
length=cells_to_erase,
|
||||
start=start_coordinates,
|
||||
)
|
||||
|
||||
def erase_end_of_line(self) -> None:
|
||||
"""Erase all content from the cursor position to the end of that line"""
|
||||
cursor_position = self.cursor_position
|
||||
cells_to_erase = self.screen_size.col - cursor_position.col
|
||||
FillConsoleOutputCharacter(
|
||||
self._handle, " ", length=cells_to_erase, start=cursor_position
|
||||
)
|
||||
FillConsoleOutputAttribute(
|
||||
self._handle,
|
||||
self._default_attrs,
|
||||
length=cells_to_erase,
|
||||
start=cursor_position,
|
||||
)
|
||||
|
||||
def erase_start_of_line(self) -> None:
|
||||
"""Erase all content from the cursor position to the start of that line"""
|
||||
row, col = self.cursor_position
|
||||
start = WindowsCoordinates(row, 0)
|
||||
FillConsoleOutputCharacter(self._handle, " ", length=col, start=start)
|
||||
FillConsoleOutputAttribute(
|
||||
self._handle, self._default_attrs, length=col, start=start
|
||||
)
|
||||
|
||||
def move_cursor_up(self) -> None:
|
||||
"""Move the cursor up a single cell"""
|
||||
cursor_position = self.cursor_position
|
||||
SetConsoleCursorPosition(
|
||||
self._handle,
|
||||
coords=WindowsCoordinates(
|
||||
row=cursor_position.row - 1, col=cursor_position.col
|
||||
),
|
||||
)
|
||||
|
||||
def move_cursor_down(self) -> None:
|
||||
"""Move the cursor down a single cell"""
|
||||
cursor_position = self.cursor_position
|
||||
SetConsoleCursorPosition(
|
||||
self._handle,
|
||||
coords=WindowsCoordinates(
|
||||
row=cursor_position.row + 1,
|
||||
col=cursor_position.col,
|
||||
),
|
||||
)
|
||||
|
||||
def move_cursor_forward(self) -> None:
|
||||
"""Move the cursor forward a single cell. Wrap to the next line if required."""
|
||||
row, col = self.cursor_position
|
||||
if col == self.screen_size.col - 1:
|
||||
row += 1
|
||||
col = 0
|
||||
else:
|
||||
col += 1
|
||||
SetConsoleCursorPosition(
|
||||
self._handle, coords=WindowsCoordinates(row=row, col=col)
|
||||
)
|
||||
|
||||
def move_cursor_to_column(self, column: int) -> None:
|
||||
"""Move cursor to the column specified by the zero-based column index, staying on the same row
|
||||
|
||||
Args:
|
||||
column (int): The zero-based column index to move the cursor to.
|
||||
"""
|
||||
row, _ = self.cursor_position
|
||||
SetConsoleCursorPosition(self._handle, coords=WindowsCoordinates(row, column))
|
||||
|
||||
def move_cursor_backward(self) -> None:
|
||||
"""Move the cursor backward a single cell. Wrap to the previous line if required."""
|
||||
row, col = self.cursor_position
|
||||
if col == 0:
|
||||
row -= 1
|
||||
col = self.screen_size.col - 1
|
||||
else:
|
||||
col -= 1
|
||||
SetConsoleCursorPosition(
|
||||
self._handle, coords=WindowsCoordinates(row=row, col=col)
|
||||
)
|
||||
|
||||
def hide_cursor(self) -> None:
|
||||
"""Hide the cursor"""
|
||||
current_cursor_size = self._get_cursor_size()
|
||||
invisible_cursor = CONSOLE_CURSOR_INFO(dwSize=current_cursor_size, bVisible=0)
|
||||
SetConsoleCursorInfo(self._handle, cursor_info=invisible_cursor)
|
||||
|
||||
def show_cursor(self) -> None:
|
||||
"""Show the cursor"""
|
||||
current_cursor_size = self._get_cursor_size()
|
||||
visible_cursor = CONSOLE_CURSOR_INFO(dwSize=current_cursor_size, bVisible=1)
|
||||
SetConsoleCursorInfo(self._handle, cursor_info=visible_cursor)
|
||||
|
||||
def set_title(self, title: str) -> None:
|
||||
"""Set the title of the terminal window
|
||||
|
||||
Args:
|
||||
title (str): The new title of the console window
|
||||
"""
|
||||
assert len(title) < 255, "Console title must be less than 255 characters"
|
||||
SetConsoleTitle(title)
|
||||
|
||||
def _get_cursor_size(self) -> int:
|
||||
"""Get the percentage of the character cell that is filled by the cursor"""
|
||||
cursor_info = CONSOLE_CURSOR_INFO()
|
||||
GetConsoleCursorInfo(self._handle, cursor_info=cursor_info)
|
||||
return int(cursor_info.dwSize)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
handle = GetStdHandle()
|
||||
|
||||
from pip._vendor.rich.console import Console
|
||||
|
||||
console = Console()
|
||||
|
||||
term = LegacyWindowsTerm(sys.stdout)
|
||||
term.set_title("Win32 Console Examples")
|
||||
|
||||
style = Style(color="black", bgcolor="red")
|
||||
|
||||
heading = Style.parse("black on green")
|
||||
|
||||
# Check colour output
|
||||
console.rule("Checking colour output")
|
||||
console.print("[on red]on red!")
|
||||
console.print("[blue]blue!")
|
||||
console.print("[yellow]yellow!")
|
||||
console.print("[bold yellow]bold yellow!")
|
||||
console.print("[bright_yellow]bright_yellow!")
|
||||
console.print("[dim bright_yellow]dim bright_yellow!")
|
||||
console.print("[italic cyan]italic cyan!")
|
||||
console.print("[bold white on blue]bold white on blue!")
|
||||
console.print("[reverse bold white on blue]reverse bold white on blue!")
|
||||
console.print("[bold black on cyan]bold black on cyan!")
|
||||
console.print("[black on green]black on green!")
|
||||
console.print("[blue on green]blue on green!")
|
||||
console.print("[white on black]white on black!")
|
||||
console.print("[black on white]black on white!")
|
||||
console.print("[#1BB152 on #DA812D]#1BB152 on #DA812D!")
|
||||
|
||||
# Check cursor movement
|
||||
console.rule("Checking cursor movement")
|
||||
console.print()
|
||||
term.move_cursor_backward()
|
||||
term.move_cursor_backward()
|
||||
term.write_text("went back and wrapped to prev line")
|
||||
time.sleep(1)
|
||||
term.move_cursor_up()
|
||||
term.write_text("we go up")
|
||||
time.sleep(1)
|
||||
term.move_cursor_down()
|
||||
term.write_text("and down")
|
||||
time.sleep(1)
|
||||
term.move_cursor_up()
|
||||
term.move_cursor_backward()
|
||||
term.move_cursor_backward()
|
||||
term.write_text("we went up and back 2")
|
||||
time.sleep(1)
|
||||
term.move_cursor_down()
|
||||
term.move_cursor_backward()
|
||||
term.move_cursor_backward()
|
||||
term.write_text("we went down and back 2")
|
||||
time.sleep(1)
|
||||
|
||||
# Check erasing of lines
|
||||
term.hide_cursor()
|
||||
console.print()
|
||||
console.rule("Checking line erasing")
|
||||
console.print("\n...Deleting to the start of the line...")
|
||||
term.write_text("The red arrow shows the cursor location, and direction of erase")
|
||||
time.sleep(1)
|
||||
term.move_cursor_to_column(16)
|
||||
term.write_styled("<", Style.parse("black on red"))
|
||||
term.move_cursor_backward()
|
||||
time.sleep(1)
|
||||
term.erase_start_of_line()
|
||||
time.sleep(1)
|
||||
|
||||
console.print("\n\n...And to the end of the line...")
|
||||
term.write_text("The red arrow shows the cursor location, and direction of erase")
|
||||
time.sleep(1)
|
||||
|
||||
term.move_cursor_to_column(16)
|
||||
term.write_styled(">", Style.parse("black on red"))
|
||||
time.sleep(1)
|
||||
term.erase_end_of_line()
|
||||
time.sleep(1)
|
||||
|
||||
console.print("\n\n...Now the whole line will be erased...")
|
||||
term.write_styled("I'm going to disappear!", style=Style.parse("black on cyan"))
|
||||
time.sleep(1)
|
||||
term.erase_line()
|
||||
|
||||
term.show_cursor()
|
||||
print("\n")
|
||||
71
venv/Lib/site-packages/pip/_vendor/rich/_windows.py
Normal file
71
venv/Lib/site-packages/pip/_vendor/rich/_windows.py
Normal file
@@ -0,0 +1,71 @@
|
||||
import sys
|
||||
from dataclasses import dataclass
|
||||
|
||||
|
||||
@dataclass
|
||||
class WindowsConsoleFeatures:
|
||||
"""Windows features available."""
|
||||
|
||||
vt: bool = False
|
||||
"""The console supports VT codes."""
|
||||
truecolor: bool = False
|
||||
"""The console supports truecolor."""
|
||||
|
||||
|
||||
try:
|
||||
import ctypes
|
||||
from ctypes import LibraryLoader
|
||||
|
||||
if sys.platform == "win32":
|
||||
windll = LibraryLoader(ctypes.WinDLL)
|
||||
else:
|
||||
windll = None
|
||||
raise ImportError("Not windows")
|
||||
|
||||
from pip._vendor.rich._win32_console import (
|
||||
ENABLE_VIRTUAL_TERMINAL_PROCESSING,
|
||||
GetConsoleMode,
|
||||
GetStdHandle,
|
||||
LegacyWindowsError,
|
||||
)
|
||||
|
||||
except (AttributeError, ImportError, ValueError):
|
||||
# Fallback if we can't load the Windows DLL
|
||||
def get_windows_console_features() -> WindowsConsoleFeatures:
|
||||
features = WindowsConsoleFeatures()
|
||||
return features
|
||||
|
||||
else:
|
||||
|
||||
def get_windows_console_features() -> WindowsConsoleFeatures:
|
||||
"""Get windows console features.
|
||||
|
||||
Returns:
|
||||
WindowsConsoleFeatures: An instance of WindowsConsoleFeatures.
|
||||
"""
|
||||
handle = GetStdHandle()
|
||||
try:
|
||||
console_mode = GetConsoleMode(handle)
|
||||
success = True
|
||||
except LegacyWindowsError:
|
||||
console_mode = 0
|
||||
success = False
|
||||
vt = bool(success and console_mode & ENABLE_VIRTUAL_TERMINAL_PROCESSING)
|
||||
truecolor = False
|
||||
if vt:
|
||||
win_version = sys.getwindowsversion()
|
||||
truecolor = win_version.major > 10 or (
|
||||
win_version.major == 10 and win_version.build >= 15063
|
||||
)
|
||||
features = WindowsConsoleFeatures(vt=vt, truecolor=truecolor)
|
||||
return features
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import platform
|
||||
|
||||
features = get_windows_console_features()
|
||||
from pip._vendor.rich import print
|
||||
|
||||
print(f'platform="{platform.system()}"')
|
||||
print(repr(features))
|
||||
Reference in New Issue
Block a user