Psyduck - 可達鴨 之 鴨力山大2


Server : LiteSpeed
System : Linux premium217.web-hosting.com 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64
User : alloknri ( 880)
PHP Version : 8.1.34
Disable Function : NONE
Directory :  /opt/alt/python312/lib64/python3.12/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //opt/alt/python312/lib64/python3.12/linecache.py
"""Cache lines from Python source files.

This is intended to read lines from modules imported -- hence if a filename
is not found, it will look down the module search path for a file by
that name.
"""

import functools
import sys
import os
import tokenize

__all__ = ["getline", "clearcache", "checkcache", "lazycache"]


# The cache. Maps filenames to either a thunk which will provide source code,
# or a tuple (size, mtime, lines, fullname) once loaded.
cache = {}


def clearcache():
    """Clear the cache entirely."""
    cache.clear()


def getline(filename, lineno, module_globals=None):
    """Get a line for a Python source file from the cache.
    Update the cache if it doesn't contain an entry for this file already."""

    lines = getlines(filename, module_globals)
    if 1 <= lineno <= len(lines):
        return lines[lineno - 1]
    return ''


def getlines(filename, module_globals=None):
    """Get the lines for a Python source file from the cache.
    Update the cache if it doesn't contain an entry for this file already."""

    if filename in cache:
        entry = cache[filename]
        if len(entry) != 1:
            return cache[filename][2]

    try:
        return updatecache(filename, module_globals)
    except MemoryError:
        clearcache()
        return []


def checkcache(filename=None):
    """Discard cache entries that are out of date.
    (This is not checked upon each call!)"""

    if filename is None:
        # get keys atomically
        filenames = cache.copy().keys()
    else:
        filenames = [filename]

    for filename in filenames:
        try:
            entry = cache[filename]
        except KeyError:
            continue

        if len(entry) == 1:
            # lazy cache entry, leave it lazy.
            continue
        size, mtime, lines, fullname = entry
        if mtime is None:
            continue   # no-op for files loaded via a __loader__
        try:
            stat = os.stat(fullname)
        except (OSError, ValueError):
            cache.pop(filename, None)
            continue
        if size != stat.st_size or mtime != stat.st_mtime:
            cache.pop(filename, None)


def updatecache(filename, module_globals=None):
    """Update a cache entry and return its list of lines.
    If something's wrong, print a message, discard the cache entry,
    and return an empty list."""

    if filename in cache:
        if len(cache[filename]) != 1:
            cache.pop(filename, None)
    if not filename or (filename.startswith('<') and filename.endswith('>')):
        return []

    fullname = filename
    try:
        stat = os.stat(fullname)
    except OSError:
        basename = filename

        # Realise a lazy loader based lookup if there is one
        # otherwise try to lookup right now.
        if lazycache(filename, module_globals):
            try:
                data = cache[filename][0]()
            except (ImportError, OSError):
                pass
            else:
                if data is None:
                    # No luck, the PEP302 loader cannot find the source
                    # for this module.
                    return []
                cache[filename] = (
                    len(data),
                    None,
                    [line + '\n' for line in data.splitlines()],
                    fullname
                )
                return cache[filename][2]

        # Try looking through the module search path, which is only useful
        # when handling a relative filename.
        if os.path.isabs(filename):
            return []

        for dirname in sys.path:
            try:
                fullname = os.path.join(dirname, basename)
            except (TypeError, AttributeError):
                # Not sufficiently string-like to do anything useful with.
                continue
            try:
                stat = os.stat(fullname)
                break
            except (OSError, ValueError):
                pass
        else:
            return []
    except ValueError:  # may be raised by os.stat()
        return []
    try:
        with tokenize.open(fullname) as fp:
            lines = fp.readlines()
    except (OSError, UnicodeDecodeError, SyntaxError):
        return []
    if lines and not lines[-1].endswith('\n'):
        lines[-1] += '\n'
    size, mtime = stat.st_size, stat.st_mtime
    cache[filename] = size, mtime, lines, fullname
    return lines


