diff --git a/modules/ui_extra_networks.py b/modules/ui_extra_networks.py index 17a1c5b7e..e599a99cd 100644 --- a/modules/ui_extra_networks.py +++ b/modules/ui_extra_networks.py @@ -8,7 +8,6 @@ import html import base64 import urllib.parse import threading -from typing import TYPE_CHECKING from types import SimpleNamespace from pathlib import Path from html.parser import HTMLParser @@ -134,7 +133,7 @@ class DateTimeEncoder(json.JSONEncoder): class ExtraNetworksPage: - def __init__(self, title): + def __init__(self, title: str): self.title = title self.name = title.lower() self.allow_negative_prompt = False @@ -198,7 +197,7 @@ class ExtraNetworksPage: errors.display(e, 'Network version') return all_versions[0] - def link_preview(self, filename): + def link_preview(self, filename: str): quoted_filename = urllib.parse.quote(filename.replace('\\', '/')) mtime = os.path.getmtime(filename) if os.path.exists(filename) else 0 preview = f"{shared.opts.subpath}/sdapi/v1/network/thumb?filename={quoted_filename}&mtime={mtime}" @@ -256,7 +255,7 @@ class ExtraNetworksPage: log.info(f'Network thumbnails: type={self.name} created={created}') self.missing_thumbs.clear() - def create_items(self, tabname): + def create_items(self, tabname: str): if self.refresh_time is not None and self.refresh_time > refresh_time: # cached results return t0 = time.time() @@ -276,7 +275,7 @@ class ExtraNetworksPage: debug(f'EN create-items: page={self.name} items={len(self.items)} time={t1-t0:.2f}') self.list_time += t1-t0 - def create_page(self, tabname, skip = False): + def create_page(self, tabname: str, skip = False): debug(f'EN create-page: {self.name}') if self.page_time > refresh_time and len(self.html) > 0: # cached page return self.patch(self.html, tabname) @@ -388,7 +387,7 @@ class ExtraNetworksPage: def allowed_directories_for_previews(self): return [] - def create_html(self, item, tabname): + def create_html(self, item, tabname: str): def random_bright_color(): r = random.randint(100, 255) g = random.randint(100, 255) @@ -429,7 +428,7 @@ class ExtraNetworksPage: errors.display(e, 'Networks') return "" - def find_preview_file(self, path): + def find_preview_file(self, path: str | None): if path is None: return 'html/missing.png' if os.path.join('models', 'Reference') in path: @@ -450,7 +449,7 @@ class ExtraNetworksPage: return file return 'html/missing.png' - def find_preview(self, filename): + def find_preview(self, filename: str): t0 = time.time() preview_file = self.find_preview_file(filename) self.preview_time += time.time() - t0 @@ -503,7 +502,7 @@ class ExtraNetworksPage: debug(f'EN missing-preview: {item["name"]}') self.preview_time += time.time() - t0 - def find_description(self, path, info=None): + def find_description(self, path: str | None, info=None): t0 = time.time() class HTMLFilter(HTMLParser): text = "" @@ -535,7 +534,7 @@ class ExtraNetworksPage: self.desc_time += t1-t0 return f.text - def find_info(self, path): + def find_info(self, path: str | None): data = {} if shared.cmd_opts.no_metadata: return data @@ -594,7 +593,7 @@ def register_pages(): register_page(ExtraNetworksPageTextualInversion()) -def get_pages(title=None): +def get_pages(title: str | None = None): visible = shared.opts.extra_networks pages: list[ExtraNetworksPage] = [] if 'All' in visible or visible == []: # default en sort order @@ -646,7 +645,7 @@ class ExtraNetworksUi: self.state: gr.State = None -def create_ui(container, button_parent, tabname, skip_indexing = False): +def create_ui(container, button_parent: gr.Button, tabname: str, skip_indexing = False): if 'networks' in shared.opts.ui_disabled: return None debug(f'EN create-ui: {tabname}') @@ -881,25 +880,19 @@ def create_ui(container, button_parent, tabname, skip_indexing = False): from modules import images page, item = get_item(state, params) is_style = (page is not None) and (page.title == 'Style') - is_valid = (item is not None) and hasattr(item, 'name') and hasattr(item, 'filename') + is_valid = False - if is_valid: - if TYPE_CHECKING: - assert item is not None # Part of the definition of "is_valid" + if (item is not None) and hasattr(item, 'name') and hasattr(item, 'filename'): + is_valid = True stat_size, stat_mtime = modelstats.stat(item.filename) if hasattr(item, 'size') and item.size > 0: stat_size = item.size if hasattr(item, 'mtime') and item.mtime is not None: stat_mtime = item.mtime desc = item.description - fullinfo = shared.readfile(os.path.splitext(item.filename)[0] + '.json', silent=True, as_type="dict") - if 'modelVersions' in fullinfo: # sanitize massive objects - fullinfo['modelVersions'] = [] - info = fullinfo - if isinstance(info, list): - item.filename = None - log.warning('Network: show details not supported for compound item') - info = None + info = shared.readfile(os.path.splitext(item.filename)[0] + '.json', silent=True, as_type="dict") + if 'modelVersions' in info: # sanitize massive objects + info['modelVersions'] = [] if prompt is not None and len(prompt) > 0: item.prompt = prompt if negative is not None and len(negative) > 0: @@ -974,10 +967,12 @@ def create_ui(container, button_parent, tabname, skip_indexing = False): ''' if item.name.startswith('Diffusers'): url = item.name.replace('Diffusers/', '') - url = f'https://huggingface.co/models/{url}' if url is not None else 'N/A' + url = f'https://huggingface.co/models/{url}' else: - url = info.get('id', None) if info is not None else None - url = f'civitai.com/models/{url}' if url is not None else 'N/A' + info_id = info.get('id', None) + nsfw = info.get('nsfw', False) if info_id is not None else False + tld = "red" if nsfw else "com" + url = f'civitai.{tld}/models/{info_id}' if info_id is not None else 'N/A' text = f'''

{item.name}