Use a nicer decorator for functions that only need to be run once

This commit is contained in:
Kovid Goyal
2021-02-05 10:40:52 +05:30
parent 726d736aac
commit fe07306ff1
11 changed files with 67 additions and 31 deletions

View File

@@ -3,16 +3,17 @@
# License: GPL v3 Copyright: 2018, Kovid Goyal <kovid at kovidgoyal.net>
import warnings
from functools import lru_cache
from gettext import gettext as _
from itertools import repeat, zip_longest
from math import ceil
from typing import Callable, Dict, Generator, Iterable, List, Optional, Tuple
from kitty.fast_data_types import truncate_point_for_length, wcswidth
from kitty.cli_stub import DiffCLIOptions
from kitty.fast_data_types import truncate_point_for_length, wcswidth
from kitty.types import run_once
from kitty.utils import ScreenSize
from ..tui.images import ImageManager, can_display_images
from .collect import (
Collection, Segment, data_for_path, highlights_for_path, is_image,
lines_for_path, path_name_map, sanitize
@@ -20,14 +21,13 @@ from .collect import (
from .config import formats
from .diff_speedup import split_with_highlights as _split_with_highlights
from .patch import Chunk, Hunk, Patch
from ..tui.images import ImageManager, can_display_images
class ImageSupportWarning(Warning):
pass
@lru_cache(maxsize=2)
@run_once
def images_supported() -> bool:
ans = can_display_images()
if not ans:

View File

@@ -10,7 +10,6 @@ import socket
import sys
import zlib
from base64 import standard_b64encode
from functools import lru_cache
from math import ceil
from tempfile import NamedTemporaryFile
from typing import (
@@ -21,6 +20,7 @@ from kitty.cli import parse_args
from kitty.cli_stub import IcatCLIOptions
from kitty.constants import appname
from kitty.guess_mime_type import guess_type
from kitty.types import run_once
from kitty.typing import GRT_f, GRT_t
from kitty.utils import (
TTYIO, ScreenSize, ScreenSizeGetter, fit_image, screen_size_function
@@ -142,7 +142,7 @@ def get_screen_size() -> ScreenSize:
return screen_size()
@lru_cache(maxsize=2)
@run_once
def options_spec() -> str:
return OPTIONS.format(appname='{}-icat'.format(appname))

View File

@@ -6,9 +6,11 @@
import importlib
import os
import sys
from functools import lru_cache, partial
from functools import partial
from typing import Any, Dict, FrozenSet, List
from kitty.types import run_once
aliases = {'url_hints': 'hints'}
@@ -57,8 +59,9 @@ def create_kitten_handler(kitten: str, orig_args: List[str]) -> Any:
def set_debug(kitten: str) -> None:
from kittens.tui.loop import debug
import builtins
from kittens.tui.loop import debug
setattr(builtins, 'debug', debug)
@@ -118,7 +121,7 @@ def run_kitten(kitten: str, run_name: str = '__main__') -> None:
m['main'](sys.argv)
@lru_cache(maxsize=2)
@run_once
def all_kitten_names() -> FrozenSet[str]:
n = []
import glob