output.py - toot - Unnamed repository; edit this file 'description' to name the… | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
output.py (2949B) | |
--- | |
1 # -*- coding: utf-8 -*- | |
2 | |
3 import sys | |
4 import re | |
5 | |
6 from textwrap import wrap | |
7 from toot.utils import format_content, get_text | |
8 | |
9 START_CODES = { | |
10 'red': '\033[31m', | |
11 'green': '\033[32m', | |
12 'yellow': '\033[33m', | |
13 'blue': '\033[34m', | |
14 'magenta': '\033[35m', | |
15 'cyan': '\033[36m', | |
16 } | |
17 | |
18 END_CODE = '\033[0m' | |
19 | |
20 START_PATTERN = "<(" + "|".join(START_CODES.keys()) + ")>" | |
21 | |
22 END_PATTERN = "</(" + "|".join(START_CODES.keys()) + ")>" | |
23 | |
24 | |
25 def start_code(match): | |
26 name = match.group(1) | |
27 return START_CODES[name] | |
28 | |
29 | |
30 def colorize(text): | |
31 text = re.sub(START_PATTERN, start_code, text) | |
32 text = re.sub(END_PATTERN, END_CODE, text) | |
33 | |
34 return text | |
35 | |
36 | |
37 def strip_tags(text): | |
38 text = re.sub(START_PATTERN, '', text) | |
39 text = re.sub(END_PATTERN, '', text) | |
40 | |
41 return text | |
42 | |
43 | |
44 USE_ANSI_COLOR = "--no-color" not in sys.argv | |
45 | |
46 | |
47 def print_out(*args, **kwargs): | |
48 args = [colorize(a) if USE_ANSI_COLOR else strip_tags(a) for a in ar… | |
49 print(*args, **kwargs) | |
50 | |
51 | |
52 def print_err(*args, **kwargs): | |
53 args = ["<red>{}</red>".format(a) for a in args] | |
54 args = [colorize(a) if USE_ANSI_COLOR else strip_tags(a) for a in ar… | |
55 print(*args, file=sys.stderr, **kwargs) | |
56 | |
57 | |
58 def print_instance(instance): | |
59 print_out("<green>{}</green>".format(instance['title'])) | |
60 print_out("<blue>{}</blue>".format(instance['uri'])) | |
61 print_out("running Mastodon {}".format(instance['version'])) | |
62 print_out("") | |
63 | |
64 description = instance['description'].strip() | |
65 if not description: | |
66 return | |
67 | |
68 lines = [line.strip() for line in format_content(description) if lin… | |
69 for line in lines: | |
70 for l in wrap(line.strip()): | |
71 print(l) | |
72 print() | |
73 | |
74 | |
75 def print_account(account): | |
76 print_out("<green>@{}</green> {}".format(account['acct'], account['d… | |
77 | |
78 note = get_text(account['note']) | |
79 | |
80 if note: | |
81 print_out("") | |
82 print_out("\n".join(wrap(note))) | |
83 | |
84 print_out("") | |
85 print_out("ID: <green>{}</green>".format(account['id'])) | |
86 print_out("Since: <green>{}</green>".format(account['created_at'][:1… | |
87 print_out("") | |
88 print_out("Followers: <yellow>{}</yellow>".format(account['followers… | |
89 print_out("Following: <yellow>{}</yellow>".format(account['following… | |
90 print_out("Statuses: <yellow>{}</yellow>".format(account['statuses_c… | |
91 print_out("") | |
92 print_out(account['url']) | |
93 | |
94 | |
95 def print_search_results(results): | |
96 accounts = results['accounts'] | |
97 hashtags = results['hashtags'] | |
98 | |
99 if accounts: | |
100 print_out("\nAccounts:") | |
101 for account in accounts: | |
102 print_out("* <green>@{}</green> {}".format( | |
103 account['acct'], | |
104 account['display_name'] | |
105 )) | |
106 | |
107 if hashtags: | |
108 print_out("\nHashtags:") | |
109 print_out(", ".join(["<green>#{}</green>".format(t) for t in has… | |
110 | |
111 if not accounts and not hashtags: | |
112 print_out("<yellow>Nothing found</yellow>") |