def lazycache(filename, module_globals):
    """Seed the cache for filename with module_globals.

    The module loader will be asked for the source only when getlines is
    called, not immediately.

    If there is an entry in the cache already, it is not altered.

    :return: True if a lazy load is registered in the cache,
        otherwise False. To register such a load a module loader with a
        get_source method must be found, the filename must be a cacheable
        filename, and the filename must not be already cached.
    """
    if filename in cache:
        if len(cache[filename]) == 1:
            return True
        else:
            return False
    if not filename or (filename.startswith('<') and filename.endswith('>')):
        return False
    # Try for a __loader__, if available
    if module_globals and '__name__' in module_globals:
        spec = module_globals.get('__spec__')
        name = getattr(spec, 'name', None) or module_globals['__name__']
        loader = getattr(spec, 'loader', None)
        if loader is None:
            loader = module_globals.get('__loader__')
        get_source = getattr(loader, 'get_source', None)

        if name and get_source:
            get_lines = functools.partial(get_source, name)
            cache[filename] = (get_lines,)
            return True
    return False
Name
Size
Permissions
Options
__pycache__
--
drwxr-xr-x
asyncio
--
drwxr-xr-x
collections
--
drwxr-xr-x
concurrent
--
drwxr-xr-x
config-3.12-x86_64-linux-gnu
--
drwxr-xr-x
ctypes
--
drwxr-xr-x
curses
--
drwxr-xr-x
dbm
--
drwxr-xr-x
email
--
drwxr-xr-x
encodings
--
drwxr-xr-x
ensurepip
--
drwxr-xr-x
html
--
drwxr-xr-x
http
--
drwxr-xr-x
importlib
--
drwxr-xr-x
json
--
drwxr-xr-x
lib-dynload
--
drwxr-xr-x
lib2to3
--
drwxr-xr-x
logging
--
drwxr-xr-x
multiprocessing
--
drwxr-xr-x
pydoc_data
--
drwxr-xr-x
re
--
drwxr-xr-x
site-packages
--
drwxr-xr-x
sqlite3
--
drwxr-xr-x
tomllib
--
drwxr-xr-x
unittest
--
drwxr-xr-x
urllib
--
drwxr-xr-x
venv
--
drwxr-xr-x
wsgiref
--
drwxr-xr-x
xml
--
drwxr-xr-x
xmlrpc
--
drwxr-xr-x
zipfile
--
drwxr-xr-x
zoneinfo
--
drwxr-xr-x
LICENSE.txt
13.609 KB
-rw-r--r--
__future__.py
5.096 KB
-rw-r--r--
__hello__.py
0.222 KB
-rw-r--r--
_aix_support.py
3.927 KB
-rw-r--r--
_collections_abc.py
31.337 KB
-rw-r--r--
_compat_pickle.py
8.556 KB
-rw-r--r--
_compression.py
5.548 KB
-rw-r--r--
_markupbase.py
14.31 KB
-rw-r--r--
_osx_support.py
21.507 KB
-rw-r--r--
_py_abc.py
6.044 KB
-rw-r--r--
_pydatetime.py
89.929 KB
-rw-r--r--
_pydecimal.py
221.956 KB
-rw-r--r--
_pyio.py
91.399 KB
-rw-r--r--
_pylong.py
10.537 KB
-rw-r--r--
_sitebuiltins.py
3.055 KB
-rw-r--r--
_strptime.py
27.728 KB
-rw-r--r--
_sysconfigdata__linux_x86_64-linux-gnu.py
74.759 KB
-rw-r--r--
_sysconfigdata_d_linux_x86_64-linux-gnu.py
74.755 KB
-rw-r--r--
_threading_local.py
7.051 KB
-rw-r--r--
_weakrefset.py
5.755 KB
-rw-r--r--
abc.py
6.385 KB
-rw-r--r--
aifc.py
33.409 KB
-rw-r--r--
antigravity.py
0.488 KB
-rw-r--r--
argparse.py
98.784 KB
-rw-r--r--
ast.py
62.941 KB
-rw-r--r--
base64.py
20.164 KB
-rwxr-xr-x
bdb.py
32.786 KB
-rw-r--r--
bisect.py
3.343 KB
-rw-r--r--
bz2.py
11.569 KB
-rw-r--r--
cProfile.py
6.415 KB
-rwxr-xr-x
calendar.py
25.258 KB
-rw-r--r--
cgi.py
33.625 KB
-rwxr-xr-x
cgitb.py
12.13 KB
-rw-r--r--
chunk.py
5.371 KB
-rw-r--r--
cmd.py
14.524 KB
-rw-r--r--
code.py
10.705 KB
-rw-r--r--
codecs.py
36.006 KB
-rw-r--r--
codeop.py
5.77 KB
-rw-r--r--
colorsys.py
3.967 KB
-rw-r--r--
compileall.py
20.026 KB
-rw-r--r--
configparser.py
52.528 KB
-rw-r--r--
contextlib.py
26.989 KB
-rw-r--r--
contextvars.py
0.126 KB
-rw-r--r--
copy.py
8.215 KB
-rw-r--r--
copyreg.py
7.436 KB
-rw-r--r--
crypt.py
3.821 KB
-rw-r--r--
csv.py
16.002 KB
-rw-r--r--
dataclasses.py
60.63 KB
-rw-r--r--
datetime.py
0.262 KB
-rw-r--r--
decimal.py
2.739 KB
-rw-r--r--
difflib.py
81.414 KB
-rw-r--r--
dis.py
29.519 KB
-rw-r--r--
doctest.py
104.247 KB
-rw-r--r--
enum.py
79.629 KB
-rw-r--r--
filecmp.py
10.138 KB
-rw-r--r--
fileinput.py
15.346 KB
-rw-r--r--
fnmatch.py
5.858 KB
-rw-r--r--
fractions.py
37.253 KB
-rw-r--r--
ftplib.py
33.921 KB
-rw-r--r--
functools.py
37.051 KB
-rw-r--r--
genericpath.py
5.441 KB
-rw-r--r--
getopt.py
7.313 KB
-rw-r--r--
getpass.py
5.85 KB
-rw-r--r--
gettext.py
20.82 KB
-rw-r--r--
glob.py
8.527 KB
-rw-r--r--
graphlib.py
9.422 KB
-rw-r--r--
gzip.py
24.807 KB
-rw-r--r--
hashlib.py
9.13 KB
-rw-r--r--
heapq.py
22.484 KB
-rw-r--r--
hmac.py
7.535 KB
-rw-r--r--
imaplib.py
52.773 KB
-rw-r--r--
imghdr.py
4.295 KB
-rw-r--r--
inspect.py
124.146 KB
-rw-r--r--
io.py
3.498 KB
-rw-r--r--
ipaddress.py
79.506 KB
-rw-r--r--
keyword.py
1.048 KB
-rw-r--r--
linecache.py
5.664 KB
-rw-r--r--
locale.py
76.757 KB
-rw-r--r--
lzma.py
12.966 KB
-rw-r--r--
mailbox.py
77.062 KB
-rw-r--r--
mailcap.py
9.114 KB
-rw-r--r--
mimetypes.py
22.497 KB
-rw-r--r--
modulefinder.py
23.144 KB
-rw-r--r--
netrc.py
6.76 KB
-rw-r--r--
nntplib.py
40.124 KB
-rw-r--r--
ntpath.py
31.566 KB
-rw-r--r--
nturl2path.py
2.318 KB
-rw-r--r--
numbers.py
11.198 KB
-rw-r--r--
opcode.py
12.865 KB
-rw-r--r--
operator.py
10.708 KB
-rw-r--r--
optparse.py
58.954 KB
-rw-r--r--
os.py
39.864 KB
-rw-r--r--
pathlib.py
49.855 KB
-rw-r--r--
pdb.py
68.663 KB
-rwxr-xr-x
pickle.py
65.343 KB
-rw-r--r--
pickletools.py
91.848 KB
-rw-r--r--
pipes.py
8.768 KB
-rw-r--r--
pkgutil.py
17.853 KB
-rw-r--r--
platform.py
42.385 KB
-rwxr-xr-x
plistlib.py
27.678 KB
-rw-r--r--
poplib.py
14.276 KB
-rw-r--r--
posixpath.py
17.073 KB
-rw-r--r--
pprint.py
23.592 KB
-rw-r--r--
profile.py
22.564 KB
-rwxr-xr-x
pstats.py
28.603 KB
-rw-r--r--
pty.py
5.993 KB
-rw-r--r--
py_compile.py
7.653 KB
-rw-r--r--
pyclbr.py
11.129 KB
-rw-r--r--
pydoc.py
110.861 KB
-rwxr-xr-x
queue.py
11.227 KB
-rw-r--r--
quopri.py
7.028 KB
-rwxr-xr-x
random.py
33.876 KB
-rw-r--r--
reprlib.py
6.98 KB
-rw-r--r--
rlcompleter.py
7.644 KB
-rw-r--r--
runpy.py
12.583 KB
-rw-r--r--
sched.py
6.202 KB
-rw-r--r--
secrets.py
1.938 KB
-rw-r--r--
selectors.py
19.21 KB
-rw-r--r--
shelve.py
8.359 KB
-rw-r--r--
shlex.py
13.04 KB
-rw-r--r--
shutil.py
55.432 KB
-rw-r--r--
signal.py
2.437 KB
-rw-r--r--
site.py
22.654 KB
-rw-r--r--
smtplib.py
42.524 KB
-rwxr-xr-x
sndhdr.py
7.273 KB
-rw-r--r--
socket.py
36.929 KB
-rw-r--r--
socketserver.py
27.407 KB
-rw-r--r--
sre_compile.py
0.226 KB
-rw-r--r--
sre_constants.py
0.227 KB
-rw-r--r--
sre_parse.py
0.224 KB
-rw-r--r--
ssl.py
49.711 KB
-rw-r--r--
stat.py
5.356 KB
-rw-r--r--
statistics.py
49.05 KB
-rw-r--r--
string.py
11.51 KB
-rw-r--r--
stringprep.py
12.614 KB
-rw-r--r--
struct.py
0.251 KB
-rw-r--r--
subprocess.py
86.667 KB
-rw-r--r--
sunau.py
18.045 KB
-rw-r--r--
symtable.py
12.185 KB
-rw-r--r--
sysconfig.py
31.104 KB
-rw-r--r--
tabnanny.py
11.274 KB
-rwxr-xr-x
tarfile.py
109.822 KB
-rwxr-xr-x
telnetlib.py
22.787 KB
-rw-r--r--
tempfile.py
31.627 KB
-rw-r--r--
textwrap.py
19.256 KB
-rw-r--r--
this.py
0.979 KB
-rw-r--r--
threading.py
58.789 KB
-rw-r--r--
timeit.py
13.161 KB
-rwxr-xr-x
token.py
2.452 KB
-rw-r--r--
tokenize.py
21.064 KB
-rw-r--r--
trace.py
28.678 KB
-rwxr-xr-x
traceback.py
45.306 KB
-rw-r--r--
tracemalloc.py
17.624 KB
-rw-r--r--
tty.py
1.987 KB
-rw-r--r--
types.py
10.735 KB
-rw-r--r--
typing.py
116.051 KB
-rw-r--r--
uu.py
7.169 KB
-rw-r--r--
uuid.py
28.961 KB
-rw-r--r--
warnings.py
21.396 KB
-rw-r--r--
wave.py
22.235 KB
-rw-r--r--
weakref.py
21.009 KB
-rw-r--r--
webbrowser.py
23.189 KB
-rwxr-xr-x
xdrlib.py
5.803 KB
-rw-r--r--
zipapp.py
7.366 KB
-rw-r--r--
zipimport.py
27.188 KB
-rw-r--r--