__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
from __future__ import annotations
import os.path
from collections.abc import Mapping
from typing import NoReturn
from identify.identify import parse_shebang_from_file
class ExecutableNotFoundError(OSError):
def to_output(self) -> tuple[int, bytes, None]:
return (1, self.args[0].encode(), None)
def parse_filename(filename: str) -> tuple[str, ...]:
if not os.path.exists(filename):
return ()
else:
return parse_shebang_from_file(filename)
def find_executable(
exe: str, *, env: Mapping[str, str] | None = None,
) -> str | None:
exe = os.path.normpath(exe)
if os.sep in exe:
return exe
environ = env if env is not None else os.environ
if 'PATHEXT' in environ:
exts = environ['PATHEXT'].split(os.pathsep)
possible_exe_names = tuple(f'{exe}{ext}' for ext in exts) + (exe,)
else:
possible_exe_names = (exe,)
for path in environ.get('PATH', '').split(os.pathsep):
for possible_exe_name in possible_exe_names:
joined = os.path.join(path, possible_exe_name)
if os.path.isfile(joined) and os.access(joined, os.X_OK):
return joined
else:
return None
def normexe(orig: str, *, env: Mapping[str, str] | None = None) -> str:
def _error(msg: str) -> NoReturn:
raise ExecutableNotFoundError(f'Executable `{orig}` {msg}')
if os.sep not in orig and (not os.altsep or os.altsep not in orig):
exe = find_executable(orig, env=env)
if exe is None:
_error('not found')
return exe
elif os.path.isdir(orig):
_error('is a directory')
elif not os.path.isfile(orig):
_error('not found')
elif not os.access(orig, os.X_OK): # pragma: win32 no cover
_error('is not executable')
else:
return orig
def normalize_cmd(
cmd: tuple[str, ...],
*,
env: Mapping[str, str] | None = None,
) -> tuple[str, ...]:
"""Fixes for the following issues on windows
- https://bugs.python.org/issue8557
- windows does not parse shebangs
This function also makes deep-path shebangs work just fine
"""
# Use PATH to determine the executable
exe = normexe(cmd[0], env=env)
# Figure out the shebang from the resulting command
cmd = parse_filename(exe) + (exe,) + cmd[1:]
# This could have given us back another bare executable
exe = normexe(cmd[0], env=env)
return (exe,) + cmd[1:]
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| __pycache__ | Folder | 0755 |
|
|
| commands | Folder | 0755 |
|
|
| languages | Folder | 0755 |
|
|
| meta_hooks | Folder | 0755 |
|
|
| resources | Folder | 0755 |
|
|
| __init__.py | File | 0 B | 0644 |
|
| __main__.py | File | 127 B | 0644 |
|
| all_languages.py | File | 1.43 KB | 0644 |
|
| clientlib.py | File | 16.42 KB | 0644 |
|
| color.py | File | 3.14 KB | 0644 |
|
| constants.py | File | 282 B | 0644 |
|
| envcontext.py | File | 1.56 KB | 0644 |
|
| error_handler.py | File | 2.56 KB | 0644 |
|
| errors.py | File | 78 B | 0644 |
|
| file_lock.py | File | 2.3 KB | 0644 |
|
| git.py | File | 8.33 KB | 0644 |
|
| hook.py | File | 1.48 KB | 0644 |
|
| lang_base.py | File | 5.26 KB | 0644 |
|
| logging_handler.py | File | 1019 B | 0644 |
|
| main.py | File | 15.56 KB | 0644 |
|
| output.py | File | 911 B | 0644 |
|
| parse_shebang.py | File | 2.42 KB | 0644 |
|
| prefix.py | File | 495 B | 0644 |
|
| repository.py | File | 7.43 KB | 0644 |
|
| staged_files_only.py | File | 4.06 KB | 0644 |
|
| store.py | File | 8.27 KB | 0644 |
|
| util.py | File | 6.88 KB | 0644 |
|
| xargs.py | File | 5.42 KB | 0644 |
|
| yaml.py | File | 561 B | 0644 |
|
| yaml_rewrite.py | File | 1.31 KB | 0644 |
|