From 693c93ac797a27e7155fcffbceb2759d320d111e Mon Sep 17 00:00:00 2001 From: bashrc Date: Wed, 6 May 2026 11:41:51 +0100 Subject: [PATCH] Variable types --- webapp_search.py | 345 ++++++++++++++++++++-------------------- webapp_specification.py | 21 ++- webapp_suspended.py | 5 +- 3 files changed, 185 insertions(+), 186 deletions(-) diff --git a/webapp_search.py b/webapp_search.py index 3972777a0..5b305db6a 100644 --- a/webapp_search.py +++ b/webapp_search.py @@ -75,17 +75,17 @@ def html_search_emoji(translate: {}, base_dir: str, search_str: str, copyfile(base_dir + '/emoji/default_emoji.json', base_dir + '/emoji/emoji.json') - search_str = search_str.lower().replace(':', '').strip('\n').strip('\r') - css_filename = base_dir + '/epicyon-profile.css' + search_str: str = \ + search_str.lower().replace(':', '').strip('\n').strip('\r') + css_filename: str = base_dir + '/epicyon-profile.css' if is_a_file(base_dir + '/epicyon.css'): css_filename = base_dir + '/epicyon.css' - emoji_lookup_filename = base_dir + '/emoji/emoji.json' - custom_emoji_lookup_filename = base_dir + '/emojicustom/emoji.json' + emoji_lookup_filename: str = base_dir + '/emoji/emoji.json' + custom_emoji_lookup_filename: str = base_dir + '/emojicustom/emoji.json' # create header - instance_title = \ - get_config_param(base_dir, 'instanceTitle') + instance_title: str = get_config_param(base_dir, 'instanceTitle') preload_images: list[str] = [] emoji_form = \ html_header_with_external_style(css_filename, instance_title, None, @@ -119,14 +119,14 @@ def html_search_emoji(translate: {}, base_dir: str, search_str: str, emoji_form += html_footer() return emoji_form - emoji_json = load_json(emoji_lookup_filename) + emoji_json: dict = load_json(emoji_lookup_filename) if emoji_json: if is_a_file(custom_emoji_lookup_filename): - custom_emoji_json = load_json(custom_emoji_lookup_filename) + custom_emoji_json: dict = load_json(custom_emoji_lookup_filename) if custom_emoji_json: emoji_json = dict(emoji_json, **custom_emoji_json) - results = {} + results: dict = {} for emoji_name, filename in emoji_json.items(): if search_str in emoji_name: results[emoji_name] = filename + '.png' @@ -140,8 +140,8 @@ def html_search_emoji(translate: {}, base_dir: str, search_str: str, heading_shown: bool = False emoji_form += '
' - msg_str1 = translate['Copy the text then paste it into your post'] - msg_str2 = ':\n' shared_items_form += \ @@ -279,23 +279,22 @@ def html_search_shared_items(translate: {}, curr_page: int = 1 ctr: int = 0 shared_items_form: str = '' - search_str_lower = urllib.parse.unquote(search_str) + search_str_lower: str = urllib.parse.unquote(search_str) search_str_lower = search_str_lower.lower().strip('\n').strip('\r') - search_str_lower_list = search_str_lower.split('+') - css_filename = base_dir + '/epicyon-profile.css' + search_str_lower_list: list[str] = search_str_lower.split('+') + css_filename: str = base_dir + '/epicyon-profile.css' if is_a_file(base_dir + '/epicyon.css'): css_filename = base_dir + '/epicyon.css' - instance_title = \ - get_config_param(base_dir, 'instanceTitle') + instance_title: str = get_config_param(base_dir, 'instanceTitle') preload_images: list[str] = [] shared_items_form = \ html_header_with_external_style(css_filename, instance_title, None, preload_images) if shares_file_type == 'shares': - title_str = translate['Shared Items Search'] + title_str: str = translate['Shared Items Search'] else: - title_str = translate['Wanted Items Search'] + title_str: str = translate['Wanted Items Search'] # show top banner if nickname and domain and theme_name: @@ -318,18 +317,18 @@ def html_search_shared_items(translate: {}, '

' + \ '' + title_str + '

' results_exist: bool = False - dir_str = data_dir(base_dir) + dir_str: str = data_dir(base_dir) for _, dirs, files in os.walk(dir_str): for handle in dirs: if not is_account_dir(handle): continue - contact_nickname = handle.split('@')[0] - shares_filename = acct_handle_dir(base_dir, handle) + \ + contact_nickname: str = handle.split('@')[0] + shares_filename: str = acct_handle_dir(base_dir, handle) + \ '/' + shares_file_type + '.json' if not is_a_file(shares_filename): continue - shares_json = load_json(shares_filename) + shares_json: dict = load_json(shares_filename) if not shares_json: continue @@ -353,9 +352,9 @@ def html_search_shared_items(translate: {}, # search federated shared items if shares_file_type == 'shares': - catalogs_dir = base_dir + '/cache/catalogs' + catalogs_dir: str = base_dir + '/cache/catalogs' else: - catalogs_dir = base_dir + '/cache/wantedItems' + catalogs_dir: str = base_dir + '/cache/wantedItems' if curr_page <= page_number and is_a_dir(catalogs_dir): for _, dirs, files in os.walk(catalogs_dir): for fname in files: @@ -363,11 +362,11 @@ def html_search_shared_items(translate: {}, continue if not fname.endswith('.' + shares_file_type + '.json'): continue - federated_domain = fname.split('.')[0] + federated_domain: str = fname.split('.')[0] if federated_domain not in shared_items_federated_domains: continue - shares_filename = catalogs_dir + '/' + fname - shares_json = load_json(shares_filename) + shares_filename: str = catalogs_dir + '/' + fname + shares_json: dict = load_json(shares_filename) if not shares_json: continue @@ -406,18 +405,17 @@ def html_search_emoji_text_entry(translate: {}, copyfile(base_dir + '/emoji/default_emoji.json', base_dir + '/emoji/emoji.json') - actor = path.replace('/search', '') + actor: str = path.replace('/search', '') set_custom_background(base_dir, 'search-background', 'follow-background') - css_filename = base_dir + '/epicyon-follow.css' + css_filename: str = base_dir + '/epicyon-follow.css' if is_a_file(base_dir + '/follow.css'): css_filename = base_dir + '/follow.css' - instance_title = \ - get_config_param(base_dir, 'instanceTitle') + instance_title: str = get_config_param(base_dir, 'instanceTitle') preload_images: list[str] = [] - emoji_str = \ + emoji_str: str = \ html_header_with_external_style(css_filename, instance_title, None, preload_images) emoji_str += '
\n' - text_mode_separator = '

' + text_mode_separator: str = '

' post_ctr: int = 0 for post_id in lines: print('Hashtag post_id ' + post_id) - post_json_object = \ + post_json_object: dict = \ get_json(signing_priv_key_pem, session, post_id, as_header, None, debug, mitm_servers, __version__, http_prefix, domain) @@ -1261,10 +1259,10 @@ def html_hashtag_search_remote(nickname: str, domain: str, port: int, if post_json_object.get('id') and \ 'to' in post_json_object and \ 'cc' in post_json_object: - new_url = \ + new_url: str = \ remove_id_ending(post_json_object['id']) - actor = get_actor_from_post_id(new_url) - new_post_json_object = { + actor: str = get_actor_from_post_id(new_url) + new_post_json_object: dict = { "type": "Create", "id": new_url + '/activity', "to": post_json_object['to'], @@ -1292,13 +1290,14 @@ def html_hashtag_search_remote(nickname: str, domain: str, port: int, show_public_only: bool = False store_to_sache: bool = False allow_downloads: bool = True - avatar_url = None + avatar_url: str = None show_avatar_options: bool = True minimize_all_images: bool = False if nickname in min_images_for_accounts: minimize_all_images = True # get the list of mutuals for the current account - mutuals_list = get_mutuals_of_person(base_dir, nickname, domain) + mutuals_list: list[str] = \ + get_mutuals_of_person(base_dir, nickname, domain) post_str = \ individual_post_as_html(signing_priv_key_pem, allow_downloads, recent_posts_cache, @@ -1367,7 +1366,7 @@ def hashtag_search_rss(nickname: str, domain: str, port: int, if hashtag.startswith('#'): hashtag = hashtag[1:] hashtag = urllib.parse.unquote(hashtag) - hashtag_index_file = base_dir + '/tags/' + hashtag + '.txt' + hashtag_index_file: str = base_dir + '/tags/' + hashtag + '.txt' if not is_a_file(hashtag_index_file): if hashtag != hashtag.lower(): hashtag = hashtag.lower() @@ -1378,7 +1377,7 @@ def hashtag_search_rss(nickname: str, domain: str, port: int, # check that the directory for the nickname exists if nickname: - account_dir = acct_dir(base_dir, nickname, domain) + account_dir: str = acct_dir(base_dir, nickname, domain) if not is_a_dir(account_dir): nickname = None @@ -1390,35 +1389,35 @@ def hashtag_search_rss(nickname: str, domain: str, port: int, if not lines: return None - domain_full = get_full_domain(domain, port) + domain_full: str = get_full_domain(domain, port) max_feed_length: int = 10 - hashtag_feed = rss2tag_header(hashtag, http_prefix, domain_full) + hashtag_feed: str = rss2tag_header(hashtag, http_prefix, domain_full) for index, item in enumerate(lines): - post_id = item.strip('\n').strip('\r') + post_id: str = item.strip('\n').strip('\r') if ' ' not in post_id: - nickname = get_nickname_from_actor(post_id) + nickname: str = get_nickname_from_actor(post_id) if not nickname: index += 1 if index >= max_feed_length: break continue else: - post_fields = post_id.split(' ') + post_fields: list[str] = post_id.split(' ') if len(post_fields) != 3: index += 1 if index >= max_feed_length: break continue - nickname = post_fields[1] - post_id = post_fields[2] - post_filename = locate_post(base_dir, nickname, domain, post_id) + nickname: str = post_fields[1] + post_id: str = post_fields[2] + post_filename: str = locate_post(base_dir, nickname, domain, post_id) if not post_filename: index += 1 if index >= max_feed_length: break continue - post_json_object = load_json(post_filename) + post_json_object: dict = load_json(post_filename) if post_json_object: if not is_public_post(post_json_object): index += 1 @@ -1429,13 +1428,14 @@ def hashtag_search_rss(nickname: str, domain: str, port: int, if 'content' in post_json_object['object'] and \ post_json_object['object'].get('attributedTo') and \ post_json_object['object'].get('published'): - published = post_json_object['object']['published'] - pub_date = date_from_string_format(published, - ["%Y-%m-%dT%H:%M:%S%z"]) - rss_date_str = pub_date.strftime("%a, %d %b %Y %H:%M:%S UT") + published: str = post_json_object['object']['published'] + pub_date: str = \ + date_from_string_format(published, ["%Y-%m-%dT%H:%M:%S%z"]) + rss_date_str: str = \ + pub_date.strftime("%a, %d %b %Y %H:%M:%S UT") hashtag_feed += ' ' - attrib_field = post_json_object['object']['attributedTo'] - attrib = get_attributed_to(attrib_field) + attrib_field: str = post_json_object['object']['attributedTo'] + attrib: str = get_attributed_to(attrib_field) if attrib: hashtag_feed += \ ' ' + attrib + '' @@ -1444,7 +1444,7 @@ def hashtag_search_rss(nickname: str, domain: str, port: int, ' ' + \ escape_text(post_json_object['object']['summary']) + \ '' - description = \ + description: str = \ get_base_content_from_post(post_json_object, system_language) description = first_paragraph_from_string(description) @@ -1453,13 +1453,14 @@ def hashtag_search_rss(nickname: str, domain: str, port: int, ' ' + description + '' hashtag_feed += \ ' ' + rss_date_str + '' - post_attachments = get_post_attachments(post_json_object) + post_attachments: list[dict] = \ + get_post_attachments(post_json_object) if post_attachments: for attach in post_attachments: if not attach.get('url'): continue - url_str = get_url_from_post(attach['url']) - attach_url = remove_html(url_str) + url_str: str = get_url_from_post(attach['url']) + attach_url: str = remove_html(url_str) hashtag_feed += \ ' ' + attach_url + '' hashtag_feed += ' ' @@ -1479,7 +1480,7 @@ def hashtag_search_json(nickname: str, domain: str, port: int, if hashtag.startswith('#'): hashtag = hashtag[1:] hashtag = urllib.parse.unquote(hashtag) - hashtag_index_file = base_dir + '/tags/' + hashtag + '.txt' + hashtag_index_file: str = base_dir + '/tags/' + hashtag + '.txt' if not is_a_file(hashtag_index_file): if hashtag != hashtag.lower(): hashtag = hashtag.lower() @@ -1490,7 +1491,7 @@ def hashtag_search_json(nickname: str, domain: str, port: int, # check that the directory for the nickname exists if nickname: - account_dir = acct_dir(base_dir, nickname, domain) + account_dir: str = acct_dir(base_dir, nickname, domain) if not is_a_dir(account_dir): nickname = None @@ -1502,11 +1503,11 @@ def hashtag_search_json(nickname: str, domain: str, port: int, if not lines: return None - domain_full = get_full_domain(domain, port) + domain_full: str = get_full_domain(domain, port) - url = http_prefix + '://' + domain_full + '/tags/' + \ + url: str = http_prefix + '://' + domain_full + '/tags/' + \ hashtag + '?page=' + str(page_number) - hashtag_json = { + hashtag_json: dict = { "@context": [ 'https://www.w3.org/ns/activitystreams', 'https://w3id.org/security/v1' @@ -1525,21 +1526,21 @@ def hashtag_search_json(nickname: str, domain: str, port: int, hashtag + '?page=' + str(page_number - 1) page_items: int = 0 for index, _ in enumerate(lines): - post_id = lines[index].strip('\n').strip('\r') + post_id: str = lines[index].strip('\n').strip('\r') if ' ' not in post_id: - nickname = get_nickname_from_actor(post_id) + nickname: str = get_nickname_from_actor(post_id) if not nickname: continue else: - post_fields = post_id.split(' ') + post_fields: list[str] = post_id.split(' ') if len(post_fields) != 3: continue - nickname = post_fields[1] - post_id = post_fields[2] - post_filename = locate_post(base_dir, nickname, domain, post_id) + nickname: str = post_fields[1] + post_id: str = post_fields[2] + post_filename: str = locate_post(base_dir, nickname, domain, post_id) if not post_filename: continue - post_json_object = load_json(post_filename) + post_json_object: dict = load_json(post_filename) if not post_json_object: continue if not has_object_dict(post_json_object): @@ -1552,7 +1553,7 @@ def hashtag_search_json(nickname: str, domain: str, port: int, page_items += 1 if page_items < posts_per_page * (page_number - 1): continue - id_str = remove_id_ending(post_json_object['object']['id']) + id_str: str = remove_id_ending(post_json_object['object']['id']) hashtag_json['orderedItems'].append(id_str) hashtag_json['totalItems'] += 1 if hashtag_json['totalItems'] >= posts_per_page: diff --git a/webapp_specification.py b/webapp_specification.py index 3f28ce3ac..4827fefb6 100644 --- a/webapp_specification.py +++ b/webapp_specification.py @@ -23,9 +23,9 @@ def html_specification(base_dir: str, http_prefix: str, system_language: str) -> str: """Show the specification screen """ - specification_filename = base_dir + '/specification/activitypub.md' - admin_nickname = get_config_param(base_dir, 'admin') - dir_str = data_dir(base_dir) + specification_filename: str = base_dir + '/specification/activitypub.md' + admin_nickname: str = get_config_param(base_dir, 'admin') + dir_str: str = data_dir(base_dir) if is_a_file(dir_str + '/activitypub.md'): specification_filename = dir_str + '/activitypub.md' @@ -34,22 +34,21 @@ def html_specification(base_dir: str, http_prefix: str, copyfile(dir_str + '/login-background-custom.jpg', dir_str + '/login-background.jpg') - specification_text = 'ActivityPub Protocol Specification.' + specification_text: str = 'ActivityPub Protocol Specification.' if is_a_file(specification_filename): - md_text = load_string(specification_filename, - 'EX: html_specification unable to read ' + - specification_filename) + md_text: str = load_string(specification_filename, + 'EX: html_specification unable to read ' + + specification_filename) if md_text: md_text = markdown_example_numbers(md_text) specification_text = markdown_to_html(md_text) specification_form: str = '' - css_filename = base_dir + '/epicyon-profile.css' + css_filename: str = base_dir + '/epicyon-profile.css' if is_a_file(base_dir + '/epicyon.css'): css_filename = base_dir + '/epicyon.css' - instance_title = \ - get_config_param(base_dir, 'instanceTitle') + instance_title: str = get_config_param(base_dir, 'instanceTitle') specification_form = \ html_header_with_website_markup(css_filename, instance_title, http_prefix, domain_full, @@ -62,7 +61,7 @@ def html_specification(base_dir: str, http_prefix: str, '

' + \ 'http://' + onion_domain + '

\n\n' if admin_nickname: - admin_actor = '/users/' + admin_nickname + admin_actor: str = '/users/' + admin_nickname specification_form += \ '
\n' + \ '

' + \ diff --git a/webapp_suspended.py b/webapp_suspended.py index 1e3d44eef..e91d3301e 100644 --- a/webapp_suspended.py +++ b/webapp_suspended.py @@ -17,12 +17,11 @@ def html_suspended(base_dir: str) -> str: """Show the screen for suspended accounts """ suspended_form: str = '' - css_filename = base_dir + '/epicyon-suspended.css' + css_filename: str = base_dir + '/epicyon-suspended.css' if is_a_file(base_dir + '/suspended.css'): css_filename = base_dir + '/suspended.css' - instance_title = \ - get_config_param(base_dir, 'instanceTitle') + instance_title: str = get_config_param(base_dir, 'instanceTitle') preload_images: list[str] = [] suspended_form = \ html_header_with_external_style(css_filename, instance_title, None,